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
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:
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 :
für mehrere Sachen ausführen:
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...