问题描述
|
我正在学习AS3,并且正在尝试建立一些互动关系,以便在舞台上摆出一个正方形。它只需要停留在x轴上即可向左或向右抛出。
我发现了很多涉及物理学的教程。我不需要那么复杂的东西。对于我的游戏,只要您单击正方形并稍稍扔下它,无论扔动作有多困难,正方形都将始终从舞台上抛出,具体取决于鼠标的方向。
我脑子里有种想法,即可以通过动画剪辑中的补间(因为只需要向左或向右)来实现“投掷”的感觉,视鼠标的方向而激活它。
如果这是一个基本问题,我深表歉意,我不知道如何开始。请帮忙!
解决方法
尝试将其用作要抛出的对象的基类。
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
public class ThrowableObject extends Sprite
{
// properties
public var yv:Number = 0;
public var xv:Number = 0;
private var _grabbed:Boolean = false;
private var _gy:int = 0;
private var _gx:int = 0;
private var ox:int = 0;
private var oy:int = 0;
/**
* Constructor
*/
public function ThrowableObject()
{
addEventListener(Event.ADDED_TO_STAGE,_init);
}
/**
* Called on dispatch of Event.ADDED_TO_STAGE
* @param e Event.ADDED_TO_STAGE
*/
private function _init(e:Event):void
{
addEventListener(Event.ENTER_FRAME,_handle);
addEventListener(MouseEvent.MOUSE_DOWN,_handleClick);
stage.addEventListener(MouseEvent.MOUSE_UP,_handleRelease);
}
/**
* Called on dispatch of Event.ENTER_FRAME
* @param e Event.ENTER_FRAME
*/
private function _handle(e:Event):void
{
ox = x;
oy = y;
if(_grabbed)
{
x = parent.mouseX - _gx;
y = parent.mouseY - _gy;
}
else
{
x += xv;
y += yv;
}
}
/**
* Called on dispatch of MouseEvent.MOUSE_DOWN
* @param e MouseEvent.MOUSE_DOWN
*/
private function _handleClick(e:MouseEvent):void
{
grabbed = true;
parent.addChild(this);
}
/**
* Called on dispatch of MouseEvent.MOUSE_UP
* @param e MouseEvent.MOUSE_UP
*/
private function _handleRelease(e:MouseEvent):void
{
grabbed = false;
}
/**
* Sets grabbed
* @param val Boolean representing value to set grabbed as
*/
protected function set grabbed(bool:Boolean):void
{
_grabbed = bool;
if(_grabbed)
{
_gx = mouseX;
_gy = mouseY;
}
else
{
xv = x - ox;
yv = y - oy;
}
}
}
}