评分系统不工作 Obj-C

Score system not working Obj-C

所以我正在开发一款游戏并编写了评分系统。我希望它是这样的,当我向下滚动的对象与 "Box" 对象的 y.co 坐标相同时,分数系统将分数加一。

但是,在尝试此操作时,socre 不会更新并保持为 0。我不太清楚为什么,能否请您告诉我我可能哪里出错了以及我该如何解决它。

这是我用来编写评分系统的代码。如有任何帮助,我们将不胜感激。

-(void)Score{

ScoreNumber = ScoreNumber + 1;
ScoreDisplay.text = [NSString stringWithFormat:@"%i", ScoreNumber];

}

[视图中还有一些代码完成了所有工作。但问题不在于这部分代码,因为我以前使用过它并且工作正常。]

这是要实施但不起作用的地方...

if (ROne.center.y == IView.center.y) {
        [self Score];
    }

    if (RTwo.center.y == IView.center.y) {
        [self Score];
    }

    if (RThree.center.y == IView.center.y) {
        [self Score];
    }

    if (RFour.center.y == IView.center.y) {
        [self Score];
    }

    if (RFive.center.y == IView.center.y) {
        [self Score];
    }

    if (RSix.center.y == IView.center.y) {
        [self Score];
    }

您需要仔细考虑游戏代码的逻辑:

  1. 某些对象每 沿 Y 轴移动,并且每帧移动可能超过 1 个像素(或点)。
  2. 您的 tick 方法在每一帧(或其他设置的间隔)中被调用,并且它被编码为仅在 Y 坐标与您设置的边界完全匹配时才起作用。

发生的事情是对象正在移动越过边界 在 ticks 之间,因此该方法无法检测到它(即考虑 y == 3 和对象在一次滴答中从 y == 1 变为 y == 5

你需要做的是拿着一个标志,显示物体是否已经越过边界,只有当这个标志为假时才检查边界条件。放置此标志的最佳位置是对象本身。

类似于:

if (!ROne.hasScored && ROne.center.y => IView.center.y) {
    [self Score];
    ROne.scored = YES;
}

您还需要考虑使用六个对象的数组,而不是 6 个单独的变量。

你的问题很可能是y增量不等于目标对象的y坐标,那么就不会严格相等。你会略过它。这就是 >= 起作用的原因,除非你通过它,它会不断增加分数。

所以,你需要测试的是"passing by"。也就是说移动前ROne.center.y < IView.center.y,移动后ROne.center.y >= IView.center.y。这是唯一有效检查 "ROne just arrived at the desired height".

的条件

或者,您可以使用 >= 并在 ROne 上使用标志 arrived 来告诉它停止计算分数。当 (ROne.center.y >= IView.center.y && ROne.arrived) 为真时,将 arrived 标志设置为假。然后当您决定将对象重置到屏幕顶部时,将 arrived 标志重置为 true。