Tan*_*ing 3 iphone xcode objective-c cocos2d-iphone
我有一个我写的游戏.我准备好称它已经完成,但我发现了一个错误.基本上,随着游戏时间的延长,游戏变慢.我的猜测是这是因为仍在屏幕上绘制的精灵.我将粘贴下面的代码,但基本上sprite是在"addNewBall"方法中创建的.在此方法中,它被添加到计算其运动的数组中.在球到达离开屏幕的位置后,它从阵列中移出,这使得它停止移动,但它仍然被"拉出"屏幕.如何删除精灵,以便处理器不再计算它.在此先感谢您的帮助!
皮匠
码:
-(void) addNewBall {
NumberOfBalls = NumberOfBalls + 1;
int RandomXPosition = (arc4random() % 240) + 40;
NSString *BallFileString = @"OrangeBall.png";
switch (arc4random() % 5) {
case 1:
BallFileString = @"OrangeBall.png";
break;
case 2:
BallFileString = @"GreenBall.png";
break;
case 3:
BallFileString = @"YellowBall.png";
break;
case 4:
BallFileString = @"PinkBall.png";
break;
case 0:
BallFileString = @"BlueBall.png";
break;
}
Ball = [CCSprite spriteWithFile:BallFileString];
Ball.position = ccp(RandomXPosition, 520);
BallIsMoving = YES;
[self addChild:Ball z:10];
[AllObjectsArray_ addObject:Ball];
[BallArray_ addObject:Ball];
}
//And here is where it is removed...
if (Ball.position.y <= -100) {
[BallArray_ removeObject: Ball];
}
Run Code Online (Sandbox Code Playgroud)
您似乎在删除方法中缺少某些条件.如果球的y位置大于屏幕高度,或者x位置是否在屏幕外,您是否也想要移除球?无论如何,在你从阵列中移除球的同一个地方,你应该添加:
[self removeChild:Ball cleanup: YES]
Run Code Online (Sandbox Code Playgroud)
我还应该指出,你BallArray可能是多余的,因为无论如何你要将所有的球添加到另一个节点.如果该节点的唯一子节点是Balls,则可以使用其children属性获取球的数组.在这种情况下,子数组将是:( self.children有关详细信息,请参阅 http://www.cocos2d-iphone.org/api-ref/latest-stable/interface_c_c_node.html#a5e739ecda0c314283a89ac389dfca2fa.)
如果在同一节点上有非Ball子节点,则可能需要添加中间节点以简化设计,以便可以使用少一个数组.
| 归档时间: |
|
| 查看次数: |
9881 次 |
| 最近记录: |