Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash actionscript 3墙壁碰撞检测_Flash_Actionscript 3_Actionscript - Fatal编程技术网

Flash actionscript 3墙壁碰撞检测

Flash actionscript 3墙壁碰撞检测,flash,actionscript-3,actionscript,Flash,Actionscript 3,Actionscript,我正在做一个简单的flash游戏,我试图在给定的水平上防止化身撞到墙壁,这是我写的代码,它足够简单 var hitWall:Boolean = checkWallHitlvl1(); if ( downKeyIsBeingPressed ) { avatar.moveABit( 0, 1 ); if(hitWall) {

我正在做一个简单的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

你可以使用
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=)