libGosu / Chingu - 如何处理同时发生的碰撞?

时间:2013-09-02 01:44:31

标签: ruby 2d-games libgosu

我正在使用libGosu和Chingu进行简单的Asteroids重制。与原始的小行星类似,当子弹击中大型流星时,流星会分裂成两个较小的流星。当玩家实现武器升级时,它可以同时射击多个子弹。有时两颗子弹同时击中同一颗小行星,导致它分成四个较小的流星,而不是两个预期的流星。当有两个同时碰撞时,Chingu有没有办法取消其中一个碰撞?这就是我目前设置它的方式:

Bullet.each_collision(Meteor1) do |bullet, meteor|
  Explosion.create(:x => meteor.x, :y => meteor.y)
  Meteor2.create(:x => meteor.x, :y => meteor.y)
  Meteor2.create(:x => meteor.x, :y => meteor.y)
  meteor.destroy
  bullet.destroy
  @score += 100
  Sound["media/audio/explosion.ogg"].play(0.2)
end
Bullet.each_collision(Meteor2) do |bullet, meteor|
  Explosion.create(:x => meteor.x, :y => meteor.y)
  Meteor3.create(:x => meteor.x, :y => meteor.y)
  Meteor3.create(:x => meteor.x, :y => meteor.y)
  meteor.destroy
  bullet.destroy
  @score += 100
  Sound["media/audio/asplode.ogg"].play(0.2)
end
Bullet.each_collision(Meteor3) do |bullet, meteor|
  Explosion.create(:x => meteor.x, :y => meteor.y)
  meteor.destroy
  bullet.destroy
  @score += 100
  Sound["media/audio/asplode.ogg"].play(0.2)
end

当两颗子弹同时击中同一颗流星时,有没有办法省略不需要的额外流星的产生?

1 个答案:

答案 0 :(得分:0)

你需要在每个方块的末尾添加“break”,以防止在用第一颗子弹撞击流星并且流星不再存在后检查碰撞。