【问题标题】:Remove sprite from screen cocos2d iphone?从屏幕cocos2d iphone中删除精灵?
【发布时间】:2011-03-03 00:09:28
【问题描述】:

我有一个我写的游戏。我正准备将其称为完成,但我发现了一个错误。基本上游戏会随着你玩的时间越长而变慢。我的猜测是这是由于仍在屏幕外绘制的精灵。我将粘贴下面的代码,但基本上精灵是在“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];
}

【问题讨论】:

    标签: iphone objective-c xcode cocos2d-iphone


    【解决方案1】:

    您的删除方法中似乎缺少某些条件。如果球的 y 位置大于屏幕高度,或者如果它的 x 位置不在屏幕上,您是否也不想移除球?无论如何,在您从阵列中移除球的同一位置,您应该添加:

    [self removeChild:Ball cleanup: YES]
    

    我还应该指出,您的 BallArray 可能是多余的,因为无论如何您都将所有球添加到另一个节点。如果该节点的唯一子节点是Balls,则可以使用其children 属性获取球数组。在这种情况下,子数组将是:self.children(有关详细信息,请参阅 http://www.cocos2d-iphone.org/api-ref/latest-stable/interface_c_c_node.html#a5e739ecda0c314283a89ac389dfca2fa。)

    如果您在同一个节点上有非 Ball 子节点,您可能需要添加一个中间节点来简化设计,这样您就可以少用一个数组。

    【讨论】:

    • 不,我在那个节点中有很多子节点,并且行为相同的子节点在同一个数组中。谢谢你的帮助!!
    • 很高兴能提供帮助。如果您的问题得到解决,您应该将此答案标记为已接受,以使未来的读者受益:)
    【解决方案2】:

    你说你要从数组中删除对象,但你没有提到你也在从父 CCNode 中删除精灵。

    检查 CCNode 中删除子节点的方法:http://www.cocos2d-iphone.org/api-ref/latest-stable/interface_c_c_node.html#a0d4e615f688458c74001acf10f0ae011

    你可以使用:

    [Ball removeFromParentAndCleanup:YES];
    

    这将从它的父 CCNode 中移除球,并将移除所有动作和回调。

    【讨论】:

      【解决方案3】:

      你需要指定你的精灵,你可以使用下面这行.. [self removeChild:Ball cleanup: YES]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-16
        • 1970-01-01
        • 2012-07-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多