【问题标题】:Objectives moving and changing Background目标移动和变化的背景
【发布时间】:2023-03-12 14:48:01
【问题描述】:

我正在尝试在 Spritekit 中创建游戏。 我有两个目标,没有身体,太阳和月亮。起初太阳 应该在屏幕的右上角产生,向左移动。如果太阳出来了 屏幕,例如在 x = -30 时,月亮应该出现在屏幕的右上角。

另外,我想更改背景颜色。我没有图像,所以我使用 RGB。 例如,如果太阳到达点 x = 50,则背景颜色应该越来越深,直到月亮出现。我使用 SkyBlue = 135,206,250。

我的代码不起作用,太阳向左移动,但月亮没有出现。

-(void)Background{

Sun = [SKSpriteNode spriteNodeWithImageNamed:@"Sun.png"];
Sun.size = CGSizeMake(60, 60);
Sun.position = CGPointMake(360, 500);

SKAction * MoveLeft = [SKAction moveByX:-400 y:0 duration:15];

[Sun runAction:MoveLeft];
[self addChild:Sun];

Moon = [SKSpriteNode spriteNodeWithImageNamed:@"Moon.png"];
Moon.size = CGSizeMake(60, 60);
Moon.position = CGPointMake(360, 500);

if (Sun.position.x < 60) {
    [Moon runAction:MoveLeft];
}

[self addChild:Moon];

}

【问题讨论】:

    标签: sprite-kit background-color skaction


    【解决方案1】:

    你的方法只被调用一次,所以:

    if (Sun.position.x < 60) {
       [Moon runAction:MoveLeft];
    }
    

    只调用一次。

    解决方案:

    覆盖场景上的更新功能(在每帧更新时运行):

    -(void)update:(NSTimeInterval)currentTime {
    
       if (Sun.position.x < 60 && Sun!=nil) {
          Moon = [SKSpriteNode spriteNodeWithImageNamed:@"Moon.png"];
          Moon.size = CGSizeMake(60, 60);
          Moon.position = CGPointMake(360, 500);
          [Moon runAction:MoveLeft];
          [self addChild:Moon];
          Sun = nil;
          [Sun removeFromParent]; // Make sure that this code isn't called again
       }
    
    }
    

    【讨论】:

    • 非常感谢您的回答!现在月亮出现了,但似乎月亮在循环产卵。另外,如果月亮向左转,月亮应该消失,太阳应该再次出现。
    • 我已经编辑了我的答案以修复产卵循环。对此感到抱歉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2014-11-04
    • 2021-02-13
    相关资源
    最近更新 更多