Seite 3 von 3

Verfasst: 25.01.2006 19:02
von Macros
Kommt drauf an in welche Richtung (RotateSprite3D() :wink: )

Verfasst: 25.01.2006 19:41
von Ypser
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 ;)
Wie wäre es einfach mit ausprobieren, anstatt hier solchen Schmarrn zu schreiben? 8)

Verfasst: 25.01.2006 22:54
von Ja!
Ach kommt schon, Ihr wisst doch was ich meine!
Stellt Euch nicht so dumm, wie ich aussehe! ähh ja..

Verfasst: 25.01.2006 23:04
von roherter
Ich dachte hier geht es darum einen Forumbenutzer bei seinem Problem zu helfen??? :o

Verfasst: 26.01.2006 17:41
von Ja!
roherter hat geschrieben:Ich dachte hier geht es darum einen Forumbenutzer bei seinem Problem zu helfen??? :o
Das ist so, als ob Du von 10 Menschen, die an einem
Tisch sitzen, verlangen würdest, daß alle über das gleiche Thema reden,
ohne abzuschweifen.

Außerdem ist es doch nicht schlimm, wenn man in einem Thread gleich mehrere Probleme/Fragen behandeln kann.
Dem Fragesteller wurde ja auch schon zur genüge geholfen, denke ich.

..und nichts für ungut, ist nicht böse gemeint :)

schon ne lösung gefunden?

Verfasst: 04.02.2006 15:14
von hiltwin
also, ich würde den anaclox-code von wichtel nehmen ...

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)
dein bild passt du so an, dass es in den hintergrund passt ..

die anaclox.ini datei hat folgenden inhalt:

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
und dann schaust du dir gut an, wie das ganze funktioniert. das programm eignet sich super zum nachvollziehen und verändern.

du nimmst folgende anpassung vor:

1.) du modifizierst das programm so, dass es nicht mehr die aktuelle zeit nutzt
2.) du schmeisst die beiden zeiger, die du nicht magst, raus
3.) du übergibst, je nach deiner gerade aktuellen U/min, den Wert an die Variable für Deine Uhr
Bsp: Die U/Min 4000 soll auf "2" Uhr oben stehen - so muss die Variable für den Sekundenzeiger den Wert "10" annehmen - ist die U/Min = 0 und die U/Min = 0 soll auf "8 Uhr" stehen, dass musst Du die Variable so belegen, dass sie auf 40 Sekunden steht ...

Viel Spass!

Verfasst: 04.02.2006 18:38
von kdeparade
Danke !
da hast Du Dir aber mächtig Mühe gegeben.
Werde es gleich mal testen.

ne ...

Verfasst: 04.02.2006 20:10
von hiltwin
... die wirklich ganze arbeit und damit das lob gebührt wichtel - ich hab nur die idee dazu beigesteuert, wie du das ganze für dich nutzbar machen kannst - das war 1 minute nachdenken, 1 minute im script-archiv gucken und eine minute hier posten - kein grosser aufwand

viel erfolg beim drehzahlmesser - falls du probleme hast, wie du das angehen sollst, kannst du dich gerne noch mal melden.
aber wie gesagt - der code eignet sich bestens zum spielen und experimentieren ...