Seite 1 von 1

sprite darstellen mittels timer (pbosl)

Verfasst: 02.03.2007 11:15
von xverbatim
hallo,

ich wollte mich mal darin versuchen, eine procedure zu schreiben, die mir ermöglicht, eine sprite einfach von a nach b zu bewegen, der aufruf sollte als timer passieren, leider gibt es da wohl ein problem ;-(


die procedure sprite_move(sprite,x,y) soll eigentlich nur einen timer erstellen und das sprite in den positionen setzen..aber irgendwie wenn ich sprite_move dann ständig aufrufe, wird es neu initialisiert, was natürlich quatsch ist, wie könnte man denn sowas hinbekommen?

wenn ich die bewegungsprocedure vor repeat setze, erscheint kein sprite, wie also umsetzen ?

muß doch eigentlich gehen oder ?

also einfach ein sprite init, timer create, und sprite bewegen lassen...
nur wie?


benutze übrigens pb4.02 und die pbosl lib...
gruß xverbatim


Code: Alles auswählen

Global xp.w
Global yp.w
Global sp.b

Procedure Screen()      ; Bildschirm init
If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Error", "Can't open DirectX 7 or later", 0)
  End
EndIf
OpenScreen(1024,768,32, "Sprite")
EndProcedure

Procedure Clear_Screen(); Bildschirm löschen
  ClearScreen(RGB(0,0,0))
EndProcedure


; hier ist die procedure für die spritebewegung
  Procedure my_spritemove()
  Beep_(800,20)
  DisplaySprite(sp.b, xp.w,yp.w)
    xp.w=xp.w+1
   EndProcedure

  

Procedure sprite_move(sprite,x,y)
StartTimer( 0, 50, @my_spritemove() )
  Delay(5)
  xp.w=x
  yp.w=y
  sp.b=sprite
 
EndProcedure


Screen()


LoadSprite(0, "c:\test.bmp", 0)
CopySprite(0,1,0)
 
  Repeat

    FlipBuffers()
    
      Clear_Screen()
  
    sprite_move(0,100,300)
    
    ExamineKeyboard()
  Until x > 500 Or KeyboardPushed(#PB_Key_Escape)
  
  
End   

doch anders gelöst

Verfasst: 02.03.2007 11:53
von xverbatim
hi nochmal,

ich habe es jetzt doch anders gelöst; ohne timer ;-) muß ja nicht sein oder?

jedenfalls wollte ich mal nachfragen, wie ich unteren code so modifizieren könnte, damit ich nicht hunderte von gleichen proceduren+neuen variablen habe, weil ich mehrere bewegungssprites nutze...

ohje, was für ein satz...drücke mich mal anders aus...

die unterere procedure sprite_move initialisiert ein sprite und bewegt es
von x nach x2....
okay, für einen sprite ist das optimal...

wenn ich jedoch einen zweiten, dritten oder vierten sprite aufrufe mit der procedure...sind ja die variablen xw,x,xw2 und so weiter futsch bzw. dann neu belegt...


wie kriege ich es also hin, daß mir automatisch felder angelegt werden für die variablen?
hoffe, ihr versteht wie ich das meine...

ich will eigentlich die untere bewegungsprocedure auch auf mehrere sprites anwenden können (ist glaube ich verständlich oder?)

gruß xverbatim

Code: Alles auswählen

 Global xw,y,xw2
 Global flag,flag2
 

Procedure sprite_move(sprite,x,y,x2,y2,mode)
 
If flag=0  
 xw= x:flag=1
EndIf

If x2<> xw And flag<>2
xw=xw+1
EndIf

If x2=xw 
 flag=2
EndIf

If flag=2 
xw=xw-1
EndIf

If xw=x And flag=2 
flag=0
xw=x
EndIf

DisplaySprite(sprite,xw,y)
   
EndProcedure