Marble Beetzyness 2D

Spiele, Demos, Grafikzeug und anderes unterhaltendes.
bEEtzY
Beiträge: 27
Registriert: 03.02.2005 23:46

Marble Beetzyness 2D

Beitrag von bEEtzY »

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
solong IRL
bEEtzY

Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

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 ...
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
bEEtzY
Beiträge: 27
Registriert: 03.02.2005 23:46

Beitrag von bEEtzY »

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 ;-)
solong IRL
bEEtzY

Bild
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag von Andreas_S »

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...
bEEtzY
Beiträge: 27
Registriert: 03.02.2005 23:46

Beitrag von bEEtzY »

D.h. es muss als nächstes erstmal heraus gefunden werden mit welcher Begrenzung des Tiles der Geschwindigkeitsvektor sich schneidet!?
solong IRL
bEEtzY

Bild
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Ich glaube was er meint is die gute alte "Breakout-Kollsion"! :mrgreen:

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
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag von Andreas_S »

bEEtzY hat geschrieben:D.h. es muss als nächstes erstmal heraus gefunden werden mit welcher Begrenzung des Tiles der Geschwindigkeitsvektor sich schneidet!?
>> !?
:freak:

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!
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag von DrShrek »

Gibt es auch einen Screenshot?
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Andreas_S
Beiträge: 787
Registriert: 14.04.2007 16:48
Wohnort: Wien Umgebung
Kontaktdaten:

Beitrag von Andreas_S »

Beim Link vil. :?
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Andreas_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!
Eine Gerade ist nicht zwischen irgendwas, sie ist endlos lang. Was du meinst ist eine Strecke... :P
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Antworten