我是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];
但由于某种原因,我的代码不断崩溃。有谁知道我怎么解决这个问题?
谢谢!
答案 0 :(得分: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:每次角色移动时都会触发。