Seite 1 von 1
Startpunkt
Verfasst: 10.06.2012 21:32
von TheNewOne
Hallo zusammen,
ich habe mal wieder PureBasic rausgekramt und ein bisschen rumprobiert.
Ich wollte ein kleines Spiel programmieren. Nun bin ich auf folgendes Problem gestoßen:
Ich hab ein Frame an der Position X,Y. Dieses kann ich mit den Pfeiltasten. Soweit, so gut.
Wenn ich aber nun die Leertaste drücke soll sich ab der Position X,Y ein anderes Frame konstant nach rechts bewegen, bis es den Bildschirmrand berührt.
Ich habe schon einiges probiert, doch bisher hat es nicht funktioniert.
Hoffentlich kann mir jemand helfen.
mgf TheNewOne
Re: Startpunkt
Verfasst: 10.06.2012 22:00
von Bisonte
Dazu fällt mir folgender Code ein...
Code: Alles auswählen
Select ForumPost
Case Ausführbarer_TestCode
CallFunctionFast(CommunityHilfe)
Case KlareFragestellung
CallFunction(Hilfe)
Case AllesAusDerNaseZiehn
End
Default
CallFunction(StocherImDunkeln)
EndSelect
Sorry aber das musste raus
In der Tat würde Dein bisher geschriebener Code durchaus die Leute hier dazu veranlassen,
Dir flink eine Antwort zukommen zu lassen.
Re: Startpunkt
Verfasst: 11.06.2012 14:19
von TheNewOne
Tut mir leid...
Hier der Code:
Code: Alles auswählen
If InitSprite() = 0
MessageRequester("Fehler!","Fehler!")
EndIf
If InitKeyboard() = 0
MessageRequester("Fehler!","Fehler!")
EndIf
If OpenScreen(800,600,32,"FiSho") = 0
MessageRequester("Fehler!","Fehler!")
EndIf
LoadSprite(0,"frames\ship.bmp",0)
LoadSprite(1,"frames\shoot.bmp",0)
pos_x = 0
pos_y = 0
pos_shoot_x = pos_x
pos_shoot_y = pos_y
Repeat
FlipBuffers()
ClearScreen(0)
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Right)
pos_x + 5
If pos_x > 705
pos_x = 0
EndIf
EndIf
If KeyboardPushed(#PB_Key_Left)
pos_x - 5
If pos_x < -5
pos_x = 700
EndIf
EndIf
If KeyboardPushed(#PB_Key_Up)
pos_y - 5
If pos_y < -5
pos_y = 505
EndIf
EndIf
If KeyboardPushed(#PB_Key_Down)
pos_y + 5
If pos_y > 500
pos_y = 0
EndIf
EndIf
If KeyboardPushed(#PB_Key_Escape)
Repeat
pos_shoot_x + 1
Until pos_shoot_x =700
If pos_y > 500
pos_y = 0
EndIf
EndIf
DisplayTransparentSprite(0,pos_x,pos_y)
DisplayTransparentSprite(1,pos_shoot_x,pos_shoot_y)
If KeyboardPushed(#PB_Key_Escape)
End
EndIf
ForEver
... wobei ich anmerken sollte, dass das Problem bei dem Folgenden liegt:
Code: Alles auswählen
If KeyboardPushed(#PB_Key_Escape)
Repeat
pos_shoot_x + 1
Until pos_shoot_x =700
If pos_y > 500
pos_y = 0
EndIf
EndIf
Re: Startpunkt
Verfasst: 11.06.2012 14:31
von Kiffi
TheNewOne hat geschrieben:... wobei ich anmerken sollte, dass das Problem bei dem Folgenden liegt:[...]
also ich (als Nicht-Gamer) würde hier #PB_Key_Escape erst einmal durch #PB_Key_Space ersetzen.
Grüße ... Kiffi
Re: Startpunkt
Verfasst: 11.06.2012 14:33
von NicTheQuick
Das Problem ist offensichtlich:
Hier addierst du immer 1 auf die Position des Schusses ohne ihn aber neu zu zeichnen. Diese Schleife wird so schnell abgearbeitet, dass du gleich hättest pos_shoot_x = 700 hinschreiben können.
Was du machen musst ist folgendes. Du brauchst z.B. eine Variable 'schuss_fliegt', die dann auf 1 gesetzt wird, wenn du ESC drückst. Dann schreibst du außerhalb des Ifs von der Escape-Taste folgenden Code:
Code: Alles auswählen
pos_shoot_x + schuss_fliegt
If pos_shoot_x = 700
schuss_fliegt = 0
EndIf
Allerdings fehlt hier auch noch das Zurücksetzen der Position deines Schusses. Also was passiert, wenn er am Bildschirmrand angekommen ist? Soll er da bleiben oder wieder an die Schiffsposition gesetzt werden? Ich denke das kriegst du selbst hin. Vielleicht noch ein kleiner Tipp. Da du jetzt ja weißt, wann der Schuss fliegt, kannst du die Variable 'schuss_fliegt' auch nutzen um zu steuern, dass der Schuss überhaupt gezeichnet wird. Also nur wenn 'schuss_fliegt' ungleich 0 ist, rufst du 'DisplayTransparentSprite(1,pos_shoot_x,pos_shoot_y)' auf.
Re: Startpunkt
Verfasst: 11.06.2012 14:53
von TheNewOne
Kiffi hat geschrieben:TheNewOne hat geschrieben:... wobei ich anmerken sollte, dass das Problem bei dem Folgenden liegt:[...]
also ich (als Nicht-Gamer) würde hier #PB_Key_Escape erst einmal durch #PB_Key_Space ersetzen.
Grüße ... Kiffi
Stimmt, da hast du recht

. Ist mir auch eben aufgefallen, trozdem danke.
Auch eine Danke an NickTheQuick, deine Antwort hat mir sehr geholfen.
Re: Startpunkt
Verfasst: 11.06.2012 15:10
von Bisonte
Bisonte hat geschrieben:In der Tat würde Dein bisher geschriebener Code durchaus die Leute hier dazu veranlassen,
Dir flink eine Antwort zukommen zu lassen.
Hoho... Nach posten des Codes nur 12 Minuten
So sehe ich meinen Codeschnippsel oben als #True
