Startpunkt
Startpunkt
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
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
Win7, 64bit, PB 4.60
Re: Startpunkt
Dazu fällt mir folgender Code ein...
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.
Code: Alles auswählen
Select ForumPost
Case Ausführbarer_TestCode
CallFunctionFast(CommunityHilfe)
Case KlareFragestellung
CallFunction(Hilfe)
Case AllesAusDerNaseZiehn
End
Default
CallFunction(StocherImDunkeln)
EndSelect

In der Tat würde Dein bisher geschriebener Code durchaus die Leute hier dazu veranlassen,
Dir flink eine Antwort zukommen zu lassen.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
Re: Startpunkt
Tut mir leid...
Hier der Code:
... wobei ich anmerken sollte, dass das Problem bei dem Folgenden liegt:
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
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
Win7, 64bit, PB 4.60
Re: Startpunkt
also ich (als Nicht-Gamer) würde hier #PB_Key_Escape erst einmal durch #PB_Key_Space ersetzen.TheNewOne hat geschrieben:... wobei ich anmerken sollte, dass das Problem bei dem Folgenden liegt:[...]
Grüße ... Kiffi
a²+b²=mc²
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Startpunkt
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:
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.
Code: Alles auswählen
Repeat
pos_shoot_x + 1
Until pos_shoot_x =700
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
Re: Startpunkt
Stimmt, da hast du rechtKiffi hat geschrieben:also ich (als Nicht-Gamer) würde hier #PB_Key_Escape erst einmal durch #PB_Key_Space ersetzen.TheNewOne hat geschrieben:... wobei ich anmerken sollte, dass das Problem bei dem Folgenden liegt:[...]
Grüße ... Kiffi

Auch eine Danke an NickTheQuick, deine Antwort hat mir sehr geholfen.
Win7, 64bit, PB 4.60
Re: Startpunkt
Hoho... Nach posten des Codes nur 12 MinutenBisonte hat geschrieben:In der Tat würde Dein bisher geschriebener Code durchaus die Leute hier dazu veranlassen,
Dir flink eine Antwort zukommen zu lassen.

So sehe ich meinen Codeschnippsel oben als #True

PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom