是的,我正在尝试实施这个游戏,
答案 0 :(得分:1)
该游戏使用非常简单的物理;基本上只是在按住鼠标时从velocity
属性中减去一个值,否则添加到它。
直升机的y
增加了velocity
(一旦velocity
低于0,就会上升)。这也会导致您看到的逐渐加速/减速效果。
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);
}
}
}
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;
}
}
}
答案 1 :(得分: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个单位。