Actionscript 3 AS3 hitTestObject不工作
我在制作闪光灯,在键盘上移动一个圆圈,然后制作一个击中墙壁的闪光灯。 但方法“hitTestObject”不起作用 如何解决这个问题Actionscript 3 AS3 hitTestObject不工作,actionscript-3,Actionscript 3,我在制作闪光灯,在键盘上移动一个圆圈,然后制作一个击中墙壁的闪光灯。 但方法“hitTestObject”不起作用 如何解决这个问题 import flash.events.KeyboardEvent; import flash.events.Event; stage.addEventListener(KeyboardEvent.KEY_DOWN,atKeydown); stage.addEventListener(KeyboardEvent.KEY_UP,atKeyup); functio
import flash.events.KeyboardEvent;
import flash.events.Event;
stage.addEventListener(KeyboardEvent.KEY_DOWN,atKeydown);
stage.addEventListener(KeyboardEvent.KEY_UP,atKeyup);
function atKeydown(e :KeyboardEvent) :void
{
if(e.keyCode == 38) stage.addEventListener(Event.ENTER_FRAME,enterYUp);
if(e.keyCode == 40) stage.addEventListener(Event.ENTER_FRAME,enterYDown);
if(e.keyCode == 37) stage.addEventListener(Event.ENTER_FRAME,enterXLeft);
if(e.keyCode == 39) stage.addEventListener(Event.ENTER_FRAME,enterXRight);
}
function atKeyup(e :KeyboardEvent) :void
{
if(e.keyCode == 38) stage.removeEventListener(Event.ENTER_FRAME,enterYUp);
if(e.keyCode == 40) stage.removeEventListener(Event.ENTER_FRAME,enterYDown);
if(e.keyCode == 37) stage.removeEventListener(Event.ENTER_FRAME,enterXLeft);
if(e.keyCode == 39) stage.removeEventListener(Event.ENTER_FRAME,enterXRight);
}
function enterYUp(e :Event) :void
{
ball.y -= 10;
}
function enterYDown(e :Event) :void
{
ball.y += 10;
}
function enterXLeft(e :Event) :void
{
ball.x -= 10;
}
function enterXRight(e :Event) :void
{
ball.x += 10;
}
if(ball.hitTestObject(wall) == true) trace("!!!!");
函数输入(e:事件):无效
{
var bool=checkHit(“y”,-10);//每帧检查一次命中,返回一个布尔值(参见下面的函数)
执行(bool,“y”,-10);//移动是基于布尔值执行的
}
函数enterYDown(e:事件):无效
{
var bool=checkHit(“y”,+10);//您可以发送“y”属性,以及它想要去的地方。
执行(布尔,y,+10);
}
函数enterXLeft(e:事件):无效
{
var bool=校验命中(“x”,-10);
执行(布尔,“x”,-10);
}
函数enterXRight(e:事件):无效
{
var bool=校验命中(“x”、+10);
执行(布尔,“x”,-10);
}
函数checkHit(_prop,_num):布尔值
{
//此单一功能将在每一帧运行,比较球的“预测位置”
如果((球[_道具]+_数量)带有hitTest的行在任何事件处理程序之外,因此它只执行一次:在应用程序启动时。然后你只移动球而不检查任何内容。ofc,它不是这样工作的。为了使它工作,你需要在每次移动球时检查hitTest。虽然它被接受,但这个答案严重缺乏:代码格式不正确ed显示出对基本数据类型的理解很差,整个答案没有抓住问题的关键,除此之外,您还建议不要使用hitTest,因为您看到它做的事情超出了您的知识和技能范围。
function enterYUp(e :Event) :void
{
var bool = checkHit("y", -10); // each frame checks for a hit, returns a Boolean (see the function below)
carryOut(bool, "y", -10); // the movement is carried out based on the Boolean
}
function enterYDown(e :Event) :void
{
var bool = checkHit("y", +10); // you can send the "y" property, and where it wants to go.
carryOut(bool, "y", +10);
}
function enterXLeft(e :Event) :void
{
var bool = checkHit("x", -10);
carryOut(bool, "x", -10);
}
function enterXRight(e :Event) :void
{
var bool = checkHit("x", +10);
carryOut(bool, "x", -10);
}
function checkHit(_prop, _num):Boolean
{
// This single function will run every frame, comparing the balls 'predicted position'
if((ball[_prop] + _num) <= _numCheck)
{
// i might use hitTestPoint instead, but I hate using hitTestObject... it can act weird sometimes.
return true;
}
else
{
return false;
}
}
function carryOut(bool, _prop,_num):void
{
if(bool)
{
trace("hit");
}
else
{
// if the Boolean returned false
// ball[_prop] is ball.x or ball.y depending on if you sent "x" or "y".
// it will ADD the _num you sent, so adding -10 is the same as subtracting.
ball[_prop] += _num;
}
}