我正在制作一个简单的Flash游戏并试图阻止头像在给定级别上击中墙壁,这是我写的代码,它很简单
var hitWall:Boolean = checkWallHitlvl1();
if ( downKeyIsBeingPressed )
{
avatar.moveABit( 0, 1 );
if(hitWall)
{
avatar.moveABit( 0, -5);
}
}
else if ( upKeyIsBeingPressed )
{
avatar.moveABit( 0, -1 );
if(hitWall)
{
avatar.moveABit( 0, 5 );
}
}
else if ( leftKeyIsBeingPressed )
{
avatar.moveABit( -1, 0 );
if(hitWall)
{
avatar.moveABit( 5, 0 );
}
}
else if ( rightKeyIsBeingPressed )
{
avatar.moveABit( 1, 0 );
if(hitWall)
{
avatar.moveABit( -5, 0 );
}
}
hitWall检查化身是否击中了关卡的墙壁,这段代码的问题是,即使我说从右边撞墙,并且我试图向左移动,我不能因为hitWall不检查从哪里墙被击中,我的问题是有没有办法让这项工作没有实际需要弄清楚玩家在哪个方向撞到给定的墙,我试图将头像自动向左移动,如果他从右边击中它,但它没那么好的工作......
有什么建议吗?
thanx = D
EDIT1:我编辑了代码,它现在正常工作,但它看起来有点生涩,因为我必须倒退5个像素,不幸的是我不能倒退1个像素,因为flash的hitTestObject仍然返回true (checkWallHitLvl1()基本上使用hitTestObject来检查玩家是否碰壁),有什么建议吗?
EDIT2:我找到了一种方法来解决它,只需要运行一些更多的测试并确保它工作正常,如果它们全部通过我将发布代码,基本上我只是用了4布尔变量检查我撞到墙的方向,并从那里开始...... = D
答案 0 :(得分:3)
我所做的就是保持不被击中时的位置。
if ( downKeyIsBeingPressed )
{
avatar.moveABit( 0, 1 );
if(hitWall)
{
avatar.moveTo(safeX, safeY);
} else {
safeX = x;
safeY = y;
}
答案 1 :(得分:2)
您可能想要使用Flixel(www.flixel.org);它是一个很好的轻量级Actionscript库,可以为你处理这类事情,或者如果你想自己处理碰撞,它会给你hitFromLeft(),hitFromRight()等等(我可能有错误的函数名,但是你明白了。)
答案 2 :(得分:0)
您可以使用localToGlobal
(以中心点为例)获取墙的舞台坐标,并在测试前比较从头像中心到此点的方向。如何处理这个值 - 这取决于你的墙壁的形状。如果他们是正方形,只需稍微向相反方向撞击球员。如果他们很长,或者可能是凹陷的......做数学计算,甚至重新设计墙壁以简化事情。