1

我是 Cocos2d 的初学者,我想以水平模式显示 7 个硬币。所以这就是我在我的主要游戏层中写的:

在我的初始化中,我有这个

coins  = [CCSprite spriteWithFile:@"coins.png"];

我为我想要的硬币图案制作了一个方法(显示七次)

- (void)coinPatterns {
    coins.position = ccp(150,150);

    for(int i = 0; i < 7; i++)
    {
        coins.position = ccp (coins.position.x + 20, coins.position.y);
        [self addChild:coins];
    }
}

然后我在我的更新方法中添加了这个

[self coinPatterns];

但由于某种原因,我的代码不断崩溃。有谁知道我该如何解决这个问题?

谢谢!

4

1 回答 1

3

我认为您在这里要做的是为每个硬币创建一个单独的精灵节点,而不是一遍又一遍地重用同一个(我什至不确定这是否有效)。你会这样做

- (void)coinPatterns {
    NSInteger originalX = 150;
    for(int i = 0; i < 7; i++)
    {
        CCSprite *coin = [CCSprite spriteWithFile:@"coins.png"];
        coin.position = ccp(originalX, 150);
        originalX += 20;
        [self addChild:coin];
    }
}

这将创建 7 个硬币,每个硬币间隔 20。此外,在您提供的代码中,所有 7 个硬币都将堆叠在一起,因为该x值实际上从未增加。如果您使用它,则没有必要拥有变量或属性coins

如果您想稍后访问这些硬币,例如查看是否有字符撞到它们,您可以创建一个NSMutableArray属性coinArray,然后将每个硬币添加到数组中,将行添加[self.coinArray addObject:coin];到 for 循环下[self addChild:coin];。这会将它们全部放入数组中。

要检测碰撞,请按照以下方式执行操作

- (void)characterMoved:(CCSprite *)character 
{
    for (CCSprite *coin in self.coinArray)
    {
        if (CGRectIntersectsRect(coin.frame, character.frame)
            // character and coin collided, add points or remove the coin or something
     }
}

这需要你有一个方法 characterMoved: 每次角色移动时都会触发。

于 2013-07-18T04:31:59.583 回答