繁体   English   中英

移动背景停止在Spritekit上重复

[英]Moving background stops repeating on Spritekit

这是使我的背景重复的代码,只是一个背景,它应该永远重复:

SKTexture* bgTexture = [SKTexture textureWithImageNamed:@"nightbackground"];
bgTexture.filteringMode = SKTextureFilteringNearest;

SKAction* movebgSprite = [SKAction moveByX:-bgTexture.size.width*2 y:0 duration:0.1 * bgTexture.size.width*2];
SKAction* resetbgSprite = [SKAction moveByX:bgTexture.size.width*2 y:0 duration:0];
SKAction* movebgSpritesForever = [SKAction repeatActionForever:[SKAction sequence:@[movebgSprite, resetbgSprite]]];

for( int i = 0; i < 2 + self.frame.size.width / ( bgTexture.size.width * 2 ); ++i ) {
    SKSpriteNode* sprite = [SKSpriteNode spriteNodeWithTexture:bgTexture];
    [sprite setScale:1.0];
    sprite.zPosition = -20;
    sprite.position = CGPointMake(self.size.width/2, self.size.height/2);
    [sprite runAction:movebgSpritesForever];
    [self addChild:sprite];

但是它不会永远重复,会在一段时间后停止。 它可能有什么问题?

这种情况将在横向方向上起作用,并使视图重复向左无限滚动(-x方向)。 您创建了背景SKSPriteNode的两个实例,并将它们彼此相邻放置。 当第一个完全滚动离开屏幕左侧时,它将放置在第二个背景精灵节点的右侧。

在didMoveToView中:

for (int i = 0; i < 2; i++) {
    SKSpriteNode *bg = [SKSpriteNode spriteNodeWithImageNamed:@"background"];
    bg.anchorPoint = CGPointZero;
    bg.position = CGPointMake(i * bg.size.width, 0);
    bg.name = @"starBackground";
    [self addChild:bg];
}

在更新:循环

[self enumerateChildNodesWithName:@"background" usingBlock:^(SKNode *node, BOOL *stop) {

    SKSpriteNode *bg = (SKSpriteNode *)node;
    bg.position = CGPointMake(bg.position.x - 1.5, bg.position.y);

    if (bg.position.x <= -bg.size.width) {
        bg.position = CGPointMake(bg.position.x + bg.size.width * 2, bg.position.y);
    }

}];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM