所以我正在制作一个平台游戏风格的游戏,并试图用一条线进行命中测试,如果这有任何意义的话。现在我有一个移动的物体,每当你向右移动时,如果右下方或右上方击中了你停止移动的世界。同样的事情设置左。然而,如果“世界”动画片段太小并且没有击中任何一个点,你可以直接通过它。所以我需要在这些点之间建立一条实线,然后使用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);
}
答案 0 :(得分:1)
据我所知,你正试图制作一个玩家控制球的平台游戏。 所以你需要进行圆形碰撞检测,至少是左右碰撞。
在实施任何类型的程序时,特别是对于经常执行的部分,例如碰撞检测,您应该始终寻找快捷方式。
我可以建议几种方法;
这种情况的快捷方式可能是让一个看不见的盒子形状比你的球略小,并用它进行碰撞检测。当然,它会降低视觉质量;例如当你接近适合你物体左下角的低边时,你的物体会在早期撞击,而不会在视觉上碰到挡块。
或者您只是忽略了效果并增加了圈子周围的点数。 即使你可以编写一个算法,以一定的间距在圆的外边缘找到位置,并检查它们是否有任何碰撞。这样您的碰撞检测就不会错过小物体。
但是,这是一种更好的方法。您可以实现两级碰撞检测。 首先是你现在拥有的,第二个是一个看不见的盒子,它的球高度相同,宽度小到足以使它的边缘落在你的主要检测点之后。 通过这种方式,二次检测不会遗漏任何内容,但只有当主要检测无法捕获到之间或之下的任何内容时,它才会起作用。