Seite 2 von 3

Verfasst: 19.07.2006 15:32
von Zaphod
Kleiner Tipp: Die bereitschaft Code zu korrigieren ist viel größer wenn er kein kopfschmerzenproduzierender Spaghettiteller ist, keine Goto+Label verwenden sondern Prozeduren. Wenn der Code Lesbar ist, ist die wahrscheinlichkeit groß, dass du den Fehler selbst findest.

Als kleinen Denkanstoß wie im generellen "anhalten" funktioniert: Wenn du grade nichts bewegst und alles an seiner stelle bleibt, dann hast du angehalten. Das Programm an sich läuft natürlich weiter, aber so funktioniert jede interaktive software. Selbst Windows ist in der äußersten Hülle nur eine große while-schleife.

Verfasst: 19.07.2006 15:54
von bobobo
der Code funktioniert so wie er ist eigentlich prima :allright:@Thomas .. Optimieren (was immer das auch ist) kann man später noch.

Der Code ist außerdem in der Hinsicht kein SpaghettiCode, weil
er immernoch gut zu durchschauen ist. Thomas hat halt nur noch
nie was von Array's und/oder Listen gehört.

zum Problem

@Thomas Du musst eigentlich nur die 1 hinter den ba, bb,bc u.s.w.
parametrisieren .. wenn da 'ne variable mit Wert 0 steht dann
scrollt nix , wenn da eine mit Wert 1 steht scrollt es.


also

Code: Alles auswählen

    ba +succ
    bb + succ
    bc + succ
    bd + succ
u.s.w.
Die TastaturAbfrage erweiterst Du wie folgt

Code: Alles auswählen

; Tastenabfrage 

    ExamineKeyboard() 
    
    If KeyboardPushed(#PB_Key_S)  And succ=1
      succ=0
    EndIf 
    If KeyboardPushed(#PB_Key_G)  And succ=1
      succ+0.2
    EndIf 
    
    
    If KeyboardPushed(#PB_Key_Right)  And succ=1
      position_x + 2 
      If position_x > 700 
         position_x = 700 
      EndIf 
    EndIf 
    
    If KeyboardPushed(#PB_Key_Left)  And succ=1
      position_x - 2 
      If position_x < 0 
         position_x = 0 
      EndIf 
    EndIf 

    If KeyboardPushed(#PB_Key_Up)  And succ=1
      position_y - 1 
      If position_x < 0 
         position_y = 0 
      EndIf 
    EndIf 

    If KeyboardPushed(#PB_Key_Down) And succ=1
      position_y + 1 
      If position_y > 450 
         position_y = 450 
      EndIf 
    EndIf 
    
    If KeyboardPushed(#PB_Key_F2) And succ=0
      stopped=0 
     Goto Anfang 
    EndIf 
    
    If KeyboardPushed(#PB_Key_Escape) 
    End 
    EndIf 
    
  ForEver 


Du fragst dann die PixelKollision ab (die hier (3.94) so übrigens im Gegensatz zu meinem Geschreibsel per PN sehr wohl funktioniert)
Bei einer Kollision setzt Du diese Variable auf 0 und das Scrollen hält an.
Das machst Du bei Label Schleife in der auch die Verlorenausgabe auf den Schirm gemalt wird.

und bei der F2-Abfrage wird die Variable wieder auf 1 gesetzt
und neu gestartet (Goto Anfang)

Ganz oben im Code schreibst Du succ=1 hion, damit es anfänglich auch
scrollt.

Verfasst: 20.07.2006 14:35
von Thomas
Danke!
werd's mal ausprobieren. :D

Verfasst: 20.07.2006 20:46
von Thomas
Übrigens
es darf keine andere Taste auser F2 und Esc akzeptiert werden. :|

Verfasst: 20.07.2006 21:01
von Brügge
hi

also ich würde auf schleifen benutzen ... ^^
naja also schreib das erst mal um .....


wenn du in einer schleife arbeitest dann geht es recht einfach.

du setzt eine repeat until schleife so :


[/code]

InitKeyboard()
repeat

;deine abfrage (sollte man die kiste anfahren dann "verloren = 1" und dein sprite setzten)

until verloren = 1

repeat
ExamineKeyboard()
if keyboardpushed(#PB_Key_Escape)
esc = 1
endif
if keyboardpushed(#PB_Key_F2)
esc = 1
endif
until esc = 1
end

Verfasst: 21.07.2006 07:29
von #NULL
@thomas
übrigens gings in deinem anderen thread auch noch weiter, weiß nich ob du das mitgekriegt hast:
["Programm anhalten"]
http://www.purebasic.fr/german/viewtopi ... highlight=

Verfasst: 21.07.2006 11:48
von a14xerus
Brügge hat geschrieben: InitKeyboard()
repeat

;deine abfrage (sollte man die kiste anfahren dann "verloren = 1" und dein sprite setzten)

until verloren = 1

repeat
ExamineKeyboard()
if keyboardpushed(#PB_Key_Escape)
esc = 1
endif
if keyboardpushed(#PB_Key_F2)
esc = 1
endif
until esc = 1
end
Ich würde die 2. repeat in die erste reintuen:

Code: Alles auswählen

InitKeyboard()
repeat

;deine abfrage (sollte man die kiste anfahren dann "verloren = 1" und dein sprite setzten)


if verloren = 1
esc = 0
neustart = 0
   repeat
     ExamineKeyboard() 
     if keyboardpushed(#PB_Key_Escape)
       esc = 1
     endif
     if keyboardpushed(#PB_Key_F2)
       neustart  = 1
     endif
   until esc = 1 or neustart = 1


if esc = 1
end
elseif neustart = 1
; code zum neustart
endif

endif



forever
end

Verfasst: 21.07.2006 14:04
von Brügge
macht aber keinen unterschied oder? also ob das da drinne steht oder dahinter :mrgreen:


sieht allerdings schöner aus ^^

Verfasst: 21.07.2006 14:28
von Kaeru Gaman
...ich würd beides in einer schleife abhandeln...

Verfasst: 23.07.2006 12:38
von Thomas
Danke, hab das mit dem Grafik anhalten hingekrigt. :D
Verstehe aber das mit den Array's und den Structuren nicht ganz. Kann mir jemand ein Beispiel machnen?