Seite 1 von 2

sprites bewegen variablen vergabe ?

Verfasst: 20.10.2008 22:34
von xverbatim
Hallo,

habe mal wieder lust, mit purebasic zu programmieren und immernoch mein altes problem, vielleicht kann mir ja jemand helfen ?

ich möchte eine einfache procedure für spritebewegungen schreiben, das problem ist nur, das ich nicht weiß, wie ich das mit den variablen machen soll ?

die untere procedure sprite_movie initialisiert ein sprite und bewegt es von x nach x2 hin und zurück, das klappt für EIN sprite gut, aber wenn ich ein zweites, drittes sprite erstelle, sind ja die variablen

Global xw,y,xw2
Global flag,flag2

schon belegt ?

wie könnte man das elegant machen ?

wie kann ich mehrere sprites erstellen und bewegen mit der procedure ?
vielleicht mit types ? ohje ;-(

über rat wäre ich sehr dankbar.

Gruß
Thomas




Code: Alles auswählen

Code:

 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

Verfasst: 20.10.2008 22:36
von Kaeru Gaman
> vielleicht mit types ?

in PB nennt man das Structures, und ja, das ist der richtige weg.

Structure anwenden ?

Verfasst: 20.10.2008 22:46
von xverbatim
hi,

ok danke erstmal, nur bin ich völlig überfragt, wie ich das nun umsetzen könnte ?

Structure move_sprite
vonx.l
nachx.l
EndStructure




:roll:

Gruß
Thomas

Verfasst: 20.10.2008 23:18
von Kaeru Gaman
PureBasic\Examples\Sources - Advanced\Waponez II\Waponez II.pb

Verfasst: 20.10.2008 23:24
von xverbatim
hi nochmal,

das beispiel läuft bei mir nicht 4.30 beta version von purebasic...

hast du nicht einen ansatz für mich, wie ich das mit den strukturen hinbekomme ?
habe jetzt schon 2 tutorials angesehen und blick da überhaupt nicht durch, wie ich das auf mein problem mit den sprites umsetze ?

thomas

Verfasst: 20.10.2008 23:40
von Kaeru Gaman
> das beispiel läuft bei mir nicht 4.30 beta version von purebasic...

klar das musst du ein bißchen umschreiben, wenn dus laufen lassen willst.

das muss aber auch nicht unbedingt laufen, da sieht man eh weniger als im Code, wo die strukturen und listen drinstehen.

> hast du nicht einen ansatz für mich, wie ich das mit den strukturen hinbekomme ?

yo, schau dir den code von waponez II an, da sind gegner und schüsse, die mit strukturen und listen verwaltet werden.

Verfasst: 20.10.2008 23:42
von STARGÅTE
Wenn du mehrere SpriteVariable brauchst dan sind entweder Arrays eine Wahl, wenn du die Anzahl weißt und "starr" lassen möchtest, oder LinkedLists wenn es dynamisch sein soll.

Beispiel einer Structure, welche x und y enthält und die Breite und Höhe:

Code: Alles auswählen

Structure Sprite
 x.l
 y.l
 Width.l
 Height.l
EndStructure
Diese Structure kann nun eine andere Variable oder ein Array haben:

Code: Alles auswählen

Dim SpriteArray.Sprite(10)
Nun gibt es 11 "Felder" in diesem Array welche du nun alle einzeln belegen kannst, wobei jedes Feld die UnterVariablen der Structure hat.

Code: Alles auswählen

; Sprite 3 das x ändern
SpriteArray(3)\x = 123
; Sprite 5 die Höhe ändern
SpriteArray(5)\Height = 90
ich hoffe das Hilft dir ...

danke

Verfasst: 21.10.2008 10:15
von xverbatim
Hi !

Danke für die ausführliche Erklärung, ich werde das heute mal versuchen umzuschreiben, ich hoffe, dass ich das auch hinbekomme.

Danke nochmal +
Gruß
Tom

structur überfordert mich maßlos ;-(

Verfasst: 21.10.2008 17:44
von xverbatim
Hi,

irgendwie überfordert mich die Sache mit der Structure doch ;-(
bekomme da keine Logik zusammen ...

unterer Code zeigt meine Verzweiflung ;-(

kann mir bitte jemand sagen, wie ich den unteren Code so hinbekomme, dass die Variablen vonx und nachx immer unabhängig sind, auch wenn ich diese öfter anspringe ?

ich möchte wie gesagt, ein sprite(0-...) von x1 nach x2 bewegen
und dies nicht nur mit einem Sprite, sondern mit mehreren

so in der Art:

sprite_move(1, vonx,nachx,100)
sprite_move(2, vonx, nachx,300) etc.

Code: Alles auswählen

Structure Sprite
 x1.l
 x2.l
EndStructure 

Global Dim SpriteArray.Sprite(10) 

;SpriteArray(3)\x = 123


Procedure sprite_move(sprite,vonx,nachx,y)
 
SpriteArray(sprite)\x1 =vonx

vonx=vonx+1

If vonx=nachx 
 vonx=0
EndIf
 
DisplaySprite(sprite,vonx,y)
   
EndProcedure

Verfasst: 21.10.2008 18:32
von STARGÅTE
ich glaube du denkst in die Falsche Richtung, was aber nicht an den Structuren liegt sondern am Aufbau deines Codes...

Geht doch einfach mal so vor :

Programmiere deine "Bewegung" einfach mal nur mit einem einzigen Sprite.
Wenn das ordnungsgemäß läuft, kannst du an den entsprechenden Stellen schleifen einbauen die dann eine Berechung wie :

Code: Alles auswählen

x = x + 1
für mehrere Sachen ausführen:

Code: Alles auswählen

For i = 1 to 9
 Element(i)\x = Element(i)\x + 1
Next
deine Variable welche du vorher benutzt hast, wird zur Untervariable in einer Structure (welche du dann definieren musst) und du hast deine Elemente welche dann von 1 bis 9 geändert werden.
Das gleiche dann für Display, usw...