| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Mar 2005
Beiträge: 5
|
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! |
| | |
| | #2 (permalink) |
| Neuer User 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 |
| | |
| | #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;
} |
| | |
| | #4 (permalink) |
| Neuer User 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.
__________________ Currently working on: - --- --- ----------------------------------------------------------------- ActionScript 3.0, C++, Java, Delphi Geändert von _crypto_ (02-09-2009 um 19:19 Uhr) |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |