sprites bewegen variablen vergabe ?

Anfängerfragen zum Programmieren mit PureBasic.
xverbatim
Beiträge: 88
Registriert: 20.08.2005 20:19

sprites bewegen variablen vergabe ?

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> vielleicht mit types ?

in PB nennt man das Structures, und ja, das ist der richtige weg.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
xverbatim
Beiträge: 88
Registriert: 20.08.2005 20:19

Structure anwenden ?

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

PureBasic\Examples\Sources - Advanced\Waponez II\Waponez II.pb
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
xverbatim
Beiträge: 88
Registriert: 20.08.2005 20:19

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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 ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
xverbatim
Beiträge: 88
Registriert: 20.08.2005 20:19

danke

Beitrag 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
xverbatim
Beiträge: 88
Registriert: 20.08.2005 20:19

structur überfordert mich maßlos ;-(

Beitrag 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
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten