【发布时间】:2014-12-18 19:08:21
【问题描述】:
我正在创建 2D 平台游戏。我的碰撞有问题。当我的角色命中站在平台顶部时,它将在那里停留 2.5 秒,然后穿过所有其他平台落到一楼。我认为这与我的重力功能和碰撞功能无法正常协同工作有关。我真的想不出任何帮助将不胜感激。
这 = fireboy1
这是我的角色类的重力代码:
public var gravity:int = 0;
public var floor:int = 461;
public function adjust():void
{
//applying gravity
this.y += gravity;
if(this.y + this.height <floor)
gravity++;
else
{
gravity = 0;
this.y = floor - this.height;
}
这是我在主类中的碰撞代码:
//collision detection of platform1
public function platform1Collision():void
{
if(fireboy1.hitTestObject(Platform1))
{
if(fireboy1.y > Platform1.y)
{
fireboy1.y = Platform1.y + Platform1.height;
}
else
{
fireboy1.y = Platform1.y - fireboy1.height;
}
}
【问题讨论】:
-
尝试做:if((this.y + this.height)
-
根本没有改变任何东西:(
-
只是一个切线,但为此使用物理框架要容易得多。像 box2d 等。
adjust()和platform1Collision()是否每帧都运行?理想情况下,它们应该具有相同的功能,如果发生碰撞,您不应该运行重力 (this.y += gravity)。更新您的问题以包含您的代码范围(例如,第一个块中的this是什么,以及它与第二个代码块有何关系) -
firebox1是否有左上角的注册点 (0,0)?如果是这样,检查if(fireboy.y > Platform1.y)似乎很奇怪,因为这意味着播放器的顶部必须超过平台的顶部。 -
啊,好吧,这仍然不能阻止我的播放器在 2 秒后从平台上掉下来的问题
标签: actionscript-3 collision-detection flashdevelop gravity