【问题标题】:Stop counting when there is a collision发生碰撞时停止计数
【发布时间】:2017-10-31 15:43:45
【问题描述】:

我正在开发一个游戏,当一个圆圈与另一个圆圈重叠时,分数必须加一个。

但是它每次增加 32 会发生什么,显然我知道它每次发生碰撞时都会增加,但是我怎样才能停止它并且每次碰撞只计算一个。

请帮忙,这是我的代码。

if (Intersector.overlaps(playercircle, ey1circle[i]) || Intersector.overlaps(playercircle, ey2circle[i]) || Intersector.overlaps(playercircle, ey3circle[i]) || Intersector.overlaps(playercircle, ey4circle[i])) {
    escore++;
}

【问题讨论】:

  • 你需要展示更多相关的代码。
  • javascript != java
  • 只保留一个标志,当你第一次相交时设置这个标志,当你停止相交时重置标志。现在,当您相交且未设置标志时,添加分数。
  • 这就是所有必要的,一切正常,我只需要在第一次发生碰撞时停止计数。我不知道如何。
  • Keith 请做一些编码来添加标志好吗?

标签: java android libgdx


【解决方案1】:

听起来你必须(至少)添加一个标志来跟踪交叉点已经发生/正在发生的事实,并且只运行escore++,因为它会从 false 变为 true。如果您想跟踪未来的碰撞,您还需要在它们不再相交时将相交标志设置回 false。

【讨论】:

  • 能否请您编码,以便我更好地理解?
  • if (intersects && !flag) { flag = true; escore++ } if (!intersects && flag) { flag = false }
【解决方案2】:

这是一种结合碰撞检测使用标志的方法

boolean eycircle_flag ;
boolean collison ;

collison = Intersector.overlaps(playercircle, ey1circle[i]) || Intersector.overlaps(playercircle, ey2circle[i]) || Intersector.overlaps(playercircle, ey3circle[i]) || Intersector.overlaps(playercircle, ey4circle[i]) ;

if(!eycircle_flag && collison)
{
  eycircle_flag = true ;
  escore++ ;
}
else if(eycircle_flag && !collision)
{
  eycircle_flag = false ;
}

由您决定是否需要更多标志或条件来检查并使其满足您的需求

【讨论】:

  • 不工作..意味着?你期望什么,有编译器错误吗?
  • 不,打一个精灵时分数仍然上升到81
  • 请记住,变量 'eycircle_flag' 必须保持在检查碰撞的函数范围之外,否则它将始终重置为 false
  • 它是直接在我的 Main 类下定义的
  • 我注意到您似乎有一个 'ey1circle[i]' 的数组/列表,也许您需要更多标志或调试标志的内容以查看失败的原因
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
  • 2018-01-31
相关资源
最近更新 更多