2

所以对于我的游戏,有一个快速移动的 Bullet 对象,其精灵大小为 5x5(大约)。以大约 30 的速度移动,它需要撞击一个相对较薄的 Enemy 物体,厚度只有大约 5 个像素。子弹以一定的固定距离穿过敌人而不会发生碰撞。

认为这是因为子弹移动得如此之快,以至于它恰好“跳过”了敌人,因此有规律的间隔。除了增加子弹或敌人的宽度外,有没有办法保证正确检测到碰撞?

4

6 回答 6

2

测试精灵跳跃的区域。

因此,对于碰撞盒,从子弹之前的最前位置一直测试到新的最前位置。所以如果子弹向右移动:

bullet.collisionbox.x = bullet.x
bullet.colisionbox.y = bullet.y
bullet.collisionbox.width = bullet.x + bullet.width + newpos.x
bullet.collisionbox.height = bullet.height

以图形方式:

>[____________>]

所以你没有增加子弹或敌人的宽度,只是子弹与敌人的碰撞检测。

于 2013-08-28T02:28:28.860 回答
0

在 Flash 中,我使用 HitTest 方法来测试一个对象是否与另一个对象发生碰撞,我认为您只需要添加一些代码来更改子弹的方向、速度或外观,当 Hit 变为真时,它就会通过如果在发生命中事件时没有更改其属性的代码,即使它命中/与它接触,该对象也是如此

或者

您可以测试子弹和移动对象的区域

IF (AreaofBullet=AreaofMovingobject)
Change The Appearance, properties of the bullets and the object
else
Do nothing

希望这可以帮助

谢谢 :)

于 2013-08-28T02:27:46.880 回答
0

您可以更改碰撞框,但最终您会想要使用碰撞线,因为方向可能不同。(如果没有,那么无论如何你都可以使用碰撞盒)

始终将碰撞线指向子弹所在的位置,以免它看起来像是在被摧毁之前穿过了物体。使用具有速度距离的方向度数来执行此操作。

您将希望取消任何碰撞检测方法,并仅使用适合您情况的方法来保持高效......无论如何。

于 2014-01-16T15:18:18.217 回答
0

你的问题是你的子弹移动得太快了。子弹实际上并没有在太空中移动。因此,如果您在游戏循环中每次将子弹的 x 速度设置为 5,则子弹将重绘 5 个像素。如果子弹的速度是 30,那么它会重新绘制 30 个像素,而实际上并没有穿过这些像素。如果敌人在两个位置之间,子弹将被抽出,子弹永远不会碰撞。

考虑一下。你的敌人在位置 (5, 5) 并且是一个 5x5 的正方形。您的子弹来自 (0, 7) 的位置。并且是 1 像素大。如果您的子弹以 20 像素的速度沿 x 方向行进,则子弹将在 (0, 7) 处绘制,然后在 (20, 7) 处绘制。这些位置都不会与你的敌人相交。

我的建议是减慢你的子弹或调整子弹精灵的大小。子弹精灵仍然可以是一个小颗粒,你可以让精灵的其余部分保持透明。有点像让你的子弹更大的碰撞箱。

希望这可以帮助 :)

于 2013-10-14T17:22:39.040 回答
0

这个问题有很多解决方案,比如:

a) 使用move_contact_...移动子弹的函数

lengthdir_b)使用功能和手动碰撞检查在循环中移动子弹,例如:

var i;
for (i = sprite_width; i <= speed; i += sprite_width)
{
   if place_meeting(x + lengthdir_x(i,direction), y + lengthdir_y(i,direction), o_wall) // is a wall in this position?
   {
       x += lengthdir_x(i, direction); // moving to position of the collision
       y += lengthdir_y(i, direction);
       event_perform(ev_collision, o_wall); // call collision event 
   }
}

c)collision_line在位置改变后使用,比如if collision_line(x, y, xprevious, yprevious, obj, false, true)!=noone { ... }

和许多其他...

于 2013-08-28T03:12:03.017 回答
0

您可以将子弹的速度降低到 4 或更低,以确保检测到碰撞。此外,您可以在末端后面增加子弹的碰撞遮​​罩,而不会使精灵变大。将子弹的遮罩宽度加倍可以使子弹的最大速度为 9。

于 2013-08-29T13:00:03.010 回答