Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何以逐渐增加的速度随机添加和设置来自屏幕底部的无限多个对象的动画?_Ios_Objective C_Sprite Kit - Fatal编程技术网

Ios 如何以逐渐增加的速度随机添加和设置来自屏幕底部的无限多个对象的动画?

Ios 如何以逐渐增加的速度随机添加和设置来自屏幕底部的无限多个对象的动画?,ios,objective-c,sprite-kit,Ios,Objective C,Sprite Kit,我有三种不同的雪碧。我想连续地为这三个从屏幕底部进入的不同精灵设置动画,随着进入的对象数量的增加,它们的速度也会增加。另外,这三个应该是随机的 因此,我尝试了以下代码,以使三个精灵中的任何一个以任意随机顺序出现,但它没有按预期工作: 整数随机数 for (int i = 1; i<500; i++) { randomNumber = arc4random_uniform(3); NSLog(@"Value of random Number %d" ,randomNumber

我有三种不同的雪碧。我想连续地为这三个从屏幕底部进入的不同精灵设置动画,随着进入的对象数量的增加,它们的速度也会增加。另外,这三个应该是随机的

因此,我尝试了以下代码,以使三个精灵中的任何一个以任意随机顺序出现,但它没有按预期工作:

整数随机数

for (int i = 1; i<500; i++) {
    randomNumber = arc4random_uniform(3);
    NSLog(@"Value of random Number %d" ,randomNumber);

if (randomNumber == 0) {
        [self addRedBall];
        SKAction *moveBall = [SKAction moveToY:CGRectGetMaxY(self.frame) duration:5];

    dispatch_queue_t actionDispatchRed;

    actionDispatchRed = dispatch_queue_create("com.redball.dispatch", NULL);

    dispatch_async(actionDispatchRed, ^ {   [redBall runAction:moveBall];   });
    [NSThread sleepForTimeInterval:2];   //Time interval to wait before the next ball comes in.

    }

else if (randomNumber == 1) {
        [self addBlueBall];

        dispatch_queue_t actionDispatchBlue;

        SKAction *moveBall = [SKAction moveToY:CGRectGetMaxY(self.frame) duration:5];
        actionDispatchBlue = dispatch_queue_create("com.blueball.dispatch", NULL);

        dispatch_async(actionDispatchBlue, ^{  [blueBall runAction:moveBall];  });
        [NSThread sleepForTimeInterval:2];


    }
else if (randomNumber == 2) {
        [self addGreenBall];
        SKAction *moveBall = [SKAction moveToY:CGRectGetMaxY(self.frame) duration:5
                              ];
        dispatch_queue_t actionDispatchGreen;
        actionDispatchGreen = dispatch_queue_create("com.greenball.dispatch", NULL);

        dispatch_async(actionDispatchGreen,
                       ^ {  [greenBall runAction:moveBall]; } );

    [NSThread sleepForTimeInterval:2];

    }


}

对于(int i=1;i我不建议使用
[NSThread sleepForTimeInterval:2];

相反,尝试使用
[自执行选择器:@selector(addBall)with object:nil afterDelay:2];

-(void)addBall
{
    self.addedBall++;
    if (self.addedBall > 500)
    {
        return;
    }

    randomNumber = arc4random_uniform(3);

    if (randomNumber == 0) {
        [self addRedBall];
        SKAction *moveBall = [SKAction moveToY:CGRectGetMaxY(self.frame) duration:5];

        dispatch_queue_t actionDispatchRed;

        actionDispatchRed = dispatch_queue_create("com.redball.dispatch", NULL);

        dispatch_async(actionDispatchRed, ^ {   [redBall runAction:moveBall];   });

        [self performSelector:@selector(addBall) withObject:nil afterDelay:2];
    }
    //other else if stuff

}
此外,我不确定您为什么在调度队列中运行SKActions,并且可能不需要它


我希望这能有所帮助。

在我许愿的时候,我想要一匹小马。@matt-你总是让我觉得你是个克莱德斯代尔式的人。既然你已经告诉了我们你想做什么,请用一些相关的代码更新你的问题,说明你的尝试。解释你对代码有什么问题。好的,我已经更新了这个问题。请调查此事并提供帮助。抱歉刚才的事incovienience@rmaddy请检查更新的问题if语句和增量中的“addedBall”是什么?我是否应该用你的代码替换问题中的代码,并在didMoveToView中调用addBall?对不起,如果这太愚蠢了,我是一个傻瓜你的原始代码你有一个for循环,执行了500次。addBall只是一个可以递增的NSInteger。我把它放在那里作为停止叫addball的支票。如果你不在乎在这一点上你打了多少次addball,你就真的不需要它了。是的,用它替换代码,并在didMoveToView中调用它一次。我们都是新人,我知道有时候在网上交流很困难。只要确保你在另外两个if中替换了其他的NSThread东西,我做到了!它是动画正如我所希望的!万分感谢!还有一件事,我现在无法对触球做出反应。是因为球正在执行一个动作,并且在设置动画时无法响应吗?不客气。请将此标记为已回答。行动不会阻止接触我的知识。您需要确保在创建SKSpriteNode时将userInteractionEnabled设置为YES。说到这里,我将为这个问题创建一个新的问题,用一个代码示例说明如何创建精灵以及如何检查它是否对触摸做出响应。我的userInteractionEnabled设置为YES。我编写代码是为了在触摸屏幕上的某个精灵时获得日志消息,我每次都会收到一条日志消息,但如何才能知道触摸了哪个精灵,从而使特定的精灵运行某些操作?抱歉,我现在无法添加新问题,因为我的问题已达到限制!很抱歉给您带来不便