Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.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_Xcode5_Sprite Kit - Fatal编程技术网

Ios 改变背景移动速度

Ios 改变背景移动速度,ios,objective-c,xcode5,sprite-kit,Ios,Objective C,Xcode5,Sprite Kit,在游戏场景中,背景水平移动,效果很好,但我想根据分数的增加缓慢而快速地移动背景,我继续使用nstimeinterval更改,但我看不到背景移动缓慢而快速,这只是正常的,如果这种方式不对,请有人帮助我 SKTexture *backgroundTexture = [SKTexture textureWithImageNamed:@"background10"]; NSTimeInterval _move; int _gameScore; if (_gameScore

在游戏场景中,背景水平移动,效果很好,但我想根据分数的增加缓慢而快速地移动背景,我继续使用nstimeinterval更改,但我看不到背景移动缓慢而快速,这只是正常的,如果这种方式不对,请有人帮助我

SKTexture *backgroundTexture = [SKTexture textureWithImageNamed:@"background10"];

    NSTimeInterval _move;
       int _gameScore;
    if (_gameScore>=5) {
        _move =0.09;
    }else{
        _move = 0.02;
    }

    SKAction *movBg = [SKAction moveByX:-backgroundTexture.size.width*2 y:0 duration:_move*backgroundTexture.size.width]; 
    SKAction *resetBg =[SKAction moveByX:backgroundTexture.size.width*2 y:0 duration:0];


    SKAction *movebackgroundforever =[SKAction repeatActionForever:[SKAction sequence:@[movBg,resetBg]]];
    for (int i= 0; i<2 + self.frame.size.width/(backgroundTexture.size.width*2 ); ++i) {
        SKSpriteNode* sprite = [SKSpriteNode spriteNodeWithTexture:backgroundTexture];
        [sprite setScale:1.0];
        sprite.zPosition = -20; 
        sprite.anchorPoint = CGPointZero;
        sprite.position = CGPointMake(i* sprite.size.width, 0);
        [sprite runAction:movebackgroundforever];
        [_bgLayer addChild:sprite];
请尝试以下代码:

它将直接将动画时间乘以带有_move*_\u gameScore的分数,您还可以为_move变量提供一些intalize值

SKTexture *backgroundTexture = [SKTexture textureWithImageNamed:@"background10"];

NSTimeInterval _move;


SKAction *movBg = [SKAction moveByX:-backgroundTexture.size.width*2 y:0 duration:_move*__gameScore]; 
SKAction *resetBg =[SKAction moveByX:backgroundTexture.size.width*2 y:0 duration:0];


SKAction *movebackgroundforever =[SKAction repeatActionForever:[SKAction sequence:@[movBg,resetBg]]];
for (int i= 0; i<2 + self.frame.size.width/(backgroundTexture.size.width*2 ); ++i) {
    SKSpriteNode* sprite = [SKSpriteNode spriteNodeWithTexture:backgroundTexture];
    [sprite setScale:1.0];
    sprite.zPosition = -20; 
    sprite.anchorPoint = CGPointZero;
    sprite.position = CGPointMake(i* sprite.size.width, 0);
    [sprite runAction:movebackgroundforever];
    [_bgLayer addChild:sprite];

我想你需要直接将_gameScore乘以_move,为什么要将backgroundTexture.size.width乘以?你能编辑代码吗?因为它的时间间隔与水平移动的宽度相同,但你要在持续时间参数中传递它,在这里,我们只需要提供动画/动作的持续时间。是的,我通过持续时间参数来移动背景,每次我提供的时间都会乘以宽度。这是不正确的,因为我们需要将背景与NSTimeInterval相乘来移动背景,但如果与_GameScorebackground相乘,则不需要使用Int值