Verfasst: 25.01.2006 19:02
Kommt drauf an in welche Richtung (RotateSprite3D()
)
Das deutsche PureBasic-Forum
https://www.purebasic.fr/german/
Wie wäre es einfach mit ausprobieren, anstatt hier solchen Schmarrn zu schreiben?Ja! hat geschrieben:Wenn man ein 3DSprite um 90° drehen würde, wäre es
nicht sichtbar, weil es keine 3te Dimension hat. Das meinte ich damit..
Wollte nur nicht so weit ausholen
Das ist so, als ob Du von 10 Menschen, die an einemroherter hat geschrieben:Ich dachte hier geht es darum einen Forumbenutzer bei seinem Problem zu helfen???
Code: Alles auswählen
; Variablen und Konstanten initialisieren
#version="(c) oppi 2003, V1.70"
#appname="ANACLOX"
#ininame="anaclox.ini"
Global width, height, winx, winy
Global box.l,s, PI2.f, PI.f, xm, ym, radius
Global tickcol.l, seccol.l, mincol.l, hcol.l, backcol.l, boxcol.l, jewcol.l, txtcol.l
Global tid.l, info$, font.l,s.l,os.l
Global flags.l
PI2=ATan(1)*8
PI=ATan(1)*4
Structure xy
xa.l
ya.l
xe.l
ye.l
xb.l
yb.l
xc.l
yc.l
xf.l
yf.l
EndStructure
Dim ticks.xy(60)
Dim secs.xy(60)
Dim mins.xy(60)
Dim hrs.xy(60)
Dim M$(12)
M$(1)="JAN"
M$(2)="FEB"
M$(3)="MAR"
M$(4)="APR"
M$(5)="MAY"
M$(6)="JUN"
M$(7)="JUL"
M$(8)="AUG"
M$(9)="SEP"
M$(10)="OCT"
M$(11)="NOV"
M$(12)="DEZ"
;- GUI Konstanten
#win=0
#clock=0
#set=0
#OnTop=0
#ShowDay=1
#ShowMonth=2
#ShowYear=3
#ShowInfo=4
#setInfo=5
#default=8
#ver=9
#quit=10
#seccol=11
#mincol=12
#hrscol=13
#jewcol=14
#txtcol=15
#backcol=16
#boxcol=17
#tickcol=18
LoadImage(1,"hinter.bmp")
Procedure LoadPrefs(ininame.s)
OpenPreferences(ininame)
info$ =ReadPreferenceString("info",#version)
width =ReadPreferenceLong("width",300)
height =ReadPreferenceLong("height",300)
winx =ReadPreferenceLong("winx",GetSystemMetrics_(#SM_CXSCREEN)/2-width/2)
winy =ReadPreferenceLong("winy",GetSystemMetrics_(#SM_CYSCREEN)/2-height/2)
boxcol =ReadPreferenceLong("boxcol",$FFFFFF)
backcol=ReadPreferenceLong("backcol",$FFFFFF)
tickcol=ReadPreferenceLong("tickcol",$AAAAAA)
jewcol =ReadPreferenceLong("jewcol",$00FFFF)
seccol =ReadPreferenceLong("seccol",$0000FF)
mincol =ReadPreferenceLong("mincol",$00FF00)
hcol =ReadPreferenceLong("hcol",$FF0000)
txtcol =ReadPreferenceLong("txtcol",$111111)
flags =ReadPreferenceLong("flags",1+2+16)
ClosePreferences()
EndProcedure
Procedure savePrefs(ininame.s)
CreatePreferences(ininame)
WritePreferenceString("info",info$)
WritePreferenceLong("width",WindowWidth())
WritePreferenceLong("height",WindowHeight())
WritePreferenceLong("winx",WindowX())
WritePreferenceLong("winy",WindowY())
WritePreferenceLong("boxcol",boxcol)
WritePreferenceLong("backcol",backcol)
WritePreferenceLong("tickcol",tickcol)
WritePreferenceLong("jewcol",jewcol)
WritePreferenceLong("seccol",seccol)
WritePreferenceLong("mincol",mincol)
WritePreferenceLong("hcol",hcol)
WritePreferenceLong("txtcol",txtcol)
WritePreferenceLong("flags",flags)
ClosePreferences()
EndProcedure
Procedure resetPrefs(ininame.s)
CreatePreferences(ininame)
ClosePreferences()
LoadPrefs(ininame)
EndProcedure
Procedure DrawClock()
xm=WindowWidth()/2 : ym=WindowHeight()/2
If ym<xm : radius=ym*0.98 : Else : radius=xm*0.98 : EndIf
font = LoadFont(0, "comic sans ms", radius*0.06)
;- Koordinaten berechnen
a.f=PI2 : t=0
While a >= 0
ticks(t)\xa=Sin(a+PI)*(radius*0.91)+xm
ticks(t)\ya=Cos(a+PI)*(radius*0.91)+ym
ticks(t)\xb=Sin(a+PI+PI/40)*(radius*0.89)+xm
ticks(t)\yb=Cos(a+PI+PI/40)*(radius*0.89)+ym
ticks(t)\xc=Sin(a+PI-PI/40)*(radius*0.89)+xm
ticks(t)\yc=Cos(a+PI-PI/40)*(radius*0.89)+ym
ticks(t)\xf=Sin(a+PI)*(radius*0.89)+xm
ticks(t)\yf=Cos(a+PI)*(radius*0.89)+ym
ticks(t)\xe=Sin(a+PI)*(radius*0.87)+xm
ticks(t)\ye=Cos(a+PI)*(radius*0.87)+ym
secs(t)\xa=Sin(a+PI)*(radius*0.10)+xm
secs(t)\ya=Cos(a+PI)*(radius*0.10)+ym
secs(t)\xe=Sin(a+PI)*(radius*0.84)+xm
secs(t)\ye=Cos(a+PI)*(radius*0.84)+ym
secs(t)\xf=Sin(a+PI)*(radius*0.75)+xm
secs(t)\yf=Cos(a+PI)*(radius*0.75)+ym
mins(t)\xa=Sin(a+PI)*(radius*0.10)+xm
mins(t)\ya=Cos(a+PI)*(radius*0.10)+ym
mins(t)\xb=Sin(a+PI+PI/40)*(radius*0.60)+xm
mins(t)\yb=Cos(a+PI+PI/40)*(radius*0.60)+ym
mins(t)\xc=Sin(a+PI-PI/40)*(radius*0.60)+xm
mins(t)\yc=Cos(a+PI-PI/40)*(radius*0.60)+ym
mins(t)\xf=Sin(a+PI)*(radius*0.60)+xm
mins(t)\yf=Cos(a+PI)*(radius*0.60)+ym
mins(t)\xe=Sin(a+PI)*(radius*0.80)+xm
mins(t)\ye=Cos(a+PI)*(radius*0.80)+ym
hrs(t)\xa=Sin(a+PI)*(radius*0.10)+xm
hrs(t)\ya=Cos(a+PI)*(radius*0.10)+ym
hrs(t)\xb=Sin(a+PI+PI/20)*(radius*0.50)+xm
hrs(t)\yb=Cos(a+PI+PI/20)*(radius*0.50)+ym
hrs(t)\xc=Sin(a+PI-PI/20)*(radius*0.50)+xm
hrs(t)\yc=Cos(a+PI-PI/20)*(radius*0.50)+ym
hrs(t)\xf=Sin(a+PI)*(radius*0.50)+xm
hrs(t)\yf=Cos(a+PI)*(radius*0.50)+ym
hrs(t)\xe=Sin(a+PI)*(radius*0.70)+xm
hrs(t)\ye=Cos(a+PI)*(radius*0.70)+ym
a-PI2/60
t+1
Wend
;- Ziffernblatt
box = CreateImage(0, 2*xm,2*ym)
box = CopyImage(1,0)
StartDrawing(ImageOutput())
; Box(0, 0,2*xm, 2*ym,boxcol)
DrawingMode(4)
Circle(xm,ym,radius,tickcol)
Circle(xm,ym,radius*0.95,backcol)
DrawingMode(0)
Circle(xm,ym,radius*0.09,tickcol)
FillArea(xm+radius-2,ym,backcol,tickcol)
For t=0 To 59
If t=0 Or t=15 Or t=30 Or t=45
LineXY(ticks(t)\xa,ticks(t)\ya,ticks(t)\xb,ticks(t)\yb,tickcol)
LineXY(ticks(t)\xb,ticks(t)\yb,ticks(t)\xe,ticks(t)\ye,tickcol)
LineXY(ticks(t)\xe,ticks(t)\ye,ticks(t)\xc,ticks(t)\yc,tickcol)
LineXY(ticks(t)\xc,ticks(t)\yc,ticks(t)\xa,ticks(t)\ya,tickcol)
FillArea(ticks(t)\xf,ticks(t)\yf,tickcol,jewcol)
ElseIf t=5 Or t=10 Or t=20 Or t=25 Or t=35 Or t=40 Or t=50 Or t=55
Circle(ticks(t)\xf,ticks(t)\yf,radius*0.02,jewcol)
DrawingMode(4)
Circle(ticks(t)\xf,ticks(t)\yf,radius*0.02,tickcol)
DrawingMode(0)
Else
LineXY(ticks(t)\xa,ticks(t)\ya,ticks(t)\xe,ticks(t)\ye,tickcol)
EndIf
Next
StopDrawing()
CopyImage(0,2)
EndProcedure
Procedure tick(value.l)
Repeat
s=Second(Date())
If s<>os
m=Minute(Date())
h=Hour(Date())
If h > 12 : h=h-12 : EndIf
h=h*5+m/12
If h > 60 : h=h-60 : EndIf
d$=""
UseImage(0)
StartDrawing(ImageOutput())
DrawImage(UseImage(2),0,0)
DrawingMode(4)
Circle(xm,ym,radius*0.85,backcol)
Circle(xm,ym,radius*0.09,tickcol)
DrawingMode(1)
If flags&16
FrontColor(Red(txtcol),Green(txtcol),Blue(txtcol))
BackColor(Red(backcol),Green(backcol),Blue(backcol))
DrawingFont(font)
l=TextLength(info$)
Locate(xm-l/2,ym+radius*0.40)
DrawText(info$)
EndIf
If flags&2 : d$=Str(Day(Date())) : EndIf
If flags&2 And flags&4 : d$=" "+d$ : EndIf
If flags&4 : d$=M$( Month(Date() ))+d$ : EndIf
If (flags&2 Or flags&4) And flags&8 : d$+", " : EndIf
If flags&8 : d$+Str(Year(Date())) : EndIf
If d$
DrawingFont(font)
dl=TextLength(d$)
dh=TextLength("Mx")
Box(xm-dl/2*1.5,ym-radius*0.62,dl*1.5,dh*1.5,jewcol)
DrawingMode(4)
Box(xm-dl/2*1.5,ym-radius*0.62,dl*1.5,dh*1.5,tickcol)
DrawingMode(0)
Locate(xm-dl/2,ym-radius*0.60)
FrontColor(Red(txtcol),Green(txtcol),Blue(txtcol))
BackColor(Red(jewcol),Green(jewcol),Blue(jewcol))
DrawText(d$)
EndIf
; ;- neue Zeiger malen
LineXY(mins(m)\xa,mins(m)\ya,mins(m)\xb,mins(m)\yb,mincol)
LineXY(mins(m)\xb,mins(m)\yb,mins(m)\xe,mins(m)\ye,mincol)
LineXY(mins(m)\xe,mins(m)\ye,mins(m)\xc,mins(m)\yc,mincol)
LineXY(mins(m)\xc,mins(m)\yc,mins(m)\xa,mins(m)\ya,mincol)
FillArea(mins(m)\xf,mins(m)\yf,mincol,mincol)
LineXY(hrs(h)\xa,hrs(h)\ya,hrs(h)\xb,hrs(h)\yb,hcol)
LineXY(hrs(h)\xb,hrs(h)\yb,hrs(h)\xe,hrs(h)\ye,hcol)
LineXY(hrs(h)\xe,hrs(h)\ye,hrs(h)\xc,hrs(h)\yc,hcol)
LineXY(hrs(h)\xc,hrs(h)\yc,hrs(h)\xa,hrs(h)\ya,hcol)
FillArea(hrs(h)\xf,hrs(h)\yf,hcol,hcol)
LineXY(secs(s)\xa,secs(s)\ya,secs(s)\xe,secs(s)\ye,seccol)
Circle(secs(s)\xf,secs(s)\yf,radius*0.03,seccol)
StopDrawing()
SetGadgetState(0,box)
;SetGadgetState(0,UseImage(2))
os=s
; Delay(800); ein bischen warten, damit repeat until nicht soviel loopt
EndIf
Delay(1)
ForEver
EndProcedure
Procedure ToggleOnTop()
If GetMenuItemState(#set,#OnTop)
SetWindowPos_(WindowID(),#HWND_TOPMOST,0,0,0,0,#SWP_SHOWWINDOW|#SWP_NOMOVE|#SWP_NOSIZE)
Else
SetWindowPos_(WindowID(),#HWND_NOTOPMOST,0,0,0,0,#SWP_SHOWWINDOW|#SWP_NOMOVE|#SWP_NOSIZE)
EndIf
EndProcedure
;-main
LoadPrefs(#ininame)
box = CreateImage(0, width,height)
CopyImage(1,0)
;-create window
OpenWindow(#win,winx,winy,width,height,#PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget|#PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar,#appname)
CreateGadgetList(WindowID(0))
ImageGadget(#clock,0,0,width,height,box)
CreatePopupMenu(#set)
MenuTitle(#appname+" settings")
MenuItem(#OnTop,"always on top")
SetMenuItemState(#set,#OnTop,flags&1)
ToggleOnTop()
MenuItem(#ShowDay,"show day")
SetMenuItemState(#set,#ShowDay,flags&2)
MenuItem(#ShowMonth,"show month")
SetMenuItemState(#set,#ShowMonth,flags&4)
MenuItem(#ShowYear,"show year")
SetMenuItemState(#set,#ShowYear,flags&8)
MenuItem(#ShowInfo,"show info")
SetMenuItemState(#set,#ShowInfo,flags&16)
OpenSubMenu("change colors")
MenuItem(#seccol,"seconds")
MenuItem(#mincol,"minutes")
MenuItem(#hrscol,"hours")
MenuItem(#jewcol,"jewels")
MenuItem(#txtcol,"text")
MenuItem(#tickcol,"border")
MenuItem(#backcol,"background")
MenuItem(#boxcol,"box")
CloseSubMenu()
MenuItem(#setInfo,"change info")
MenuBar()
MenuItem(#default,"set defaults")
MenuBar()
MenuItem(#quit, "close")
MenuItem(#ver,#version)
DisableMenuItem(#ver,1)
;-draw clock
DrawClock()
tid=CreateThread(@tick(),0)
;SetWindowCallback(@SizeCallback())
;event loop
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_SizeWindow
PauseThread(tid)
winx=WindowX() : winy=WindowY()
height=WindowHeight() : width=WindowWidth()
If height<50 : winy-(50-height) : height=50 : EndIf
If height>600 : height=600 : EndIf
If width>800 : width=800 : EndIf
MoveWindow(winx,winy) : ResizeWindow(width,height)
os=s-1 : DrawClock()
ResumeThread(tid)
Case #WM_SIZE
; PauseThread(tid)
; winx=WindowX() : winy=WindowY()
; height=WindowHeight() : width=WindowWidth()
; If height<50 : winy-(50-height) : height=50 : EndIf
; MoveWindow(winx,winy) : ResizeWindow(width,height)
; os=s-1 : DrawClock()
; ResumeThread(tid)
Case #WM_RButtonDown
popx.l=WindowX()+WindowMouseX()
popy.l=WindowY()+WindowMouseY()
DisplayPopupMenu(0,WindowID(0),popx,popy)
; Case #PB_EventGadget
; GadgetID = EventGadgetID()
; Select GadgetID
;
; EndSelect
Case #PB_EventMenu
MenuID = EventMenuID()
Select MenuID
Case #quit
Case #OnTop
SetMenuItemState(#set,#OnTop,GetMenuItemState(#set,#OnTop)!1)
ToggleOnTop()
flags!1
Case #ShowDay
SetMenuItemState(#set,#ShowDay,GetMenuItemState(#set,#ShowDay)!1)
flags!2
Case #ShowMonth
SetMenuItemState(#set,#ShowMonth,GetMenuItemState(#set,#ShowMonth)!1)
flags!4
Case #ShowYear
SetMenuItemState(#set,#ShowYear,GetMenuItemState(#set,#ShowYear)!1)
flags!8
Case #ShowInfo
SetMenuItemState(#set,#ShowInfo,GetMenuItemState(#set,#ShowInfo)!1)
flags!16
Case #setInfo
Repeat
info$=InputRequester(#appname+" info text edit","your text has: "+Str(Len(info$))+" chars, max. 30 chars are allowed",info$)
Until Len(info$)<30
Case #default
resetPrefs(#ininame)
; setwindowpos_(WindowID(),#HWND_TOP,winx,winy,width,height,#SWP_SHOWWINDOW)
PauseThread(tid)
MoveWindow(winx,winy) : ResizeWindow(width,height)
SetMenuItemState(#set,#OnTop,flags&1)
SetMenuItemState(#set,#ShowDay,flags&2)
SetMenuItemState(#set,#ShowMonth,flags&4)
SetMenuItemState(#set,#ShowYear,flags&8)
SetMenuItemState(#set,#ShowInfo,flags&16)
os=s-1 : DrawClock()
ResumeThread(tid)
ToggleOnTop()
Case #seccol
seccol=ColorRequester()
Case #mincol
mincol=ColorRequester()
Case #hrscol
hcol=ColorRequester()
Case #jewcol
jewcol=ColorRequester()
PauseThread(tid) : os=s-1 : DrawClock() : ResumeThread(tid)
Case #txtcol
txtcol=ColorRequester()
Case #tickcol
tickcol=ColorRequester()
PauseThread(tid) : os=s-1 : DrawClock() : ResumeThread(tid)
Case #backcol
backcol=ColorRequester()
PauseThread(tid) : os=s-1 : DrawClock() : ResumeThread(tid)
Case #boxcol
boxcol=ColorRequester()
PauseThread(tid) : os=s-1 : DrawClock() : ResumeThread(tid)
EndSelect
EndSelect
Until EventID = #PB_EventCloseWindow
savePrefs(#ininame)
CloseWindow(0)
Code: Alles auswählen
info = www.meineurl.de
width = 500
height = 500
winx = 262
winy = 50
boxcol = 16777215
backcol = 1118481
tickcol = 1118481
jewcol = 65535
seccol = 255
mincol = 16711680
hcol = 16711680
txtcol = 1118481
flags = 26