Показать сообщение отдельно
Старый 25.03.2012, 16:35
Astraport вне форума Посмотреть профиль Отправить личное сообщение для Astraport Найти все сообщения от Astraport
  № 1  
Ответить с цитированием
Astraport
 
Аватар для Astraport

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
По умолчанию Перемещение объекта в пределах круглой области

Перемещаю акселерометром (это не важно, тоже самое для drag) объект. Нужно чтобы он не выходил за пределы окружности с заданным центром и радиусом. Сейчас вычисляю расстояние до центра.

Код AS3:
private const СX:Number = 200;
private const СY:Number = 200;
private const RADIUS:int = 50;
private var accelerometer:Accelerometer;        
private var xSpeed:Number = 0;
private var ySpeed:Number = 0;
 
if (Accelerometer.isSupported) {
	accelerometer = new Accelerometer();
	accelerometer.addEventListener(AccelerometerEvent.UPDATE, accUpdateHandler);
	addEventListener(Event.ENTER_FRAME, startDragging);
}
 
private final function accUpdateHandler(event:AccelerometerEvent):void  {
	xSpeed -= event.accelerationX * 10;
	ySpeed += event.accelerationY * 10;
}
 
protected function startDragging(event:Event):void  {
	event.stopPropagation();
	var newX:Number = ball.x + xSpeed;
	var newY:Number = ball.y + ySpeed;
 
	if (DistanceTwoPoints(newX, СX,  newY, СY) > RADIUS){
ball.x = newX; //Вот в этой части никак не соображу как правильно задать координаты шарика
ball.y = newY;
xSpeed = 0;
ySpeed = 0;
	} else {
ball.x += xSpeed*20;
ball.y += ySpeed*20;
	}
}
 
protected function DistanceTwoPoints(x1:Number, x2:Number,  y1:Number, y2:Number): Number {
				var dx:Number = x1-x2;
				var dy:Number = y1-y2;
				return Math.sqrt(dx * dx + dy * dy);
			}