我想知道在触摸物体时如何阻止玩家。我在这里设置了动作,但是在触摸物体时我无法找到让玩家正常停止的方法。
播放器Class
中我的播放器移动代码:
这是按下按键时的事件侦听器。按下时Boolean
值变为true。
public function onKeyDown(event:KeyboardEvent):void
{
if (event.keyCode == Keyboard.D)
{
isRight = true;
}
if (event.keyCode == Keyboard.A)
{
isLeft = true;
}
if (event.keyCode == Keyboard.W)
{
isUp = true;
}
if (event.keyCode == Keyboard.S)
{
isDown = true;
}
}
这是未按下键时的事件侦听器。未按下时Boolean
值变为false。
private function onKeyUp(event:KeyboardEvent):void
{
if (event.keyCode == Keyboard.D)
{
isRight = false;
}
if (event.keyCode == Keyboard.A)
{
isLeft = false;
}
if (event.keyCode == Keyboard.W)
{
isUp = false;
}
if (event.keyCode == Keyboard.S)
{
isDown = false;;
}
}
这是输入框架,vx
和vy
是int
变量,未按下按键时为0,但按下按键时它们会改变值。 vx
和vy
每帧都会添加到玩家的x
和y
,但当它们为0时,玩家将无法移动。
private function onEnterFrame(event:Event):void
{
_vx = 0;
_vy = 0;
if (isRight)
{
_vx = 5;
}
if (isLeft)
{
_vx = -5;
}
if (isUp)
{
_vy = -5;
}
if (isDown)
{
_vy = 5;
}
x += _vx;
y += _vy;
}
答案 0 :(得分:1)
添加另一个条件&在检查 onEnterFrame 中的键状态的条件后,将增量器_vx或_vy(或两者)设置为0。
if(player.hitTestObject(object)){
_vx = 0;
_vy = 0;
}
答案 1 :(得分:1)
您不需要有很多条件,请看一下这个例子:
_keys = new Object();
_keys[Keyboard.D] = false;
_keys[Keyboard.A] = false;
_keys[Keyboard.W] = false;
_keys[Keyboard.S] = false;
this.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyInteraction);
this.stage.addEventListener(KeyboardEvent.KEY_UP, keyInteraction);
//---Key events
function keyInteraction(evt:KeyboardEvent){
if( _keys.hasOwnProperty(evt.keyCode) ){
_keys[evt.keyCode] = Boolean( evt.type == KeyboardEvent.KEY_DOWN );
}
}
当您按下或释放 A , W , D 或 S 键时,相应的_keys {{ 1}}属性从Object
更改为true
。
现在,false
部分。也许hitTest
方法比hitTestPoint
方法更好,因为最后一个方法只检查两个对象的边界是否接触。虽然hitestObject
方法会检查hitTestPoint
是否触及point
的任何像素。
当你每五个像素移动一个玩家时,有必要将玩家恢复到正确的位置,在这个位置它没有碰到物体(为此我已经做了Object
个循环)。取决于您的游戏设计,您需要更改代码,但这将指导您实现目的:
while
是maze
无法触及的对象:
玩家的getPoint方法
player
HitTest Code(Game Tick)
public function getPoint(corner:uint){
var point:Point = this.parent.localToGlobal( new Point( this.x, this.y ) );
if(corner == 1 || corner == 2) point.x += _w;
if(corner == 2 || corner == 3) point.y += _h;
return point;
}
答案 2 :(得分:0)
if(player.hitTestObject(object)){
// stop player
player.removeEventListener(Event.ENTER_FRAME, onEnterFrame);
}
或者你可以做相反的事情。 把它放在播放器的输入框内。