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:

Code: Alles auswählen

Repeat
    pos_shoot_x + 1   
    Until pos_shoot_x =700
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 :lol: