0

对,我正在尝试实现这个游戏,

4

2 回答 2

1

该游戏使用非常简单的物理原理;基本上只是在按住鼠标时从属性中减去一个值velocity,否则添加到它。

直升飞机的y增加velocity(将要上升一次velocity低于 0)。这也会导致您看到的逐渐加速/减速效果。


示例代码:

Game.as(这将是您的文档类)。

package
{
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.MouseEvent;
    
    public class Game extends MovieClip
    {
        
        // Properties.
        private var _updating:Array = [];
        private var _mouseDown:Boolean = false;
        
        // Objects.
        private var _helicopter:Helicopter;
        
        
        /**
         * Constructor.
         */
        public function Game()
        {
            // Listeners.
            stage.addEventListener(Event.ENTER_FRAME, _update);
            stage.addEventListener(MouseEvent.MOUSE_DOWN, _mouseAction);
            stage.addEventListener(MouseEvent.MOUSE_UP, _mouseAction);
            
            
            // Helicopter.
            _helicopter = new Helicopter();
            stage.addChild(_helicopter);
        }
        
        
        /**
         * Mouse action manager.
         * @param e MouseEvent instance.
         */
        private function _mouseAction(e:MouseEvent):void
        {
            switch(e.type)
            {
                default: _mouseDown = false; break;
                case MouseEvent.MOUSE_DOWN: _mouseDown = true; break;
            }
        }
        
        
        /**
         * Update the game.
         * @param e Event instance.
         */
        private function _update(e:Event):void
        {
            _helicopter.update(_mouseDown);
        }
        
    }
}

直升机.as

package
{
    import flash.display.Sprite;
    
    public class Helicopter extends Sprite
    {
        
        // Properties.
        private var _velocity:Number = 0;
        
        
        /**
         * Constructor.
         */
        public function Helicopter()
        {
            // Temp graphics.
            graphics.beginFill(0x00FF00);
            graphics.drawRect(0, 0, 60, 35);
            graphics.endFill();
        }
        
        
        /**
         * Update the helicopter.
         * @param mouseDown Boolean representing whether the mouse is held down or not.
         */
        public function update(mouseDown:Boolean):void
        {
            if(mouseDown) _velocity -= 1;
            else _velocity += 1;
            
            y += _velocity;
        }
        
    }
}
于 2012-04-04T22:46:02.327 回答
0

我记得玩过那个游戏,所以我想我理解它实现的那种动作。以下是有关如何自己实现它的简要想法。

你需要的是一个简单的物理公式,这个简单的公式如下。

v = u+at;

对。这就是你的公式,其中 v = 最终速度 u = 初始速度 a = 加速度 t = 时间。

时间是你的每一步。每一步行进的距离可以使用以下公式计算

s = u*t+ (0.5 * a*t*t);

s = 以时间步长行驶的距离 u = 初始速度 t = 时间。a = 加速度(在您的情况下是重力 - 当您离开鼠标时会生效。)

每个进入帧你会看到鼠标是否按下,如果鼠标按下超过 20 帧,在第 20 帧之后加速度开始上升 1 个单位(你定义单位!)。

当您停止按住鼠标时,同样的逻辑也适用。20 帧后(或您定义的任何时间衰减!),加速度开始下降 1 个单位。

参考:http ://en.wikipedia.org/wiki/Equations_of_motion

于 2012-04-05T09:26:41.090 回答