Flash actionscript 3墙壁碰撞检测
我正在做一个简单的flash游戏,我试图在给定的水平上防止化身撞到墙壁,这是我写的代码,它足够简单Flash actionscript 3墙壁碰撞检测,flash,actionscript-3,actionscript,Flash,Actionscript 3,Actionscript,我正在做一个简单的flash游戏,我试图在给定的水平上防止化身撞到墙壁,这是我写的代码,它足够简单 var hitWall:Boolean = checkWallHitlvl1(); if ( downKeyIsBeingPressed ) { avatar.moveABit( 0, 1 ); if(hitWall) {
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你可以使用
localToGlobal
(以中心点为例)在测试之前,比较一下从阿凡达中心到这一点的方向。如何处理这个值-这取决于你的墙的形状。如果它们是正方形的,只需在相反的方向撞一下播放器。如果它们很长,或者可能是凹形的……做数学计算,甚至重新设计墙来简化事情。你可能想使用Flixel(www.Flixel.org)为此,它是一个很好的轻量级Actionscript库,可以为您处理这类事情,或者如果您想自己处理冲突,它会为您提供hitFromLeft()、hitFromRight()等(我可能有错误的函数名,但您知道了。)我要做的是保留未命中时的位置
if ( downKeyIsBeingPressed )
{
avatar.moveABit( 0, 1 );
if(hitWall)
{
avatar.moveTo(safeX, safeY);
} else {
safeX = x;
safeY = y;
}
你的代码有缺陷。移动发生,然后测试运行,如果它没有通过你的测试,然后不再移动。这里的缺陷是,移动发生,然后测试,所以化身已经在墙上。你需要先移动,然后测试,如果失败,将其移回。我会检查这一点,看看它是否有效,谢谢你的建议=Dit有效,但它没有那么顺利正如我所料,你看,即使我撞到墙后后退了一步,actionscrtipt的hitTestObject仍然返回true,所以我必须后退5步才能让它工作,即使如此,它还是有点不稳定,看起来不太平滑……还有其他建议吗?谢谢你的建议=)这实际上相当不错,我在修复中做了类似的操作,但这更简单……我认为它应该可以正常工作,thanx m8=)