问题
I'm trying to stop grooving of ball and drop to bottom of the stage when it's hit to the other balls.But I can't. I tried set distance but it's not worked.
I add a picture of the game
And my code
Enemy balls(green) touch each other fine.But not touch circle make by the mouse.Balls touch to black balls but not seeing touched massage.The touch message appear only when touch the mouse arrow.
import flash.display.MovieClip;
import flash.display.Stage;
import flash.events.Event;
import flash.events.KeyboardEvent;
import Ball;
import Tekno;
var nSpeedX:Number;
var nSpeedY:Number;
var nStageWidth:Number = 500;
var nStageHeight:Number = 400;
var NSpeedX:Number;
var NSpeedY:Number;
var the_kall:kall; //Big ball ( make by player)
var mcKall:boru; //Red ball
var drawing:Boolean=false;
var nNumBalls:Number = 2;
var initX:Number=0.0;
var initY:Number=0.0;
var topisler:Number=0;
var pressed:Boolean=false;
var MCBallA:MovieClip;
var MCBallB:MovieClip;
var zamzam:Boolean=false;
var kao:Number=10;
var kao2:Number=10;
var mcBallContainer:MovieClip;
var mcfakContainer:MovieClip;
var mcKallCont:MovieClip;
stage.addEventListener(MouseEvent.MOUSE_DOWN,mousePressed);
function mousePressed(e:MouseEvent) {
zamzam=true;
}
//********* Create red ball if mouse press up
stage.addEventListener(MouseEvent.MOUSE_UP,mousebrk);
function mousebrk(e:MouseEvent) {
zamzam=false;
topisler +=1;
kao =1;
kao2 =1;
mcKallCont = new MovieClip () ;
stage.addChild(mcKallCont);
mcKall = new boru ();
mcKallCont.x =the_kall.x ;
mcKallCont.y = the_kall.y;
mcKall.width =the_kall.width;
mcKall.height =the_kall.height;
mcKallCont.addChild ( mcKall );
//for ( var p = 0; p < mcKallCont.numChildren; p++ )
//var mcKall1:* = mcKallCont.getChildAt( p );
}
//********* Create big ball
stage.addEventListener(Event.ENTER_FRAME,Update);
function Update(e:Event) {
if(zamzam==true){ //********check if mouse pressed
the_kall = new kall();
the_kall.x=mouseX;
the_kall.y=mouseY;
the_kall.width =kao;
the_kall.height =kao2;
addChild(the_kall);
kao +=1;
kao2 +=1;
///////////
}
}
//**************Drag
stage.addEventListener(MouseEvent.MOUSE_MOVE,mouseMoved);
function mouseMoved(e:MouseEvent) {
if (drawing) {
the_kall.x=mouseX;
the_kall.y=mouseY;
}
}
//************Add black balls and check collision
stage.addEventListener(Event.ENTER_FRAME,BallCollision);
function BallCollision(oly:Event) {
mcBallContainer = new MovieClip ( ) ;
mcBallContainer.x = mcBallContainer.y = 0;
stage.addChild(mcBallContainer);
this.addEventListener ( Event.ENTER_FRAME, enterFrameHandler );
for ( var i = 0; i < nNumBalls; i++ )
{
var mcBall:Ball = new Ball ( Math.floor ( ( Math.random() * 12 ) - 4 ), Math.floor ( ( Math.random() * 12 ) - 4 ) );
mcBall.x = Math.random() * nStageWidth;
mcBall.y = Math.random() * nStageHeight;
mcBallContainer.addChild ( mcBall );
}
stage.removeEventListener(Event.ENTER_FRAME,BallCollision);
}
function enterFrameHandler(oly:Event) {
for ( var i = 0; i < mcBallContainer.numChildren; i++ )
{
var mcBall1:* = mcBallContainer.getChildAt( i );
for ( var j = i + 1; j < mcBallContainer.numChildren; j++ )
{
var mcBall2:* = mcBallContainer.getChildAt( j );
var nDistX:Number = Math.abs ( mcBall1.x - mcBall2.x );
var nDistY:Number = Math.abs ( mcBall1.y - mcBall2.y );
var nDistance:Number = Math.sqrt ( nDistX * nDistX + nDistY * nDistY );
//***********I Tried big ball vs black ball
var sDistx:Number = Math.abs ( mcBall1.x - the_kall.x );
var sDisty:Number = Math.abs ( mcBall1.y - the_kall.y );
var nsistance:Number = Math.sqrt ( sDistx * sDistx + sDisty * sDisty );
if ( nsistance < 20 )
{
touch.text="balls are touch";
}
if ( nDistance < 20 )
{
solveBalls ( mcBall1, mcBall2 ); //*****if black balls touch each other
}
}
}
onda.text=String(nsistance);
}
function solveBalls ( MCBallA:MovieClip, MCBallB:MovieClip ) : void
{
var nX1:Number = MCBallA.x;
var nY1:Number = MCBallA.y;
var nDistX:Number = MCBallB.x - nX1;
var nDistY:Number = MCBallB.y - nY1;
var nDistance:Number = Math.sqrt ( nDistX * nDistX + nDistY * nDistY );
var nRadiusA:Number = MCBallA.width/2;
var nRadiusB:Number = MCBallB.width/2;
//var nRadius:Number = 10;
var nNormalX:Number = nDistX/nDistance;
var nNormalY:Number = nDistY/nDistance;
var nMidpointX:Number = ( nX1 + MCBallB.x )/2;
var nMidpointY:Number = ( nY1 + MCBallB.y )/2;
MCBallA.x = nMidpointX - nNormalX * nRadiusA;
MCBallA.y = nMidpointY - nNormalY * nRadiusA;
MCBallB.x = nMidpointX + nNormalX * nRadiusB;
MCBallB.y = nMidpointY + nNormalY * nRadiusB;
var nVector:Number = ( ( MCBallA.nSpeedX - MCBallB.nSpeedX ) * nNormalX )+ ( ( MCBallA.nSpeedY - MCBallB.nSpeedY ) * nNormalY );
var nVelX:Number = nVector * nNormalX;
var nVelY:Number = nVector * nNormalY;
MCBallA.nSpeedX -= nVelX;
MCBallA.nSpeedY -= nVelY;
MCBallB.nSpeedX += nVelX;
MCBallB.nSpeedY += nVelY;
}
//just test blue ball
/* stage.addEventListener(Event.ENTER_FRAME,test);
function test(oly:Event) {
if(the_kall.hitTestObject(keko)){
zacma.text="llj";
}
}*/
stop();
来源:https://stackoverflow.com/questions/44465799/how-set-for-collision-with-other-balls-while-ball-is-growing