etwas hüpfen lassen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

mabox

Betreff: etwas hüpfen lassen

BeitragDo, Mai 08, 2008 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo ich bin grad am Versuch ein Rechteck hüpfen zu lassen.
Klappt auch schon ganz gut, aber nachden der Code ein Paarmal durchgelaufen ist geht der speed zu sehr ins minus und die Richtung wechstelt zu oft. da find ich den Fehler nicht.

hier mein Code: [AUSKLAPPEN]
Graphics 800,600,0,2
SetBuffer BackBuffer()

richtung = 1
Ball_x = 400
Ball_y = 100
timer = CreateTimer (60)
speed# = .1

Repeat
   
   Cls
   If speed# =< 0 Then richtung = richtung * -1
   If richtung = 1 Then
      speed# = speed# + .01
   Else
      speed# = speed# - .013
   EndIf
   ball_y = Ball_y + speed# * richtung* 15
   Rect Ball_x,Ball_y, 10, 10
   Rect 0, 580, 800, 1
   If RectsOverlap (Ball_x, Ball_y, 10, 10, 0, 580, 800, 1) Then
      richtung = richtung * -1
   EndIf
   Text 10,10,richtung
   Text 10,30,speed#
   
   WaitTimer (timer)
   Flip
Until KeyHit (1)
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage
 

Lador

BeitragDo, Mai 08, 2008 16:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo.
Falls du es noch nicht bemerkt hast: dein "speed#" geht ja nur ins Minus, weil dein Ball näher an den Boden kommt von Sprung zu Sprung. Ich würde vorschlagen, deine Geschwindigkeit nach der Länge der Strecke von der oberen Ballposition bis zum Boden anzupassen. In etwa:

Code: [AUSKLAPPEN]
speed# = speed# + (boden_y - ball_y)/60


Ich glaube, somit sollte der Speed nicht ins Negative kommen.

MFG Lador

mabox

BeitragDo, Mai 08, 2008 17:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm leider gehts mit deinem Code auch nicht, da geht der speed noch mehr ins Minus.
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage
 

Lador

BeitragDo, Mai 08, 2008 17:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Graphics 800,600,0,2
SetBuffer BackBuffer()

richtung = 1
Ball_x = 400
Ball_y = 100
timer = CreateTimer (60)
speed# = .1

Repeat
   
   Cls
   If speed# =< 0 Then richtung = richtung * -1
   If speed# < 0 Then
    If richtung = 1 Then
     speed = speed + 0.01
    Else
     speed = speed - 0.013
    EndIf
   ElseIf speed# > 1 Then
    speed = -0.01
   EndIf
   If richtung = 1 Then
      speed# = speed# + 0.01
   Else
      speed# = speed# - 0.013
   EndIf
   ball_y = Ball_y + speed# * richtung* 15
   Rect Ball_x,Ball_y, 10, 10
   Rect 0, 580, 800, 1
   If RectsOverlap (Ball_x, Ball_y, 10, 10, 0, 580, 800, 1) Then
      richtung = richtung * -1
   EndIf
   Text 10,10,richtung
   Text 10,30,speed#
   
   WaitTimer (timer)
   Flip
Until KeyHit (1)


Also bis zum Schluss klappt es bei mir.

MFG Lador

WEBLink

BeitragDo, Mai 08, 2008 17:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du bei deinem Code bleiben möchtest hier auch mit variierbarer Richtung


Code: [AUSKLAPPEN]
Graphics 800,600,0,2
SetBuffer BackBuffer()

richtung = 1
Ball_x = 400
Ball_y = 100
timer = CreateTimer (60)
speed# = .1



Repeat
 
   left_ = KeyDown(203)
   Right_ = KeyDown(205)
 
   Cls

   If Left_ Then ball_x = ball_x - 1
   If right_ Then ball_x = ball_x + 1

   If speed# =< 0 Then richtung =  1
   If richtung = 1 Then
      speed# = speed# + .01
   Else
      speed# = speed# - .013
   EndIf
   ball_y = Ball_y + speed# * richtung* 15
   Rect Ball_x,Ball_y, 10, 10
   Rect 0, 580, 800, 1
   If RectsOverlap (Ball_x, Ball_y, 10, 10, 0, 580, 800, 1) Then
      richtung =  -1
   EndIf
   Text 10,10,richtung
   Text 10,30,speed#
   
   WaitTimer (timer)
   Flip
Until KeyHit (1)
  • Zuletzt bearbeitet von WEBLink am Do, Mai 08, 2008 17:49, insgesamt 2-mal bearbeitet

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Mai 08, 2008 17:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstmal solltest du immer wenn ein Timer benutzt wird, auch Flip auf 0 stellen.

Desweiteren sollte man so weit es geht auf unnötige Variablen verziechten. Also auf die Richtung etc. kann man ganz gut verzichten. Das alles lässt sich auch sehr gut auf rein mathematischem Wege berechnen, als per ewigen If-Abfragen zu kontrolieren zu versuchen.

