NSMutableArray和batchNode问题

时间:2011-11-02 21:41:31

标签: iphone objective-c xcode cocos2d-iphone

我正在做一个小游戏,这里有一些示例代码:

-(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不太熟悉,但我现在卡住了。

2 个答案:

答案 0 :(得分:-1)

在init方法中,您创建一个新的NSMutableArray实例并将其分配给self.arrowProjectileArray,然后使用for循环遍历以下行中的arrowProjectileArray。如果addChild:方法没有向arrowProjectileArray添加任何内容,那么你的代码就会出现逻辑错误,因为你通过遍历arrowProjectileArray所做的就是遍历一个空数组,这意味着你在该代码中什么都不做。

您应该仔细检查您打算做什么以及您的代码实际上在做什么。

答案 1 :(得分:-1)

通过做一些研究解决了我自己的问题,我也摆脱了批处理节点。