Показать сообщение отдельно
Старый 22.10.2011, 19:56
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 14  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Своего почти добился :о)

Код AS3:
private function updateBody():void
		{
			if(!_lastPoint) //Если нет точки, куда лететь
				return;
			_body.SetAwake(true);
 
			//Вектор от центра самолетика до нужной точки
			var pointVec:b2Vec2 = b2Vec2.Make(_lastPoint.x - _body.GetPosition().x, _lastPoint.y - _body.GetPosition().y);
			//Угол между осью X и pointVec
			var pointAngle:Number = getAngle( _body.GetPosition().x, _body.GetPosition().y, _lastPoint.x, _lastPoint.y, true);
			//Угол поворота самолета
			var bodyAngle:Number = _body.GetAngle();
			//Вектор движения cамолетика 
			var vec:b2Vec2 = b2Vec2.Make(_speed * Math.cos(bodyAngle), _speed * Math.sin(bodyAngle));
 
			trace(toDegrees(pointAngle).toPrecision(5), toDegrees(bodyAngle).toPrecision(5), toDegrees(pointAngle-bodyAngle).toPrecision(5));
 
			var sign:int = 1;
			//Если самолетик не "смотрит" на точку, то поворачиваем его на _angleStep (pointVec и vec не сонаправленны)
			if(Math.abs(pointAngle-bodyAngle) > _angleStep)
				bodyAngle += _angleStep * sign;
			else 
			{
				//Доворачиваем самолетик
				bodyAngle = pointAngle;
				//TODO calc distance
				//_lastPoint = null;
			}
			redraw();
			_body.SetAngle(normAngle(bodyAngle));
			_body.SetLinearVelocity(vec);
 
		}
Проблема осталась только в sign, не могу придумать, как правильно менять знак, что бы самолет правильно поворачивал, сейчас если следующая точка, расположена против часовой стрелки от предыдущей, то самолет разворачивается по большой дуге.

Вот, что получилось
Исходник

Добавлено через 16 минут
[IMG]http://dl.************/u/6132064/plane_angle2.png[/IMG]
Вот картинка, как работает, сравните с предыдущей :о))
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.