我正在做一个小游戏,这里有一些示例代码:
-(id) init
{
self.arrowProjectileArray = [[[NSMutableArray alloc] init] autorelease];
self.batchNode = [CCSpriteBatchNode batchNodeWithTexture:[[CCTextureCache sharedTextureCache] addImage:@"arrow.png"]];
[self addChild:_batchNode z:2];
for (CCSprite *projectile in _arrowProjectileArray) {
[_batchNode removeChild:projectile cleanup:YES];
}
[_arrowProjectileArray removeAllObjects];
self.nextProjectile = nil;
}
}
-(void) callEveryFrame:(ccTime)dt{
for (int i = 0; i < [_arrowProjectileArray count];i++) {
CCSprite *cursprite = [_arrowProjectileArray objectAtIndex:i];
if (cursprite.tag == 1) {
float x = theSpot.x+10;
float y = theSpot.y+10;
cursprite.position = ccp(x, y);
}
}
- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[_batchNode addChild:_nextProjectile z:1 tag:1];
[_arrowProjectileArray addObject: _nextProjectile];
[self spriteMoveFinished];
}
-(void) dealloc
{
self.arrowProjectileArray = nil;
self.nextProjectile = nil;
[super dealloc];
}
我包含的唯一代码是与箭头投影相关的代码。 箭头射得很好,问题是我每次拍摄愚蠢的东西,我认为它会射出一个新的箭头,但是在该1箭头上放置多个箭头,使它看起来像一个肥胖的箭头像素的东西。我究竟做错了什么?我对NSMutableArray不太熟悉,但我现在卡住了。
答案 0 :(得分:-1)
在init方法中,您创建一个新的NSMutableArray实例并将其分配给self.arrowProjectileArray,然后使用for循环遍历以下行中的arrowProjectileArray。如果addChild:方法没有向arrowProjectileArray添加任何内容,那么你的代码就会出现逻辑错误,因为你通过遍历arrowProjectileArray所做的就是遍历一个空数组,这意味着你在该代码中什么都不做。
您应该仔细检查您打算做什么以及您的代码实际上在做什么。
答案 1 :(得分:-1)
通过做一些研究解决了我自己的问题,我也摆脱了批处理节点。