Seite 1 von 1

sprites erstellen

Verfasst: 03.11.2005 15:38
von philipp
hi,
ich mache gerade ein kleines game und ich würde gerne machen, dass man
schüsse abfeuern kann.

ich weis aber leider nicht wie ich machen kann, dass wenn man auf eine bestimmte taste drückt, dass es dann immer wieder das selbe bild nochmal
lädt.

ich hoffe ich konnte mein problem verständlich schilder.
weiss jemand zufällig, wie das geht.

philipp

Verfasst: 03.11.2005 15:58
von Zaphod
du lädst das bild nur einmal und zeichnest es dann einfach mehrmals. ein sprite in purebasic ist nicht ein spriteobjekt in dem sinne, das es das nur einmal geben kann. stell dir ein sprite einfach als eine art pinsel vor, mit dem du auf dem screen malen kannst. tippst du mit dem pinsel mehrmals auf die leinwand, gibt es auch mehrere farbkleckse.

Verfasst: 03.11.2005 16:11
von philipp
ja, aber ich weis ja nicht wie viele sprites es bis zum schluss werden.
wenn man zum Beispiel nur einmal drückt soll das bild nur einmal erstellt werden, hingegen wenn man mehrmals drückt soll es mehrere estellen.

Verfasst: 03.11.2005 17:18
von PMV
Das Problem ist dann nicht, das Sprite selber dar zu stellen, sondern die aktuellen Koordinaten zu speichern.

Dafür sind z.B. die LinkedLists, schau mal in der Hilfe nach :D

Da wir aber im Anfängerforum sind hier noch ne anregung :wink:
Erst mal müssen wir die Linkedliste erstellen, da diese 2 Werte speichern muss ist hier noch eine Struktur nötig. Für infos ebenfalls die Hilfe mal anschauen :D .

Code: Alles auswählen

;die Strukture POINT ist unter Windows bereits deklarieriert
;Structure Point
;  X.l
;  Y.l
;Endstructure
NewList Schuss.POINT()
Dann die Haupftschleife, hier musste zunächst irgend eine Taste abfragen werden und dort dann das Element erstellt werden

Code: Alles auswählen

If Keyboardpushed(#PB_Key_Space)
  AddElement(Schuss())
  Schuss()\X = 0 ;Startposition eines Schusses
  Schuss()\Y = 0 
Anschließend muss dann in der Hauptschleife jeder existierende Schuss überprüft werden und entsprechend bewegt. Ist der Schuss überm Bildschirmrand dann wird er wieder gelöscht

Code: Alles auswählen

 ForEach Schuss()
  Schuss()\X + 1
  Schuss()\Y + 1
  IF Schuss()\X > 800 And Schuss()\Y > 600
    DeleteElement(Schuss())
  else
    DisplaySprite(0, Schuss()\X, Schuss()\Y)
  EndIf
Next
^^hoffe das reicht als denkanstoß :D

MFG PMV

Verfasst: 03.11.2005 18:03
von philipp
danke für deine hilfe, hat mich echt weiter gebrach.

Verfasst: 06.11.2005 12:23
von Kaeru Gaman
das ist bei dem Beispiel "Waponez II", was bei PB dabei ist, auch sehr schön zu sehen...

ist zwar ein bißchen arbeit, sich da durchzubeißen, aber es lohnt sich...