【问题标题】:Changing Background Moving Speed改变背景移动速度
【发布时间】:2014-11-04 06:10:37
【问题描述】:

在水平移动的gameScene背景中,它工作正常,但我想根据分数的增加缓慢和快速地移动背景,我以这种方式进行,改变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];

【问题讨论】:

  • 我认为你需要将_gameScore直接乘以_move,为什么要乘以backgroundTexture.size.width
  • 你能编辑代码吗?
  • 因为它的时间间隔随着宽度水平移动
  • 但是你是在duration参数中传递的,这里我们只需要提供动画/动作的持续时间。
  • 是的,我传递了持续时间参数来移动背景,无论我提供什么时间,背景都会乘以宽度

标签: ios objective-c xcode5 sprite-kit


【解决方案1】:

试试这个代码:

它会直接将动画时间乘以分数与_move*__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];

【讨论】:

  • 这是不正确的,因为我们需要将背景与 NSTimeInterval 相乘来移动背景,而不是与 Int 值相乘
  • 如果你乘以_gamescore背景不会移动
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-22
  • 1970-01-01
  • 2012-12-01
  • 2014-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多