![]() |
|
||||||||||
|
|||||
|
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
|
strangedk, зачем же такие сложности ради двух шариков? Это же совсем не рационально.
Wadimir вот вам простой пример, если я правильно понял вашу задачу: import flash.display.Sprite; import flash.display.Graphics; import flash.events.*; function getBall(radius:Number):Sprite { var sprite:Sprite = new Sprite(); var gr:Graphics = sprite.graphics; gr.lineStyle(1,0); gr.beginFill(0xFF0000,0.5); gr.drawCircle(0,0,radius); gr.endFill(); return sprite; } var radius:int = 20; var ball_1:Sprite = getBall(radius); var ball_2:Sprite = getBall(radius); addChild(ball_1); addChild(ball_2); ball_1.x = ball_1.y = 250; ball_2.x = ball_2.y = 300; ball_1.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); ball_1.addEventListener(Event.ENTER_FRAME, updateBallPosition); var draging:Boolean = false; var startDragX:Number; var startDragY:Number; var ballVx:Number = 0; var ballVy:Number = 0; var ballFriction = 0.9;// or bounce ? function mouseDownHandler(e:MouseEvent):void { draging = true; ballVx = 0; ballVy = 0; startDragX = ball_1.mouseX; startDragY = ball_1.mouseY; stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); } function mouseMoveHandler(e:MouseEvent):void { ball_1.x = stage.mouseX - startDragX; ball_1.y = stage.mouseY - startDragY; e.updateAfterEvent(); } function mouseUpHandler(e:MouseEvent):void { draging = false; stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); checkCollision(); } function checkCollision():void { var dx:Number = ball_1.x - ball_2.x; var dy:Number = ball_1.y - ball_2.y; var dist:Number = Math.sqrt(dx * dx + dy * dy); var collisionDepth:Number = radius * 2 - dist; if (collisionDepth > 0) { var collisionAngle:Number = Math.atan2(dy,dx);// in radians ballVx = collisionDepth * Math.cos(collisionAngle); ballVy = collisionDepth * Math.sin(collisionAngle); } } function updateBallPosition(e:Event):void { if (draging) { return; } ball_1.x += ballVx; ball_1.y += ballVy; ballVx *= ballFriction; ballVy *= ballFriction; }
__________________
hauts.ru |
![]() |
Часовой пояс GMT +4, время: 13:12. |
|
|
« Предыдущая тема | Следующая тема » |
|
|