【问题标题】:Display a CCSprite seven times显示一个 CCSprite 七次
【发布时间】:2013-07-18 04:14:59
【问题描述】:

我是 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];

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

谢谢!

【问题讨论】:

  • 代码不断崩溃的原因是因为您在图层中多次添加相同的对象。
  • 哦,这就是它崩溃的原因..难怪..

标签: ios objective-c cocos2d-iphone kobold2d


【解决方案1】:

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

- (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]; 行添加到[self addChild:coin]; 下的 for 循环。这会将它们全部放入数组中。

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

- (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: 每次角色移动时都会触发。

【讨论】:

  • 非常感谢!这再好不过了:)
  • 你知道我如何访问 NSMutableArray 并写入它吗?我想检测角色和硬币之间的碰撞。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-03
  • 1970-01-01
  • 1970-01-01
  • 2015-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多