Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 07.06.2012, 16:00
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 4  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
strangedk, зачем же такие сложности ради двух шариков? Это же совсем не рационально.

Wadimir вот вам простой пример, если я правильно понял вашу задачу:
Код AS3:
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.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 13:12.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.