Ich habe leider nicht so viel Lust das alles bis aufs Detail zu erklären, weshalb ich mal dein Code soweit überarbeitet habe. Das einzige was ich mich frage ist, ob deine Überlegung mit RectsOverlap in der Form sinnvoll machbar ist? Der Sinn ist klar, aber um eine richtige ''Physik'' dahinter zu berechnen, müsste man auch wissen, von welcher Seite der Spieler kollidiert. Es wäre also Sinnvoll zu wissen, was genau dein Ziel ist.

Code: [AUSKLAPPEN]
Graphics 800,600,0,2
SetBuffer BackBuffer()

Const Gravitation#=0.1
Const Luftwiederstand#=0.995
Const Aufprallwiederstand#=0.8
Const Kraft#=0.2

Local Timer = CreateTimer (60)
Local Ball_X# = 400
Local Ball_Y# = 100
Local Ball_XSpeed# = 0
Local Ball_YSpeed# = 0


Repeat
   Cls
   
   If KeyDown(203) Then Ball_XSpeed=Ball_XSpeed-Kraft
   If KeyDown(205) Then Ball_XSpeed=Ball_XSpeed+Kraft
   If KeyDown(200) Then Ball_YSpeed=Ball_YSpeed-Kraft
   If KeyDown(208) Then Ball_YSpeed=Ball_YSpeed+Kraft
   
   Ball_XSpeed=Ball_XSpeed*Luftwiederstand
   Ball_YSpeed=Ball_YSpeed*Luftwiederstand
   Ball_YSpeed=Ball_YSpeed+Gravitation
   
   Ball_X=Ball_X+Ball_XSpeed
   Ball_Y=Ball_Y+Ball_YSpeed
   
   If Ball_Y>580 Then
      Ball_YSpeed=-Ball_YSpeed*Aufprallwiederstand
      Ball_Y=580
   EndIf
   
   Rect Ball_X-5,Ball_Y-5, 10, 10, 1
   Rect 0, 580, 800, 1, 1
   
   Text 20,20,Ball_XSpeed#
   Text 20,40,Ball_YSpeed#
   
   WaitTimer (Timer)
   Flip 0
Until KeyHit (1)


edit1: Achja, dein Spieler ging vermutlich deshalb zu weit ins Minus, da deine Kollisions''fläche'' nur ein Pixel hoch war. Da die Fallgeschwindigkeit auch schneller als ein Pixel sein konnte und damit nicht genau auf die Fläche getroffen wurde, könnte es passieren, dass eben der Spieler da durch fällt.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Blitzprogger

BeitragDo, Mai 08, 2008 20:31
Antworten mit Zitat
Benutzer-Profile anzeigen
wow hectic Shocked wo lernt man das?
(ich weiss ja hier, aber so einen code hab ich in der art noch nirgends gesehen)

mfg
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/

Unfreiwilliger Gewinner des BAC# 115. Wink

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Mai 08, 2008 21:44
Antworten mit Zitat
Benutzer-Profile anzeigen
der eine NOOB!!!, deine Reaktion ist so übertrieben, dass ich mir nicht sicher bin wie du es meinst. Question Ich programmiere nach Möglichkeit immer so. Was soll denn daran außergewöhnlich sein?

Als Nachtrag muß ich anmerken, dass ich mir - aus welchen Gründen auch immer - sicher war, dass ich der Erstantworter bin. Da liegen aber so einige Beiträge noch dazwischen. War wohl ein Irrtum. Mein Beitrag bezog sich also auf den Fragesteller ohne Berücksichtigung anderer bereits zuvor geschriebener Beiträge. Daher ''sorry'' für die anderen, dennen ich dazwischen funke.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

mabox

BeitragFr, Mai 09, 2008 8:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok vielen Dank schonmal, ich hab mir jetzt zwar noch nicht alles angeschaut, aber das von Hectic ist auf jeden Fall sehr gut!
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage

Blitzprogger

BeitragFr, Mai 09, 2008 17:13
Antworten mit Zitat
Benutzer-Profile anzeigen
sry dass mein beitrag so übertrieben gewirkt hat Embarassed
damit meine ich dass deine beiträge bei näherem betrachten voller logik sprotzen und ich keine ahnung habe wo man das herhat

mfg
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/

Unfreiwilliger Gewinner des BAC# 115. Wink

BigMaexle

BeitragFr, Mai 09, 2008 17:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Etwas Talent für Logische Sachen + Motivation + Geduld -> Guter Programmierer

Bei Hectic trifft halt aller ziemlich gut hin. Er ist halt ein ziemlich guter Programmierer. Nicht mehr und nciht weniger. Da braucht man keine besondere Ausbildung Laughing
--------------------------------------
Ich bin unfreiwillig ein Mitglied dieser kapitalistischen Gesellschaft, wo jeder Geldgeile Unternehmer an mein Geld will und ich selbst bei meinen Entscheidungen so gut wie willenlos bin...... und ich bin glücklich drüber
 

AntiAdi

BeitragFr, Mai 09, 2008 17:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh ja so ist das, bei mir trifft leider nicht ganz alles zu. Talent für logische Sachen hab ich nicht sonderlich, aber an Motivation dürfte es nicht fehlen und damit kann man das logische Talent (zumendest ein Bisschen) verdecken wenn man noch die nötige Geduld mitbringt. Wobei dann alles sehr viel länger dauert als wenn man von vornerein gut logisch denken kann.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group