Seite 1 von 2

Ball und Fahrstuhl | läuft auch unter PB 3.3, erweiterbar!!!

Verfasst: 13.08.2007 19:10
von Xaby

Code: Alles auswählen

; Test von Folker Linstedt aka xaby 
; PB 4.x 
; 2007|08|13 


If InitSprite() = 0 Or InitKeyboard() = 0 
  MessageRequester("Error", "Can't open DirectX 7 or later", 0) 
  End 
EndIf 


Global HeldX : HeldX=100 
Global HeldY : HeldY=100 
Global hoch : hoch=150 
Global Richtung : Richtung=1 



Procedure Held() 
  If KeyboardPushed(#PB_Key_Left) 
    HeldX-10 
    If HeldX<20 
      HeldX=630 
    EndIf 
  EndIf 
  If KeyboardPushed(#PB_Key_Right) 
    HeldX+10 
    If HeldX>620 
      HeldX=-10 
    EndIf 
  EndIf 
  
  ; WandAbfrage 
  Wand=0 
  
  For i=0 To 9 
    If SpriteCollision(0,HeldX,HeldY,1,0+64*i, 400) 
      Wand=1 
      DisplaySprite(2, 0+64*i, 400) 
    EndIf 
  Next 
  If SpriteCollision(0,HeldX,HeldY,1,264,Hoch) 
    Wand=2 
    DisplaySprite(2,264,Hoch) 
  EndIf 
  If SpriteCollision(0,HeldX,HeldY,1,328, 200) 
    Wand=1 
    DisplaySprite(2,328,200) 
  EndIf 
  If SpriteCollision(0,HeldX,HeldY,1,200, 200) 
    Wand=1 
    DisplaySprite(2,200,200) 
  EndIf 
  
  ; Guter Vorschlag von DarkDragon!!! 
  If Wand = 2 
    ziel = hoch - 30 
    If ziel < HeldY 
      HeldY - 1 
    ElseIf ziel > HeldY 
      HeldY + 1 
    EndIf 
  EndIf 
  
  If Wand=0 
    HeldY+5 
  EndIf 
  
  DisplayTransparentSprite(0, HeldX, HeldY) 
EndProcedure 


Procedure Mauer() 
  
  DisplaySprite(1, 200, 200) 
  DisplaySprite(1, 328, 200) 
  
  For i=0 To 9 
    DisplaySprite(1, 0+64*i, 400) 
  Next 
  
EndProcedure 


Procedure Beweg() 
  hoch+1*Richtung 
  ; Debug hoch 
  If Hoch>400 
    Hoch=400 
    Richtung*-1 
  EndIf 
  If Hoch<150 
    Hoch=150 
    Richtung*-1 
  EndIf 
  
  
  DisplaySprite(1, 264, Hoch) 
  
  
EndProcedure 



If OpenScreen(640, 480, 16, "Sprite") 
  
  
  ; Erstelle Kreis auf Sprite 
  CreateSprite(0,32,32) 
  StartDrawing(SpriteOutput(0)) 
  Circle(15,15,15,RGB(255,128,128)) 
  StopDrawing() 
  
  ; Erstelle Balken auf Sprite 
  CreateSprite(1,64,4) 
  StartDrawing(SpriteOutput(1)) 
  Box(0,0,64,4,RGB(0,128,255)) 
  StopDrawing() 
  
  CreateSprite(2,64,4) 
  StartDrawing(SpriteOutput(2)) 
  Box(0,0,64,4,RGB(0,255,0)) 
  StopDrawing() 
  
  Repeat 
    ExamineKeyboard() 
    
    Mauer() 
    Beweg() 
    Held() 
    
    
    Delay(10) 
    
    FlipBuffers() 
    ;ClearScreen(0) ; für PB 4.x
    ClearScreen(0,0,0) ; für PB 3.x
  Until KeyboardPushed(#PB_Key_Escape) 
  
Else 
  MessageRequester("Error", "Can't open a 640*480 - 16 bit screen !", 0) 
EndIf 

End  
>> für PB 3.3 muss in der Zeile unten stehen: ClearScreen(0,0,0)
>>>>>>>>>>>>> für PB 4.x sollte da stehen ClearScreen(0) bzw. ClearScreen(RGB(0,0,0))

War mal ein kleiner Test, wie man bewegte Flächen machen könnte und einen bewegbaren Ball. Ist natürlich noch nicht ideal. Der Ball dreht sich nicht und er hüpft auch komisch :mrgreen:

Das liegt an der Idee, die ich hatte. Ich wollte ihn immer Fallen lassen und wenn er auf dem Fahrstuhl ist, sollte er etwas nach oben schweben.

:shock:

Verfasst: 13.08.2007 19:53
von DarkDragon
Fehler: ExamineKeyboard must be called before KeyboardPushed() ;-).

Also ExamineKeyboard() in den Anfang der Hauptschleife, nicht ins Ende!

Btw.: Wenn man mit dem Ball runterspringt wenn der Fahrstuhl zwischendrin ist, dann wackelt der Ball auf dem Fahrstuhl nurnoch hoch und runter.

Verfasst: 14.08.2007 08:54
von Xaby
Ich bin ja kein Experte, aber meiner Meinung nach ist es egal wo man Examine Keyboard hin macht.

Es sei denn, es wird von FlipBuffer oder ClearScreen beeinflusst.

Es ist eine Schleife.

Wenn man sich die Befehle alle so vorstellt als wären sie in einem Ring angeordnet, so ist ExamineKeyboard auch wenn es am Ende steht, für den zweiten Durchlauf vor der Abfrage.

Und ganz ehrlich, du wirst nicht merken in welchen Durchlauf der Schleife du die Taste gedrückt hast.

Irgendwie glaube ich, dass ich Recht habe, sonst würde sich der Ball ja nicht bewegen. :mrgreen:
Aber du hast Recht. Im DebugModus kommt die Fehlermeldung :roll: /:->

Und zu deiner Aussage, dass der Ball hüpft ... hab ich auch was geschrieben. Vielleicht machst mal einen Vorschlag, wie man das elegant aber einfach lösen könnte. :? :allright:

Verfasst: 14.08.2007 09:53
von DarkDragon
Hmm... ja, mit dem Fahrstuhlproblem hab ich mich auch schonmal in Gedanken auseinandergesetzt.

Bei deiner Methode würde ich einfach das hier:

Code: Alles auswählen

If Wand=2
  HeldY-1
EndIf
durch

Code: Alles auswählen

  If Wand = 2
    ziel = hoch - 30
    If ziel < HeldY
      HeldY - 1
    ElseIf ziel > HeldY
      HeldY + 1
    EndIf
  EndIf
ersetzen (ruckelt hier nichtmehr), aber so ganz sauber finde ich das alles nicht :? , denn immerhin kann man kopfüber an den oberen Platformen gehen wenn man zu früh aus dem Lift rausgeht.

Verfasst: 14.08.2007 09:56
von Xaby
Siehste das nicht? Der Ball hat Arme und kann sich damit an der Stange entlang hangeln :mrgreen:

Verfasst: 14.08.2007 11:29
von Xaby
Mmmm

Wenn der Held aus mehreren Sprites bestehen würde. Füße, Kopf und Arme ... dann könnte man nur die Füße überprüfen lassen.

Und vielleicht sollten man es nur überprüfen, so lange er fällt.
Und wenn er mit einem anderen Sprite als den Füßen etwas berührt, kann man ihn nicht bewegen.

Dann würde man gegen die Stangen neben dem Fahrstuhl laufen, aber nicht mehr durch sie hindurch. :roll:

Verfasst: 14.08.2007 12:16
von Kaeru Gaman
Xaby hat geschrieben:Wenn man sich die Befehle alle so vorstellt als wären sie in einem Ring angeordnet, so ist ExamineKeyboard auch wenn es am Ende steht, für den zweiten Durchlauf vor der Abfrage.
ja, beim zweiten schon aber eben nicht beim ersten!

Verfasst: 15.08.2007 09:08
von Xaby
Ein Freund aus dem Forum benutzt PB 3.3
und ich weiß nicht genau, ob es alle Befehle da schon gegeben hat.

Und aus unerklärlichen Gründen funktioniert auch die PB 4.x Demo bei ihm nicht.

Genaues weiß ich nicht. Ist halt Hörensagen :(

Wäre cool, wenn einer der PB 3.3er es mal ausprobieren könnte.

Dank euch. Gruß, Folker :allright:

Verfasst: 15.08.2007 09:17
von Kiffi
Xaby hat geschrieben:Ein Freund aus dem Forum benutzt PB 3.3
[...]
Wäre cool, wenn einer der PB 3.3er es mal ausprobieren könnte.
? wieso probiert das dann Dein Freund nicht aus?

Grüße ... Kiffi

Verfasst: 15.08.2007 09:32
von Xaby
Hat er, geht nicht.
Hab ihm gesagt, er kann sich die Demo runterladen von 4.x

meinte er, der Compiler wird nicht gefunden oder so etwas ...

War vielleicht nicht sein Tag. Ich weíß es nicht.
Er kennt sich mit Programmierung noch nicht so aus und ist auch leicht ungeduldig. Ich möchte ihm aber trotzdem helfen.

Gruß, Folker :allright: