我想尝试在adobe flash as3上制作一个基本游戏以帮助学习碰撞,目的是让你通过交通。播放器(box_MC)必须使其到达另一侧,而其他对象在路径(周期)中具有碰撞检测。我通过进入循环动画片段并制作其他较小的循环来进行碰撞检测,如果你碰到它会产生碰撞。
碰撞错误在于如果玩家向下移动到它没有发生碰撞的周期
如果有更好的碰撞方法怎么办呢?
答案 0 :(得分:0)
hitTestObject()
和hitTestPoint()
并不是很好,这有点讽刺,当然,这些是大多数人在尝试实施时首先看到的东西碰撞。但是,我发现简单的数学(比如,非常简单)与同样简单的while()循环相结合是最好的方法。
我的工作是:
// the stage collision box
var mStageRect:Rectangle = new Rectangle(/*stage collision box properties here*/);
// create a Point object that holds the location of the bottom center of the player
var mPlayerBase:Point = new Point(player.x + (player.width / 2), player.y + player.height);
// call this function every frame through your game loop (onEnterFrame)
private function checkCollision(e:Event):void
{
// while the player's bottom center point is inside of the stage...
while (rectContainsPoint(mStageRect, mPlayerBase))
{
// decrement the player's y
player.y--;
// set gravity to 0
player.gravity = 0;
// set isOnGround to true
player.isOnGround = true;
}
}
// checks if a point is currently positioned within the bounds of a rectangle object using ultra simple math
private function rectContainsPoint(rect:Rectangle, point:Point):Boolean
{
return point.x > rect.x && point.x < rect.x + rect.width && point.y > rect.y && point.y < rect.y + rect.height;
}
这比hitTestObject / Point,imo更有效率,并且没有给我任何问题。