2d Billard

Posted By: NeoJones

2d Billard - 01/19/14 17:20

Hi! Ich würd gern mal ein ganz simples 2d Billardspiel erstellen.

Weiß jemand, wie man sowas mit Panels umsetzen kann (mit Abprallverhalten) ?

Gruß, DF
Posted By: HeelX

Re: 2d Billard - 01/19/14 18:37

Also das einfachste wäre wohl wenn du die Physiksimulation mit PhysX fahren lässt auf Basis von echten 3D Kugeln. Die Positionen nimmst du dann, um das auf die 2D Sprites zu übertragen. Natürlich kannst du auch deine eigene 2D-Physik-Implementierung schreiben, aber wenn du es simpel haben willst, würde ich es genau so machen wink
Posted By: NeoJones

Re: 2d Billard - 01/19/14 19:38

joa, so mach ichs. danke wink
Posted By: MasterQ32

Re: 2d Billard - 01/19/14 22:24

Was man da noch anmerken könnte: Du kannst für RigidBodies einen lock auf eine Achse mit pXent_setbodyflag machen. so stellst du sicher, dass die kugeln nicht hüpfen
Posted By: NeoJones

Re: 2d Billard - 01/20/14 20:09

joa danke, gut zu wissen laugh
Posted By: NeoJones

Re: 2d Billard - 01/20/14 23:09

also ich glaube, "simpel" ist es in beiden fällen nicht. egal ob nun physikengine oder eigene 2d physik. irgendwie macht die physX was sie will, nur nicht das, was ich will xD kugeln prallen nicht sauber ab, sondern gleiten mehr an der bande entlang.

würde ja schon gern meine eigene 2d physik implementieren, wenn ich nur wüsste, wie ich das mit den löchern hinbekomme. denn panels können doch per c_intersect miteinander kollidieren. dies würde doch deutlich performance sparen, weil man
a) keine physX mehr benötigt und
b) die 2d positionen nicht ständig aktualisieren muss

mit "simpel" meinte ich auch mehr einfaches 2d ohne grafische effekte ect und nicht wenig arbeit grin
Posted By: NeoJones

Re: 2d Billard - 01/26/14 11:55

Also nur mit Panels komme ich aufgrund Kollisionsprobleme net weiter und denke, ich machs so wie HeelX es schon erwähnt hat, nur eben ohne die PhysX und gebe die 3d Positionen in 2d wieder.
Ich frage mich aber trotzdem, wie man früher so um 1990 rum schon Minigolf, bzw Spiele mit einfachem Bouncing teilweise auf DOS ohne 3d Raum umgesetzt hat. ^^
Posted By: Ascalon

Re: 2d Billard - 01/26/14 13:30

schau mal in das Aum-Magazin rein bei den Workshops, ab Nummer 81. Da geht es auch um 2d Spiele und glaub auch um Kollisionen usw. Denke das kann ganz nützlich sein für dich.
Posted By: NeoJones

Re: 2d Billard - 01/27/14 08:27

Jep danke Ascalon laugh habs mir angesehen, aber irgendwie scheint mir das nur in 2d komplizierter. hab bis jetzt schonmal eine gescheite kollision im 3d hinbekommen, allerdings verhält sich die kugel beim aufprall von anderen kugeln noch verkehrt.
Posted By: NeoJones

Re: 2d Billard - 01/27/14 10:07

Ok, irgendwie komme ich hier einfach nicht weiter. Hauptproblem ist der neue Pan Winkel für die aufprallende Kugel (cueball!) Problem ist, das die Winkel net von 0-360° gehen, sondern 0-180/-180° -.-
Hier mal der Code:

