Marble Beetzyness 2D
Marble Beetzyness 2D
Moin Leute,
hier mal ein kleines 2D Murmelspiel bei dem man sich selbst, in einem Texteditor, die Karten bauen kann.
Angelehnt an den C-64 Klassiker MarbleMadness.
Probleme habe ich noch mit der Framerate im Fenstermodus sowie mit der korrekten Wandkollision!
www.ABeetz.de
hier mal ein kleines 2D Murmelspiel bei dem man sich selbst, in einem Texteditor, die Karten bauen kann.
Angelehnt an den C-64 Klassiker MarbleMadness.
Probleme habe ich noch mit der Framerate im Fenstermodus sowie mit der korrekten Wandkollision!
www.ABeetz.de
Spielprinzip macht spaß, nur habe ich ein paar probleme:
Die kollisionen sind wirklich seltsam, an einigen stellen, liegt vermutlich daran das du den "Abprall" erst berechnet wenn die Kugel bereits "in" der Wand steckt,sodass du dann manchmal ein falsches resultat erhältst.
Des weiteren finde ich die Kontraste im Spiel nicht gut gewählt, auch wenn du dich vllt an den C64-Klassiger halten wolltest, aber dieses Rote-Weiße Karomuster nervt schon, vorallem wenn die Schrift darauf ist ...
Die kollisionen sind wirklich seltsam, an einigen stellen, liegt vermutlich daran das du den "Abprall" erst berechnet wenn die Kugel bereits "in" der Wand steckt,sodass du dann manchmal ein falsches resultat erhältst.
Des weiteren finde ich die Kontraste im Spiel nicht gut gewählt, auch wenn du dich vllt an den C64-Klassiger halten wolltest, aber dieses Rote-Weiße Karomuster nervt schon, vorallem wenn die Schrift darauf ist ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Kollision: ich berechne die neue Position und prüfe dann die Kollision mittels der 9 Segmente aus http://www.purebasic.fr/german/viewtopi ... 234#129234, ist nicht perfekt mir fällt aber momentan auch nix besseres ein.
Was die Grafik und Sound angeht, so ist das nicht wirklich mein Gebiet, falls jemand ein schöneres "Theme" bauen könnte wäre ich froh drum ;-)
Was die Grafik und Sound angeht, so ist das nicht wirklich mein Gebiet, falls jemand ein schöneres "Theme" bauen könnte wäre ich froh drum ;-)
Die Kollision zwischen Kugel und Wand geht ganz einfach:
Du unterteilst den Geschwindigkeitsvektor in zwei komponente: eine steht normal auf die Wand und die zweite ist parallel zur Wand.
Dann kehrst du den der auf die Wand normal steht (mit -).
Fertig.
Da deine Wände immer parallel zur x und y Achse stehen ist das ganze ja noch vereinfacht...
Du unterteilst den Geschwindigkeitsvektor in zwei komponente: eine steht normal auf die Wand und die zweite ist parallel zur Wand.
Dann kehrst du den der auf die Wand normal steht (mit -).
Fertig.
Da deine Wände immer parallel zur x und y Achse stehen ist das ganze ja noch vereinfacht...
- Fluid Byte
- Beiträge: 3110
- Registriert: 27.09.2006 22:06
- Wohnort: Berlin, Mitte
Ich glaube was er meint is die gute alte "Breakout-Kollsion"!

Code: Alles auswählen
InitSprite() : InitKeyboard() : InitSprite3D()
OpenWindow(0,0,0,640,480,"void",#PB_Window_SystemMenu | #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0),0,0,640,480,0,0,0)
CreateSprite(0,50,50)
StartDrawing(SpriteOutput(0))
Ellipse(25,25,25,25,#Red)
StopDrawing()
#Accel = 0.5
SpeedX.f = 3
SpeedY.f = 4
BallX = 320
BallY = 240
Repeat
EventID = WindowEvent()
ClearScreen(0)
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left) : SpeedX.f - #Accel : EndIf
If KeyboardPushed(#PB_Key_Right) : SpeedX.f + #Accel : EndIf
If KeyboardPushed(#PB_Key_Up) : SpeedY.f - #Accel : EndIf
If KeyboardPushed(#PB_Key_Down) : SpeedY.f + #Accel : EndIf
If BallX <= 0 Or BallX >= 590 : SpeedX = -SpeedX : EndIf
If BallY <= 0 Or BallY >= 430 : SpeedY = -SpeedY : EndIf
BallX + SpeedX : BallY + SpeedY
DisplaySprite(0,BallX,BallY)
FlipBuffers()
Until KeyboardPushed(1) Or EventID = #WM_CLOSE
Windows 10 Pro, 64-Bit / Outtakes | Derek
>> !?bEEtzY hat geschrieben:D.h. es muss als nächstes erstmal heraus gefunden werden mit welcher Begrenzung des Tiles der Geschwindigkeitsvektor sich schneidet!?

1.) Vektoren können sich nicht schneiden! Sie sind überall.
2.) Wenn du wissen willst wann sich die Kugel mit der Mauer schneidet, dann betrachte die Gerade zwischen dem Mittelpunkt jetzt und zur nächste Zeiteinheit und Berechne den Schnittpunkt zur Geraden der Mauer!
Eine Gerade ist nicht zwischen irgendwas, sie ist endlos lang. Was du meinst ist eine Strecke... :PAndreas_S hat geschrieben:1.) Vektoren können sich nicht schneiden! Sie sind überall.
2.) Wenn du wissen willst wann sich die Kugel mit der Mauer schneidet, dann betrachte die Gerade zwischen dem Mittelpunkt jetzt und zur nächste Zeiteinheit und Berechne den Schnittpunkt zur Geraden der Mauer!

[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]