Seite 1 von 8
Springender Ball
Verfasst: 20.04.2007 20:57
von onny
Hi, will hier mein ersten Versuch in Sachen 2D-Programmierung posten

Programmiert habe ich ein Ball der immer abprallt wenn er auf den Rand des Bildschirms trifft. Anfangs dachte ich, ich müsste mit Winkel-Berechnung den Ball zum abprallen bringen, doch es ging fiel einfacher als ich dachte. Hier mal der Code:
Code: Alles auswählen
speed = 7
If InitMouse() = 0 Or InitSound() = 0 Or InitSprite() = 0 Or InitKeyboard() = 0 Or InitMovie() = 0 Or OpenScreen(640, 480, 32, "DER SPRINGENDE BALL") = 0
MessageRequester("Error", "Please check your computer settings and update your software", 0) : End : EndIf
LoadSprite(1, "plot.bmp", 0) : LoadSprite(2, "cursor.bmp", 0)
Repeat
If y > 430 : back = 1 : Else
If y < 10 : back = 0 : EndIf : EndIf
If back = 0 : y+speed : Else : y-speed : EndIf
If x > 590 : colision = 1 : EndIf
If x = 0 : colision = 0 : EndIf
If colision = 1 : x-speed : Else : x+speed : EndIf
StartDrawing(ScreenOutput())
Locate (5,5)
DrawText("ALPHA 0.1 - MouseX: "+Str(MouseX())+" - MouseY: "+Str(MouseY())+" - BallX: "+Str(x)+" - BallY: "+Str(y))
StopDrawing()
ExamineKeyboard() : ExamineMouse() : FlipBuffers() : ClearScreen(253, 253, 253)
DisplaySprite(1,x,y)
TransparentSpriteColor(2,255, 255, 255)
DisplayTransparentSprite(2, MouseX(), MouseY())
Until KeyboardPushed(#PB_Key_Escape) > 0 : End
Kann sicherlich noch optimiert werden, vllt. habt ihr ein paar Tipps.
Weitere Pläne: Ball soll an Mouse-Cursor abprallen, leider ist dafür der Code mit den Variablen "back" und "colision" unpassend....
Hier noch die GFX-Files Cursor.bmp und Plot.bmp, Sourcecode und compilierte EXE zum download:
http://allfiles.ru/storage/7057165210ee ... 20Ball.rar
Ich weiss, ist nichts besonderes, für mich aber ein großer Erfolg

Verfasst: 20.04.2007 21:47
von AND51
Wie geil!
@ onny: Locate? Benutzt du noch PB 3.94 oder was? Ab PB 4.00 gibts das gar nicht mehr...
Schaut euch mal meinen Ball an! Ich habe außerdem eingebaut, dass man genau sehen kann, wo der Ball schon war (Spur):
Code: Alles auswählen
#breite=800
#hoehe=600
#speed=3 ; From 1 (slow) to 10 (fast)
InitSprite()
InitKeyboard()
OpenScreen(#breite, #hoehe, 32, "Der springende Ball")
Define posX=#breite/2, posY=#hoehe/2, dirX=#speed, dirY=#speed
NewList spur.Point()
CreateSprite(0, 30, 30)
StartDrawing(SpriteOutput(0))
Circle(15, 15, 15, #Yellow)
StopDrawing()
Repeat
ClearScreen(#Black)
If posX >= #breite-30 Or posX <= 0
dirX*-1
EndIf
If posY >= #hoehe-30 Or posY <= 0
dirY*-1
EndIf
AddElement(spur())
spur()\x=posX+7
spur()\y=posY+7
posX+dirX
posY+dirY
StartDrawing(ScreenOutput())
DrawText(posX+30, posY+30, "Ball("+Str(posX)+"|"+Str(posY)+")", #White, #Black)
ForEach spur()
Plot(spur()\x, spur()\y, #Red)
Next
StopDrawing()
DisplayTransparentSprite(0, posX, posY)
FlipBuffers(2)
Delay(10-#speed)
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
Hey Kaeru Gaman! Lass dich mal hier Blicken, 2D-Drawing Experte! Dass die Spur des Balls einer Gesetzmäßigkeit folgt weiß ich auch schon. Aber welcher Gesetzmäßigkeit folgt er? Das finde ich grad interessant!
Verfasst: 20.04.2007 21:47
von Fluid Byte
Herzlichen Glückwunsch!
Jetzt haste das Grundgerüst von Breakout!

Verfasst: 20.04.2007 22:16
von STARGÅTE
Dass die Spur des Balls einer Gesetzmäßigkeit folgt weiß ich auch schon. Aber welcher Gesetzmäßigkeit folgt er? Das finde ich grad interessant!
Ämm : Einfallswinkel = Ausfallswinkel, bzw. Vektoren Gesetzte
PS: Das "Spiel" sollte vllt noch etwas waren bis es in den Bereich Spiele kommt, klar ist es dein erstens Ergebnis, aber ein Spiel ist das nicht

Verfasst: 20.04.2007 22:21
von AND51
> Einfallswinkel = Ausfallswinke
Dat kenn ich schon. Stimmt. Hätt ich auch drauf kommen müssen.
> Das "Spiel" sollte vllt noch etwas waren bis es in den Bereich Spiele kommt, klar ist es dein erstens Ergebnis
Nein ist es nicht. Ich habe bereits dieses Ballding programmiert und zwar mit anderen WInkeln als nur 45°. AUßerdem wollte ich kein Spiel draus machen, habe es nur zum zeitvertreib programmiert (und, um ein bisschen anzugeben

).
Verfasst: 20.04.2007 22:25
von STARGÅTE
ich meine doch nicht dich , lol, ich meine den Autor (onny)
und, um ein bisschen anzugeben
Kicher ^^, na warte, jetzt Zeige ich dir mal was man aus dem Code machen kann, muhaha
EDIT:
Ein bischen Gravitation, Reibung, und die Spur verplast ^^, du bist wieder dran ^^
Code: Alles auswählen
1:
#breite=1024
#hoehe=768
#speed=3 ; From 1 (slow) to 10 (fast)
InitSprite()
InitKeyboard()
OpenScreen(#breite, #hoehe, 32, "Der springende Ball")
posX.f=#breite/2 : posY.f=#hoehe/4 : dirX.f=#speed : dirY.f=#speed
Structure spur
x.f
y.f
h.l
EndStructure
NewList spur.spur()
CreateSprite(0, 30, 30)
StartDrawing(SpriteOutput(0))
Circle(15, 15, 15, #Yellow)
StopDrawing()
Repeat
ClearScreen(0,0,0)
If posX >= #breite-30 Or posX <= 0
dirX*-1
EndIf
If posY >= #hoehe-30
dirY*-0.80
posY = #hoehe-30
EndIf
AddElement(spur())
spur()\x=posX+15
spur()\y=posY+15
spur()\h=255
posX+dirX
posY+dirY
dirY+0.1
StartDrawing(ScreenOutput())
Locate(posX+30, posY+30)
DrawText("Ball("+Str(posX)+"|"+Str(posY)+")")
ResetList(spur())
While NextElement(spur())
spur()\h-1
Circle(spur()\x, spur()\y, 2, RGB(spur()\h,0,0))
If spur()\h <= 0 : DeleteElement(spur()) : EndIf
Wend
StopDrawing()
DisplayTransparentSprite(0, posX, posY)
FlipBuffers()
Delay(10-#speed)
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
Verfasst: 20.04.2007 22:44
von AND51
Beeindruckend, ehrlich!
> ich meine doch nicht dich , lol, ich meine den Autor (onny)
achsoooooo!
Bitte bedenke: Ich bin dir zwar um PB Versionen voraus^^
Aber ich habe im 2D bereich noch nicht so viel Erfahrung, wie du oder Kaeru, weil ich eher der GUI Typ bin^^
Ich versuch trotzdem mein Bestes! Warte nen bisschen...
//Edit: DU hast 2 Fehler:
Der Ball hoppst immer weiter, er fängt nie an zu Rollen oder liegenzubleiben. 2. Wenn er ganz am Boden ist, dann kann man die Koordinaten nicht mehr lesen^^
Verfasst: 20.04.2007 23:16
von STARGÅTE
ist der Ball auf Kummi ?, dann könnte man noch die verformung berechnen

Verfasst: 20.04.2007 23:25
von Andreas_S
Vielleicht wird heute noch etwas von mir auftauchen

.
Verfasst: 20.04.2007 23:36
von onny
Code: Alles auswählen
speed = 7
If InitMouse() = 0 Or InitSound() = 0 Or InitSprite() = 0 Or InitKeyboard() = 0 Or InitMovie() = 0 Or OpenScreen(640, 480, 32, "DER SPRINGENDE BALL") = 0
MessageRequester("Error", "Please check your computer settings and update your software", 0) : End : EndIf
CreateSprite(1, 60, 60)
StartDrawing(SpriteOutput(1)) : Circle(20, 20, 20, #Blue)
StopDrawing()
CreateSprite(2, 20, 20)
StartDrawing(SpriteOutput(2))
Circle(10, 10, 10, #Green)
StopDrawing()
Repeat
If MouseButton(1) : speed+1 : EndIf
If MouseButton(2) And speed > 0 : speed-1 : EndIf
If y > 430 : back = 1 : EndIf
If y < 30 : back = 0 : EndIf
If x > 590 : colision = 1 : EndIf
If x <= 1 : colision = 0 : EndIf
If back = 0 : y+speed : Else : y-speed : EndIf
If colision = 1 : x-speed : Else : x+speed : EndIf
StartDrawing(ScreenOutput()) : Locate (5,5)
DrawText("ALPHA 0.1 - MouseX: "+Str(MouseX())+" - MouseY: "+Str(MouseY())+" - BallX: "+Str(x)+" - BallY: "+Str(y))
StopDrawing()
DisplaySprite(1,x,y)
TransparentSpriteColor(2,255, 255, 255)
DisplayTransparentSprite(2, MouseX(), MouseY())
ExamineKeyboard() : ExamineMouse() : FlipBuffers() : ClearScreen(0, 0, 0)
Until KeyboardPushed(#PB_Key_Escape) > 0 : End
schneller = linker mausbutton
langsamer/stillstand = rechter mausbutton
nun werden keine grafiken mehr benötigt