Code:
action cueb_act()
{
	cueball = me;
	c_setminmax(me);
	var aufprallwinkel[3];
	var aufprall[3]; 
	my.pan = -80;
	
	while(1)
	{
		c_move(me, vector(accelerate(speed_cueball,-10*key_space*time_step,0.02),0,0), nullvector, USE_POLYGON | IGNORE_PASSABLE | IGNORE_WORLD | IGNORE_SPRITES);
		
		if(trace_hit && hit.entity == table)
		{
			//set the new direction
			vec_to_angle(aufprallwinkel, normal);
			my.pan = my.pan+(2*((aufprallwinkel[0]+90)+180-my.pan));
			speed_cueball = speed_cueball*0.85;
		}
		if(trace_hit && hit.entity != table)
		{
			// get the direction from cueball to the collide ball
			vec_set(aufprall,hit.x); 
			vec_sub(aufprall,your.x);
			vec_to_angle(your.pan,aufprall);
			your.skill1 = speed_cueball*1.5;//set the speed
			

			// get the new direction 
			my.pan = your.pan-my.pan; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ???
			

			speed_cueball = speed_cueball*0.3;
			wait(1);
			your.skill1 = 0;
		}
		wait(1);
	}
}



Im Prinzip muss ich doch nur den aktuellen Winkel vom Winkel der zu treffenden Kugel abziehen. Die getroffene Kugel bekommt schon die richtige Richtung. Oder ich hab da einen Denkfehler!?
Wäre echt super, wenn mir da jemand helfen könnte...

Posted By: NeoJones

Re: 2d Billard - 01/27/14 19:12

Keiner?
Posted By: Superku

Re: 2d Billard - 01/27/14 19:26

Originally Posted By: Dragonfly
Ich frage mich aber trotzdem, wie man früher so um 1990 rum schon Minigolf, bzw Spiele mit einfachem Bouncing teilweise auf DOS ohne 3d Raum umgesetzt hat. ^^

Meinst du denn, dass das in 3D einfacher wäre als in 2D??

Zu deinem Problem: Du könntest den eigens für so etwas implementierten "bounce"-Vektor benutzen.
Posted By: NeoJones

Re: 2d Billard - 01/27/14 20:45

Originally Posted By: Superku

Meinst du denn, dass das in 3D einfacher wäre als in 2D??

Naja, polygonale Kollision find ich schon einfacher.
Originally Posted By: Superku

Zu deinem Problem: Du könntest den eigens für so etwas implementierten "bounce"-Vektor benutzen.

Jep, habs schon mit
Code:
vec_to_angle(my.pan, bounce);

probiert, aber my.pan liefert mir irgendwie falsche Werte zurück.
Posted By: HeelX

Re: 2d Billard - 01/27/14 20:51

Originally Posted By: Dragonfly
Naja, polygonale Kollision find ich schon einfacher.
Hahaha laugh der war gut! Bei einem Kreis musst du auch nur die Distanz auswerten und du hast ne perfekte Kollision berechnet, aber ist schon gut wink

Warum benutzt du denn nicht PhysX, mensch! Klemm dich mal dahinter. Wenn die Kugeln an der Bande weiterrollen, dann liegt das wahrscheinlich daran, dass da keine Reibung und Schwerkraft stattfindet. Ich würde bei so einer Simulation auch erstmal peinlich genau realistisch sein. Also mess so ne Kugel aus, wie schwer die ist, wie groß der Tisch ist und so weiter. Selbst über den Stoff wirst du wahrscheinlich Daten finden wink

Mit panels würde ich schon gar nicht arbeiten, weil die keine Gleitkommagenauigkeit bei der Darstellung besitzen.
Posted By: NeoJones

Re: 2d Billard - 01/27/14 20:59

Originally Posted By: HeelX
Bei einem Kreis musst du auch nur die Distanz auswerten und du hast ne perfekte Kollision berechnet

Das ist mir klar. Mein Problem war da eher die Richtung von der Bande abzuprallenden Kugel zu berechnen.

Ja wie gesagt, es soll "simpel" und nicht übelst realistisch werden. Masse, Luftdruck, Reibung ist mir bei diesem Projekt wurscht.
© 2024 lite-C Forums