sprites bewegen variablen vergabe ?

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

hilfe durchblick

Beitrag von xverbatim »

Hi Stargate,

ich glaube auch, das ich da irgendwie in die falsche Richtung denke, aber ehrlich gesagt, klar ist mir die Sache ...sorry...immernoch nicht...

muß ich denn bei meinem Vorhaben nicht die Variablen als Global deklarieren ?

ich blick da nicht durch :freak:

Mit einem Sprite bekomme ich die Sache ja zum laufen (siehe unteren Code), sobald ich aber zwei nehme, klappt das mit den Variablen nicht mehr :freak:

hatte jetzt auch schon mit static in der Procedure was versucht, ging aber auch nicht...


For i = 1 to 9
Element(i)\x = Element(i)\x + 1
Next

Das verstehe ich ja schon, nur das Problem ist, das ich das alles in einer Procedure habe und da blick ich dann nicht mehr durch ;-(

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

Beitrag von xverbatim »

hat evtl. jemand ein beispielcode, wie ich eine procedure nutzen kann, die mir MEHRERE sprites von a nach b bewegt ?

move_sprite(nr1,vonx,nachx,100)
move_sprite(nr2,vonx,nachx,200)

usw.

ich kriege das so nicht gebacken ;-(
ein sprite ja, aber nicht mehrere ;-(


gruß tom
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

jedes sprite braucht sein eigenes von/nach usw... alles was jedes eigenes braucht, muss in die Structure.

... dir wär kein Zacken aus der Krone gebrochen, wenn du dir das Waponez II example mal angeschaut hättest.
bissl Eigeninitiative tut nich weh.
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 »

"jedes sprite braucht sein eigenes von/nach usw"


ist mir ja schon klar, nur das problem sind für mich die variablen, die ich ja durch den aufruf der procedure immerwieder verliere.

ich meine das so, wenn ich die procedure sprite_move(sprite,x,y,x2,y2,mode) aufrufe, dann habe ich ja die Startposition=x,y und die Entposition=x2,y2 erstmal der procedure übergeben, somit brauche ich dann ja auch mindestens zwei globale variablen, damit ich die positionen überhaupt ändern kann.

mir ist die ganze umsetzung nicht klar und da hilft mir das "Waponez II" auch nicht...sorry...deshalb wäre ein einfacher beispielcode der logisch nachvollziehbar ist, meiner meinung nach am sinnvollsten...


"bissl Eigeninitiative tut nich weh."
irgendwie daneben finde ich

Ich versuche jetzt schon seit gestern abend da durchzublicken und dann solche Kommentare...

Gruß
Tom
xverbatim
Beiträge: 88
Registriert: 20.08.2005 20:19

erstmal eine lösung gefunden

Beitrag von xverbatim »

Ich habe jetzt erstmal eine Lösung gefunden; wenn jemand eine elegantere Lösung hätte, vielleicht ja sogar mit Structures, würde ich mir das gerne ansehen wollen.


Danke+Gruß
Tom




Code: Alles auswählen

Global Dim xw(10)
Global Dim flags(10)

;
; bewegt einen Sprite von x nach x2 und wieder zurück
;

Procedure sprite_move(sprite,x,y,x2,y2,mode)

If flags(sprite)=0
 xw(sprite)=x
 flags(sprite)=1
EndIf
 
If flags(sprite)=1
 xw(sprite)=xw(sprite)+1
EndIf
 
If xw(sprite)>x2 
 flags(sprite)=2
EndIf

If flags(sprite)=2
 xw(sprite)=xw(sprite)-1
  If xw(sprite)=x
   flags(sprite)=0:xw(sprite)=x
  EndIf
EndIf

DisplaySprite(sprite, xw(sprite),y)
   
EndProcedure
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: erstmal eine lösung gefunden

Beitrag von STARGÅTE »

Code: Alles auswählen

Structure StrucName
 xw.l
 flags.l
EndStructure

Global Dim Array.StrucName(10)

;
; bewegt einen Sprite von x nach x2 und wieder zurück
;

Procedure sprite_move(sprite,x,y,x2,y2,mode)

If Array(sprite)\flags=0
 Array(sprite)\xw=x
 Array(sprite)\flags=1
EndIf
 
If Array(sprite)\flags=1
 Array(sprite)\xw=Array(sprite)\xw+1
EndIf
 
If Array(sprite)\xw>x2 
 Array(sprite)\flags=2
EndIf

If Array(sprite)\flags=2
 Array(sprite)\xw=Array(sprite)\xw-1
  If Array(sprite)\xw=x
   Array(sprite)\flags=0:Array(sprite)\xw=x
  EndIf
EndIf

DisplaySprite(sprite, Array(sprite)\xw,y)
   
EndProcedure
so zum Beispiel ;-)
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

Beitrag von xverbatim »

Danke Stargate für die Mühe :-)


ich glaube in Sachen "Structures" habe ich noch viel zu lernen.


Gruß Thomas
Antworten