|
|
|||||
Регистрация: Nov 2009
Сообщений: 176
|
отталкивание шара из шара
Добрый день!
Имеется на сцене два круглых мувика. Захватываем один мувик на курсор и тянем на другой при отпускании мышки второй должен оттолкнуть первый. Как можно реализовать такое отталкивание? |
|
|||||
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
|
Это можно реализовать программированием захвата мувика курсором, программированием его движения и программированием столкновения и отскока мувиков.
Ну а если серьезно, покажите код, который у вас есть и объясните, что не получается.
__________________
hauts.ru |
|
|||||
Используйте физический движок Box2D или Nape
Лично мне больше нравится Box2D. 1. Создаете мир с нулевой гравитацией, два динамических круга c1 и c2. 2. Физические объекты привязываете к графике через свойство UserData 3. Привязываете графику к событиям мыши 4. При отпускании кнопки мыши рассчитываете силу импульса 5. Придаете импульс физическому объекту c1 с помощью метода ApplyImpulse 6. enjoy. остальное сделает Box2D
__________________
adobe AS3 manual |
|
|||||
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 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 |
|
|||||
Цитата:
Добавлено через 3 минуты Насколько я понял - задача как в бильярде, чтобы ведущий шар мог ударить какой-то другой.
__________________
adobe AS3 manual |
|
|||||
Регистрация: Nov 2009
Сообщений: 176
|
там будет именно два шарика.
Hauts, большое спасибо!!! |
Часовой пояс GMT +4, время: 14:40. |
|
« Предыдущая тема | Следующая тема » |
|
|