
Schießen
Mhmmm, habe es jetzt so, klappt immer noch nicht, wo ist der Fehler?
Code: Alles auswählen
InitSprite()
InitKeyboard()
OpenScreen(800,600,32,"Vollbild")
LoadSprite(0,"F:\Kai´s Spiel\Pics\Weltraum.bmp",0)
LoadSprite(1,"F:\Kai´s Spiel\Pics\Shuttle.bmp",0)
LoadSprite(2,"F:\Kai´s Spiel\Pics\Schuss.bmp",0)
HBX = 0
HBY = 0
ShuttleX = 350
ShuttleY = 350
Structure Schuss
SchussX.w
SchussY.w
EndStructure
Global NewList Schuss.Schuss()
Procedure AddSchuss(SchussX,SchussY)
AddElement(Schuss())
Schuss()\SchussX = SchussX
Schuss()\SchussY = SchussY
EndProcedure
Repeat
ClearScreen(0+256*0+256*256*0)
Pause + 1
SchussY - 10
If ShuttleX > 700
ShuttleX = 700
EndIf
If ShuttleX < 0
ShuttleX = 0
EndIf
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left)
ShuttleX - 5
EndIf
If KeyboardPushed(#PB_Key_Right)
ShuttleX + 5
EndIf
If KeyboardPushed(#PB_Key_Space) And Pause > 10
Pause = 0
AddElement(Schuss())
SchussX = ShuttleX + 49
SchussY = ShuttleY - 5
EndIf
DisplayTransparentSprite(0,HBX,HBY)
DisplayTransparentSprite(1,ShuttleX,ShuttleY)
DisplayTransparentSprite(2,SchussX,SchussY)
FlipBuffers()
Until KeyboardPushed(1)
- Machete @PB
- Beiträge: 81
- Registriert: 12.09.2006 03:12
- dllfreak2001
- Beiträge: 2925
- Registriert: 07.09.2004 23:44
- Wohnort: Bayern
Äh, du durchläufst die Liste garnicht und deine Schüsse werden auch nie gelöscht. Außerdem übergibst die Werte für den Schuss nicht an die Elemente der Liste.
Hab dir paar Kommentare dazugemacht, die grüne Box ist jetzt dein Schiff und die roten sind die Schüsse.
Bei Clearscreen berechnet er ja so den RGB-Wert deshalb ist es ja richtig
dafür kannst du auch die Funktion RGB(r,g,b) reinschreiben.
Wenn du den Hintergrund schwarz haben willst brauchts ja nur eine 0 rein.
Wenn man aber sowieso ein Hintergrundbild hat, dass den ganzen Screen ausfüllt kann man den Befehl sowieso weglassen, da das Hintergrundbild den Kramm in jedem Umlauf überzeichnet.
Code: Alles auswählen
InitSprite()
InitKeyboard()
OpenScreen(800,600,32,"Vollbild")
HBX = 0
HBY = 0
ShuttleX = 350
ShuttleY = 350
Structure Schuss
SchussX.f ;Sich bewegende Objekte lieber mit Floats oder Doubles machn
SchussY.f
EndStructure
Global NewList Schuss.Schuss()
Repeat
ClearScreen(0+256*0+256*256*0)
Pause + 1
SchussY - 10
If ShuttleX > 700
ShuttleX = 700
EndIf
If ShuttleX < 0
ShuttleX = 0
EndIf
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left)
ShuttleX - 5
EndIf
If KeyboardPushed(#PB_Key_Right)
ShuttleX + 5
EndIf
If KeyboardPushed(#PB_Key_Space) And Pause > 10
Pause = 0
AddElement(Schuss())
Schuss()\SchussX = ShuttleX + 8 ; Einem Listen element übergibt man Werte so
Schuss()\SchussY = ShuttleY - 5
EndIf
lcount.l = CountList(Schuss()) ;Listenelemente zählen damit man sie später in der Schleife durchlaufen kann
StartDrawing(ScreenOutput()) ; Damit ich es auch ausführen kann
;Das ist dein Schiff
Box(ShuttleX,ShuttleY,32,32,RGB(0,255,0))
If lcount > 0 ; Wenn es keine Schüsse gibt braucht man auch keine Darstellen
For n = 0 To lcount - 1 ; "lcount - 1 " weil 0 auch schon das erste Element ist
; Das ist dein Schuss
SelectElement(Schuss(), n)
Schuss()\SchussY - 1.5 ; Damit sich der Schuss bewegt
Box(Schuss()\SchussX,Schuss()\SchussY,16,16,RGB(255,0,0))
Next
;Hier werden die Schüsse ab einer bestimmten Grenze gelöscht bei mir ist es wenn Schuss()\SchussY < 32 ist
FirstElement(Schuss()) ;Erstes Element auswählen
For n = 0 To lcount - 1 ;Wie oben in der Schleife
If Schuss()\SchussY < 32 ; Wenn SchussY < 32 ist dann wir gelöscht
DeleteElement(Schuss(),1) ; Schuss löschen und dann auf das Element davor springen damit alles nacher gut funzt
EndIf
NextElement(Schuss()) ;Nächstes Element
Next
EndIf
StopDrawing()
FlipBuffers()
Until KeyboardPushed(1)
Bei Clearscreen berechnet er ja so den RGB-Wert deshalb ist es ja richtig
dafür kannst du auch die Funktion RGB(r,g,b) reinschreiben.
Wenn du den Hintergrund schwarz haben willst brauchts ja nur eine 0 rein.
Wenn man aber sowieso ein Hintergrundbild hat, dass den ganzen Screen ausfüllt kann man den Befehl sowieso weglassen, da das Hintergrundbild den Kramm in jedem Umlauf überzeichnet.
I´a dllfreak2001
Wenn du die GrundBegriffe von Programmierung nicht anwenden kannst, solltest du dort anfangen und später dein Spiel schreiben:
Das "for to dingsda" ist eine Schleife, genauergesagt eine Kopfgesteuerte Schleife.
Das heißt das Programm kommt an die Stelle:
nun wird n auf 0 gesetzt und das innere der Schleife bearbeitet bis das Programm erreicht, dort wird dann die SchleifenVariable n um 1 erhöht.
dann geht das Programm wieder in den Kopf und prüft, ob die Schleife bereits die geforderten Umläufe hatte oder nicht.
Bei n = 10 läuft das programm ein letztes mal die Schleife durch, und führt das programm dann nach dem Next weiter aus.
Das "for to dingsda" ist eine Schleife, genauergesagt eine Kopfgesteuerte Schleife.
Das heißt das Programm kommt an die Stelle:
Code: Alles auswählen
For n=0 To 10
Code: Alles auswählen
Next
dann geht das Programm wieder in den Kopf und prüft, ob die Schleife bereits die geforderten Umläufe hatte oder nicht.
Bei n = 10 läuft das programm ein letztes mal die Schleife durch, und führt das programm dann nach dem Next weiter aus.
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
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr