我正在使用动作脚本3进行Flash游戏。它就像一个迷宫游戏。我们有一条船和绳索创造了这条路。我遇到了碰撞问题。在让船穿过路径时,它在X轴上正确地碰撞到绳索。 Y轴,它的工作正常,但当它碰到任何角落(X和Y轴相遇)时,它只是越过绳索。 这是我的碰撞脚本。
if (leftArrow)
{
boat.x -= speed;
if( rope.hitTestPoint(boat.x,boat.y,true) ){
boat.x += 5;
}
if( rope.hitTestPoint(boat.x,boat.y+height,true) ){
boat.x += 5;
}
}
else if (rightArrow)
{
boat.x += speed;
if( rope.hitTestPoint(boat.x+boat.width,boat.y,true) ){
boat.x -= 5;
}
if( rope.hitTestPoint(boat.x+boat.width,boat.y+height,true) ){
boat.x -= 5;
}
}
else if (upArrow)
{
boat.y -= speed;
if( rope.hitTestPoint(boat.x,boat.y,true) ){
boat.y += 5;
}
if( rope.hitTestPoint(boat.x+boat.width,boat.y,true) ){
boat.y += 5;
}
}
else if (downArrow)
{
boat.y += speed;
if( rope.hitTestPoint(boat.x,boat.y+boat.height,true) ){
boat.y -= 5;
}
if(rope.hitTestPoint(boat.x+boat.width,boat.y+boat.height,true) ){
boat.y -= 5;
}
}
答案 0 :(得分:0)
hitTestPoint很适合查找某个点是否在某个对象中,但是当它用于类似游戏的情况时,它会缩短,因为你有很多点来检查你是否正在处理不同的形状和移动程度。解决方案是在hitTestObject中。它的工作方式类似于hitTestPoint,除了您要比较显示对象而不是单个点。但有一个问题:您正在比较边界框。诀窍是在对象的图形(在你的情况下是船)中创建一个包含尽可能多的并且不会引起对玩家没有意义的碰撞的alpha 0的框,你称之为'命中' ',然后对此进行碰撞检测。这里有一个很好的解释:http://bit.ly/Oj2ZCe
一个注意事项:所以在他们的例子中,船的那个点离隐形的“命中”框很远。你可以做些什么来进一步改进它是将它与hitTestPoint函数结合起来,并对任何奇怪的尖头部分进行额外的碰撞检测。
这就是它的要点。这会将你的代码减少到这样:
var rememberX:Number = boat.x;
var rememberY:Number = boat.y;
if (leftArrow)
{
boat.x -= speed;
}
else if (rightArrow)
{
boat.x += speed;
}
else if (upArrow)
{
boat.y -= speed;
}
else if (downArrow)
{
boat.y += speed;
}
if(rope.hitTestObject(boat.hit))
{
boat.x = rememberX;
boat.y = rememberY;
}