我正在制作一个棋盘游戏,当一个人获胜时,我希望棋盘重置自己。如果有帮助,我正在使用cocos2d for iPhone。我有一个重置方法,重置所有变量和片段数组。它会重置一次,然后在一个人获胜后再次重置电路板。有想法该怎么解决这个吗? 这是.m文件中的方法。 //方法
-(void) resetGame {
self.isTouchEnabled = YES;
if( (self=[super init]) ) {
self.isTouchEnabled = YES;
turn = 2;
pieces = [[NSMutableArray alloc] initWithObjects:
[[Piece alloc] pieceWithType:1 player:1 row:1 col:3], // bSphere1
[[Piece alloc] pieceWithType:1 player:1 row:2 col:3], // bSphere2
[[Piece alloc] pieceWithType:2 player:1 row:1 col:2], // bSquare1
[[Piece alloc] pieceWithType:2 player:1 row:3 col:3], // bSquare2
[[Piece alloc] pieceWithType:2 player:1 row:0 col:3], // bSquare3
[[Piece alloc] pieceWithType:1 player:2 row:0 col:4], // wSphere1
[[Piece alloc] pieceWithType:1 player:2 row:2 col:4], // wSphere2
[[Piece alloc] pieceWithType:2 player:2 row:1 col:4], // wSquare1
[[Piece alloc] pieceWithType:2 player:2 row:3 col:4], // wSquare2
[[Piece alloc] pieceWithType:2 player:2 row:2 col:5], // wSquare3
nil];
// add background before pieces
CCSprite *bg = [CCSprite spriteWithFile:@"grid.png"];
[bg setPosition:ccp(240, 160)];
[self addChild:bg z:0];
// add all the pieces
for(Piece *piece in pieces) {
[self addChild:piece];
}
}
}
答案 0 :(得分:0)
如果您要使用该层/ CCScene超过1轮(它不会被其他中间CCScene替换为菜单),那么您应该尝试在init函数之外添加/删除精灵
你可以做点什么- (void)resetLevel: {
//remove old children
[this removeAllChildrenWithCleanup:YES];
//Add new children
pieces = [[NSMutableArray alloc] initWithObjects:
[[Piece alloc] pieceWithType:1 player:1 row:1 col:3], // bSphere1
.......
nil];
// add background before pieces
CCSprite *bg = [CCSprite spriteWithFile:@"grid.png"];
[bg setPosition:ccp(240, 160)];
[self addChild:bg z:0];
// add all the pieces
for(Piece *piece in pieces) {
[self addChild:piece];
}
}
代码未经过测试,您可能需要进行一些更改
您还应该避免保留NsMutableArray和Piece实例分配(alloc),因为您必须执行额外的工作来释放它们。无论如何,您的图层会通过添加它们来保留它们