Zurück   Flashforum > Flash > ActionScript > Spielkonzepte und Spieleprogrammierung

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 02-09-2009, 17:18   #1 (permalink)
Neuer User
 
Registriert seit: Mar 2005
Beiträge: 5
Question AirHockey - Problem mit der Kollision

Danke das ihr euch mein Problem anschaut und eventuell etwas Gehirnschmalz reinsteckt:

Beim Versuch nen AirHockey Spiel nachzubilden komme ich an der Stelle nicht weiter an der der runde Schläger mit dem Puck kollidiert.

Ich habe genug Beispiele in denen die Kollision beide Objekte sich beinflussen und habe mir eins herangezogen um es für meinen Fall umzubauen. Denn der Schläger ist ja quasie von dem masselosen Pcuk nicht asu der Bahn zu kriegen.

Habt ihr vielleicht ein funktionierendes Beispiel - bei mir wird die Kollision durch den Abstand ausgelöst - da der Puck aber nicht sofort wieder auserhalb ist wird die Kollisionsberechnung gleich viele Male wiederholt und eier quasi einmal um den Schläger...

Danke ich bin am Verzweifeln!
nullE_sushi ist offline   Mit Zitat antworten
Alt 02-09-2009, 17:46   #2 (permalink)
Neuer User
 
Benutzerbild von _crypto_
 
Registriert seit: Mar 2006
Beiträge: 1.573
über den abstand ist natürlich nicht sicher genug.
wenn der puck schnell genug ist, überspringt er einfach deinen schläger.

ich würde dir raten die bewegungen mit vektoren zu realisieren.
dann kannst du auhc vorrechnen, ob eine kollision statfinden wird und
dementsprechend drauf reagieren.

ansonsten ist das ganze nichts anderes als eine kreis - kreis kollision,
dazu gibts genug beispiele (hier und bei google), wie die aufgelöst wird
__________________

Currently working on:

- --- ---

-----------------------------------------------------------------
ActionScript 3.0, C++, Java, Delphi
_crypto_ ist offline   Mit Zitat antworten
Alt 02-09-2009, 17:54   #3 (permalink)
Neuer User
 
Registriert seit: Mar 2005
Beiträge: 5
das klingt ja gleich ganz schön kompliziert. vorherberechnen

vielleicht darf ich dann mal ins detail gehen und hoffen das du vielleicht nen fehler entdeckst.

PuckA ist wirklich ein Puck
PuckB der Schläger
Sieht alles sehr nach Beginnercode aus, soeiner bin ich nämlich

Code:
 		private function loesePucks ( MCPuckA:*, MCPuckB:* ) : void
		{
			trace ("kollision");
			
			var nX1:Number = MCPuckA.x;
			var nY1:Number = MCPuckA.y;
			var nDistX:Number = MCPuckB.x - nX1;
			var nDistY:Number = MCPuckB.y - nY1;
			
			var nDistance:Number = Math.sqrt ( nDistX * nDistX + nDistY * nDistY );
			var nRadiusA:Number = 115/2;
			var nRadiusB:Number = 180/2;
			
			var nNormalX:Number = nDistX/nDistance;
			var nNormalY:Number = nDistY/nDistance;
			
			var nMittelpunktX:Number = ( nX1 + MCPuckB.x )/2;
			var nMittelpunktY:Number = ( nY1 + MCPuckB.y )/2;
			
			MCPuckA.x = nMittelpunktX - nNormalX * nRadiusA;
			MCPuckA.y = nMittelpunktY - nNormalY * nRadiusA;
			//MCPuckB.x = nMittelpunktX + nNormalX * nRadiusB;
			//MCPuckB.y = nMittelpunktY + nNormalY * nRadiusB;
			
			
			//var nVector:Number = ( ( MCPuckA.nSpeedX - MCPuckB.nSpeedX ) * nNormalX )+ ( ( MCPuckA.nSpeedY - MCPuckB.nSpeedY ) * nNormalY );
			var nVector:Number = ( ( nSpeedX - speedschlaegx ) * nNormalX )+ ( ( nSpeedY - speedschlaegy ) * nNormalY );
			
			var nVelX:Number = nVector * nNormalX;
			var nVelY:Number = nVector * nNormalY;
			
			nSpeedX -= nVelX;
			nSpeedY -= nVelY;
			//MCPuckB.nSpeedX += nVelX;
			//MCPuckB.nSpeedY += nVelY;
		}
nullE_sushi ist offline   Mit Zitat antworten
Alt 02-09-2009, 18:12   #4 (permalink)
Neuer User
 
Benutzerbild von _crypto_
 
Registriert seit: Mar 2006
Beiträge: 1.573
vorberechnen ist nicht so schwer.
als stichwort kannst du ja mal nach "Dynamic Intersection" suchen

ansonsten schau mal hier:
Tutorials and Presentations by Metanet Software Inc.

oder ebene hier:
BillardGL - Das kostenlose OpenGL-Billard-Spiel fr Windows und Linux

Edit:
Hier mal ein kleines Beispiel, der wichtigste Teil für dich ist ja die Kollision
Den Rest kannst du getrost vergessen ist nur schnell dahingeklatscht, unsauber und
so, dass ich beliebig viele Bälle auf der Stage haben kann

Um jetz den Puck als unendliche Masse darzustellen, brauchst du ihm einfach nur keine neue Geschwindigkeit geben, nach der Kollision.
Die Geschwindigkeit des Schlägers ist ja eh immer durch die Mausbewegung o.ä. realisiert.
Angehängte Dateien
Dateityp: rar Desktop.rar (8,3 KB, 18x aufgerufen)
__________________

Currently working on:

- --- ---

-----------------------------------------------------------------
ActionScript 3.0, C++, Java, Delphi

Geändert von _crypto_ (02-09-2009 um 19:19 Uhr)
_crypto_ ist offline   Mit Zitat antworten
Alt 13-09-2009, 15:20   #5 (permalink)
Neuer User
 
Registriert seit: Mar 2005
Beiträge: 5
Lightbulb

Danke für deine Hilfe, wir haben unsere "Physik" so hingebogen bis es dann irgendwann gepasst hat...
nullE_sushi ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 18:10 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele