Seite 3 von 3

Verfasst: 25.04.2006 23:40
von inti
sorry, das habe ich total übersehen! :(

Verfasst: 26.04.2006 16:57
von Alves
Hier mal der Code, des Prog bleibt im ersten Scrren hängen und reagiert auf nichts.

Code: Alles auswählen

InitSprite()
InitKeyboard()
UseJPEGImageDecoder()

headx=0
heady=470
coverx = Random(700)
speed=3
covery=0
p=0

Procedure fall()
  Repeat
   covery+speed
  Until covery>700
 EndProcedure  
Procedure pplus()
  StartDrawing(ScreenOutput())
  p+10
  DrawText("You've got Str(p()) Points")
  StopDrawing()
EndProcedure  
Procedure pminus()
  StartDrawing(ScreenOutput())
  p-10
  DrawText("You've got Str(p)) Points")
  StopDrawing()
EndProcedure  


OpenScreen(800,600,32,"R+ vs TH")
  LoadSprite(0,"is.jpg",0)
  LoadSprite(1,"TH.jpg",0)
  LoadSprite(2,"R+.jpg",0)
  LoadSprite(3,"titel.jpg",0)
  
  
Repeat
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_Return)
    con=1
  EndIf
  If KeyboardPushed(#PB_Key_Escape)
    quit=1
  EndIf  
  FlipBuffers()
  ClearScreen(0,0,0)
  ExamineKeyboard()
  DisplayTransparentSprite(3,130,150)
  If quit=1
    End
  EndIf      
Until con=1


Repeat
 ExamineKeyboard()
 FlipBuffers()
 ClearScreen(0,0,0)
 
 
 DisplayTransparentSprite(0,headx,heady)
 
 DisplaySprite(1,coverx,covery)
 DisplaySprite(2,coverx,covery)
 
 fall()
 
 If SpriteCollision(0,headx,heady,2,headx,heady)
   pplus()
 EndIf  
 If SpriteCollision(0,headx,heady,1,headx,heady)
   pminus()
 EndIf  
 
 If KeyboardPushed(#PB_Key_Right)                   
    headx + 5                     
    If headx > 680                             
      headx = 680                               
    EndIf                                            
  EndIf                                              

  If KeyboardPushed(#PB_Key_Left)                    
    headx - 5                                    
    If headx < 0                               
      headx = 0                                
    EndIf                                          
  EndIf              
  
Until KeyboardPushed(#PB_Key_Escape)

Verfasst: 26.04.2006 17:16
von Kaeru Gaman
grundsätzliche denkfehler:

- deine procedure fall() beinhaltet eine komplette schleife,
würde also erst verlassen, wenn covery größer als 700 wird.

- deine variablen sind nicht global, also sind die covery und speed,
die du in der procedure verwendest lokale variablen.

also ist speed innerhalb der proc = 0, also addierst du immer 0 zu covery,
also wird die nier größer als 700, also bleibt dein proggi innerhalb dieser proc hängen.

Verfasst: 26.04.2006 17:25
von Alves
Thanx
1. Ich hab jetzt erstmal die falschen Strings im TextDrawing() rausgemacht. Waren sowieso falsch.

2. Warum sind die Variabeln nicht global? Die sind doch in keiner Proc.

Verfasst: 26.04.2006 17:31
von Kaeru Gaman
weil du sie nicht als global definierst.
damit werden innerhalb der Proc neue lokale variablen generiert,
mit denen rechnest du dann.

es wäre aber eigentlich müßig, die variablen global zu definieren,
du kannst den vorgang genausogut innerhalb der hauptschleife abhandeln, ohne proc.

wobei es natürlich auch praktisch wäre, für den lerneffekt zumindest,
wenn du die proc so änderst, dass sie das gewünschte ergebnis bringt...

Verfasst: 26.04.2006 18:17
von Alves
Also bei dem neuen Code schmiert er schobn mal nicht ab.
Dafür fallen die Typen aber nicht.

Code: Alles auswählen

InitSprite()
InitKeyboard()
UseJPEGImageDecoder()

headx=0
heady=470
coverx = Random(700)
speed=3
covery=0
p=0

Procedure fall()
   coverx1 = Random(700)
   coverx2 = Random(700)
   speed=3
   covery=0
  Repeat
   covery+speed
  Until covery>700
 EndProcedure  
Procedure pplus()
  p=0
  StartDrawing(ScreenOutput())
  p+10
  DrawText("You've got Str(p) Points")
  StopDrawing()
EndProcedure  
Procedure pminus()
  p=0
  StartDrawing(ScreenOutput())
  p-10
  DrawText("You've got Str(p) Points")
  StopDrawing()
EndProcedure  


OpenScreen(800,600,32,"R+ vs TH")
  LoadSprite(0,"is.jpg",0)
  LoadSprite(1,"TH.jpg",0)
  LoadSprite(2,"R+.jpg",0)
  LoadSprite(3,"titel.jpg",0)
  
  
Repeat
  ExamineKeyboard()
  If KeyboardPushed(#PB_Key_Return)
    con=1
  EndIf
  If KeyboardPushed(#PB_Key_Escape)
    quit=1
  EndIf  
  FlipBuffers()
  ClearScreen(0,0,0)
  ExamineKeyboard()
  DisplayTransparentSprite(3,130,150)
  If quit=1
    End
  EndIf      
Until con=1


Repeat
 ExamineKeyboard()
 FlipBuffers()
 ClearScreen(0,0,0)
 
 
 DisplayTransparentSprite(0,headx,heady)
 
 DisplaySprite(1,coverx2,covery)
 DisplaySprite(2,coverx1,covery)
 
 fall()
 
 If SpriteCollision(0,headx,heady,2,headx,heady)
   pplus()
 EndIf  
 If SpriteCollision(0,headx,heady,1,headx,heady)
   pminus()
 EndIf  
 
 If KeyboardPushed(#PB_Key_Right)                   
    headx + 5                     
    If headx > 680                             
      headx = 680                               
    EndIf                                            
  EndIf                                              

  If KeyboardPushed(#PB_Key_Left)                    
    headx - 5                                    
    If headx < 0                               
      headx = 0                                
    EndIf                                          
  EndIf              
  
Until KeyboardPushed(#PB_Key_Escape)

Verfasst: 26.04.2006 18:47
von Kaeru Gaman
> Also bei dem neuen Code schmiert er schobn mal nicht ab

beim alten is er auch nich abgeschmiert, er hat nur nicht beendet.


> Dafür fallen die Typen aber nicht.

da hast du wieder das gleiche problem drin.
eine procedure ist ein unterprogramm, das komplett bearbeitet wird,
bevor zurückgesprungen wird.
wenn du komplett durchzählst bis 700, dann kommt er auch erst zurück,
wenn du bis 700 gezählt hast...

Verfasst: 26.04.2006 20:40
von Alves
>>Er ist auch nicht abgeschmiert,[...]

Also bei mir ist er abgestürzt. Der Rechner meine ich.

Also ich denke dass die Typen nicht fallen, wegen der Repeat Schleife. Sie fallen zwar, aber wir sehen es nicht, weil er den Screen dann schon wieder cleart.
Ansonsten zählt er doch bis 700 oder nicht?