![]() |
|
||||||||||
|
|||||
|
Цитата:
|
|
|||||
|
Регистрация: Sep 2010
Адрес: Moscow
Сообщений: 473
|
а как это сделать лучше?
|
|
|||||
|
Регистрация: Sep 2010
Адрес: Moscow
Сообщений: 473
|
ну допустим, тогда в одну сторну он будет поворачиваться хорошо, а в другую хрен знает как!фигня получиться!
|
|
|||||
|
Упрощенная трехвекторная физика для самолета. Код примерный и нуждается в дополнительной настройке и призван просто показать суть метода. Для просторы наблюдения самолет фиксирован по оси х.
package { import flash.display.Graphics; import flash.display.Shape; import flash.display.Sprite; import flash.events.Event; import flash.events.KeyboardEvent; import flash.geom.Point; import flash.ui.Keyboard; [SWF(width="640", height="480")] public class airplane extends Sprite { private static const TO_RADIAN:Number = Math.PI / 180; //тяга двигателя private var propellingForce:Point; //гравитация private var gravitation:Point; //подъемная сила private var lift:Point; //суммарный вектор private var force:Point; private var upFlag:Boolean = false; private var downFlag:Boolean = false; private var leftFlag:Boolean = false; private var rightFlag:Boolean = false; //самолет private var plane:Sprite; //рисунок самолета private var planeGraphics:Sprite; //отображение векторов private var vectorsGraphics:Sprite; public function airplane() { //начальная скорость 10 propellingForce = new Point(10, 0); //сила гравитации 10 gravitation = new Point(0, 10); plane = new Sprite(); plane.x = 30 plane.y = stage.stageHeight * .5; planeGraphics = new Sprite(); drawPlane(planeGraphics.graphics); plane.addChild(planeGraphics); vectorsGraphics = new Sprite(); plane.addChild(vectorsGraphics); addChild(plane); addEventListener(Event.ENTER_FRAME, enterFrameHandler); stage.addEventListener(KeyboardEvent.KEY_DOWN, keyboardHandler); stage.addEventListener(KeyboardEvent.KEY_UP, keyboardHandler); } private function drawPlane(gr:Graphics):void { gr.beginFill(0x694246); gr.drawRect(0, 0, 30, 10); gr.endFill(); } private function enterFrameHandler(event:Event):void { if (upFlag) { planeGraphics.rotation -=2; } if (downFlag) { planeGraphics.rotation +=2; } if (rightFlag) { propellingForce.normalize(propellingForce.length * 1.02); } if (leftFlag) { propellingForce.normalize(propellingForce.length * 0.98); } //поворачиваем вектор тяги по оси самолета propellingForce = Point.polar(propellingForce.length, planeGraphics.rotation * TO_RADIAN); /*поворачиваем вектор подъемной силы перпендикулярно оси самолета, длина вектора является проекцией тяги на ось x (такое вот нехилое упрощение) */ lift = Point.polar(propellingForce.x, planeGraphics.rotation * TO_RADIAN - Math.PI * .5); //считаем суммарный вектор force = propellingForce.add(gravitation).add(lift); plane.y += force.y; //раскомментировать для полета //plane.x += force.x; drawVectors(); } private function drawVectors():void { var gr:Graphics = vectorsGraphics.graphics; gr.clear(); var liftPos:Point = vectorsGraphics.globalToLocal(lift); var gravitationPos:Point = vectorsGraphics.globalToLocal(gravitation); var propellingPos:Point = vectorsGraphics.globalToLocal(propellingForce); var forcePos:Point = vectorsGraphics.globalToLocal(force); //подъемная сила gr.lineStyle(1, 0xFF0000); gr.lineTo(lift.x, lift.y); gr.moveTo(0,0); gr.lineStyle(1, 0x00FF00); gr.lineTo(gravitation.x, gravitation.y); gr.moveTo(0,0); gr.lineStyle(1, 0x0000FF); gr.lineTo(propellingForce.x, propellingForce.y); gr.moveTo(0,0); gr.lineStyle(2, 0xFFFF00); gr.lineTo(force.x, force.y); } private function keyboardHandler(event:KeyboardEvent):void { var value:Boolean = event.type == KeyboardEvent.KEY_DOWN; switch (event.keyCode) { case Keyboard.UP: upFlag = value; break; case Keyboard.DOWN: downFlag = value; break; case Keyboard.LEFT: leftFlag = value; break; case Keyboard.RIGHT: rightFlag = value; break; } } } } |
|
|||||
|
Регистрация: Sep 2010
Адрес: Moscow
Сообщений: 473
|
у меня что то не получается его запустить(
|
|
|||||
|
Так и думал, что следующим вопросом будет как это скомпилировать.
Судя по-всему вы компилируете в Flash Professional CSx. Создайте новый документ, создайте рядом с ним текстовый файл airplane.as. Скопируйте код в airplane.as. Подключите airplane.as как documentClass к вашему документу. |
|
|||||
|
Регистрация: Sep 2010
Адрес: Moscow
Сообщений: 473
|
как домой приеду выложу свой исходник кода,посмотрите что да как дописать
|
![]() |
![]() |
Часовой пояс GMT +4, время: 20:59. |
|
|
« Предыдущая тема | Следующая тема » |
|
|