用线命中测试

时间:2014-12-02 00:27:47

标签: actionscript-3 flash actionscript adobe flash-cs6

所以我正在制作一个平台游戏风格的游戏,并试图用一条线进行命中测试,如果这有任何意义的话。现在我有一个移动的物体,每当你向右移动时,如果右下方或右上方击中了你停止移动的世界。同样的事情设置左。然而,如果“世界”动画片段太小并且没有击中任何一个点,你可以直接通过它。所以我需要在这些点之间建立一条实线,然后使用hitTest吗?

else if (keyIsDown(Keyboard.RIGHT))
        {
            //dude.gotoAndStop("right");
            //obj.scaleX = 1;
            for (i = 0; i<speedX; i++)
            {
                obj.x++;
                dude.ball.rotation++;
                if (status == "ground")
                {
                    dude.height+= 0.05;
                    dude.width += 0.05;

                }
                    if (world.hitTestPoint(obj.x + obj.width/8 - obj.width/2, obj.y - obj.height/4,true) || world.hitTestPoint(obj.x + obj.width/2,obj.y - obj.height + obj.height/4,true))
//this is what dictates the points that hit, trying to make it test a hit with a solid line between the 2 points.
                    //if (world.hitTestObject(dude.hitD))
                    {

                        dude.ball.rotation--;


    obj.x--;
                    break;
                }
            }
        }
        dude.gotoAndStop(1);

    }

行代码我尝试添加

else if (keyIsDown(Keyboard.RIGHT))
        {
            //dude.gotoAndStop("right");
            //obj.scaleX = 1;
            for (i = 0; i<speedX; i++)
            {
                obj.x++;
                dude.ball.rotation++;
                myShape.graphics.moveTo(obj.x + obj.width/8 - obj.width/2,obj.y - obj.height/4); 
                myShape.graphics.lineTo(obj.x + obj.width/2, obj.y - obj.height + obj.height/4);
                // The number in obj.y-4 affects the climbing ability
                if (status == "ground")
                {
                    //dude.height+= 0.05;
                    //dude.width += 0.05;
                }


                if (obj.hitTestObject(myShape))
                {
                    dude.ball.rotation--;
                    obj.x--;
                    break;
                }
            }
        }
        dude.gotoAndStop(1);

    }

1 个答案:

答案 0 :(得分:1)

据我所知,你正试图制作一个玩家控制球的平台游戏。 所以你需要进行圆形碰撞检测,至少是左右碰撞。

在实施任何类型的程序时,特别是对于经常执行的部分,例如碰撞检测,您应该始终寻找快捷方式。

我可以建议几种方法;

  1. 这种情况的快捷方式可能是让一个看不见的盒子形状比你的球略小,并用它进行碰撞检测。当然,它会降低视觉质量;例如当你接近适合你物体左下角的低边时,你的物体会在早期撞击,而不会在视觉上碰到挡块。

  2. 或者您只是忽略了效果并增加了圈子周围的点数。 即使你可以编写一个算法,以一定的间距在圆的外边缘找到位置,并检查它们是否有任何碰撞。这样您的碰撞检测就不会错过小物体。

  3. 但是,这是一种更好的方法。您可以实现两级碰撞检测。 首先是你现在拥有的,第二个是一个看不见的盒子,它的球高度相同,宽度小到足以使它的边缘落在你的主要检测点之后。 通过这种方式,二次检测不会遗漏任何内容,但只有当主要检测无法捕获到之间或之下的任何内容时,它才会起作用。