【问题标题】:having more than one add child in one method在一种方法中有多个添加子项
【发布时间】:2015-02-17 06:07:31
【问题描述】:

为什么这不起作用:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{   
    int i;
    i = i + 1;
    if (i == 1)
    {
        int r = arc4random_uniform(4);
        if (r == 0)
        {
            [self addChild: [self createBackground0]]; <- doesn't work
        }
        else if (r == 1)
        {
            [self addChild: [self createBackground1]]; <- doesn't work
        }
        else if (r == 2)
        {
            [self addChild: [self createBackground2]]; <- doesn't work
        }
        else
        {
            [self addChild: [self createBackground3]]; <- doesn't work
        }
    }
}

在哪里:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    int i;
    i = i + 1;
    if (i == 1)
    {
        [self addChild: [self createBackground0]]; <- works
    }
}

似乎添加一个引用该方法的 addchild,称为 createBackground0 以及其他 1,2 和 3,当我在 if 语句中只有 1 时,确保背景可以只产生一次。我最初的计划是做一个游戏,玩家点击屏幕来玩游戏,但为了让事情变得不那么无聊,我制作了 4 个不同的背景,在我制作了一个 arc4random_uniform 整数并将其分配给 r 然后根据它选择的数字在 if 语句中,它将运行该行代码,然后发送添加一个相应的子代码。 createBackground 方法如下所示:

-(SKSpriteNode*) createBackground0
{
    SKSpriteNode *waves0 = [SKSpriteNode spriteNodeWithImageNamed:@"background"];
    waves0.anchorPoint = CGPointMake(-0.81,-0.5);
    waves0.name = @"waves0";

    return waves0;
} 

我使用锚点是因为 .position 不会移动精灵,而我使用 .name 是因为我要在 update() 方法中引用精灵来制作滚动背景。

当我有一个 addchild 但似乎无法在一种方法中添加两个或三个时,它似乎只是工作。和if语句的数量有关系吗?

抱歉,我正在从 c# 过渡到 Objective-c 并且大约一周前才开始使用任何草率的代码。感谢您的任何回答。

【问题讨论】:

    标签: objective-c xcode methods


    【解决方案1】:

    i 变量尚未初始化为0,这将导致未定义的行为(即您不能保证i == 0 在这两种情况下都是如此)。解决这个问题:

    int i = 0;
    

    您的其余代码看起来应该可以正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-16
      • 2020-08-14
      • 2010-12-10
      • 2021-08-19
      • 1970-01-01
      • 2020-10-26
      • 2013-06-22
      相关资源
      最近更新 更多