ios – SpriteKit中的无尽滚动背景

ios – SpriteKit中的无尽滚动背景,第1张

概述我正在尝试使用Apple的SpriteKit进行侧滚动游戏.当想要制作无休止的滚动背景时,我遇到了这个 answer. 在实施解决方案后,它似乎确实有效,尽管它显着降低了我的FPS.这可能是由于在每一帧上重新计算图像位置的事实. 我觉得如果我可以使用一个或多个SKAction调用来处理这个动画会更好,但我不确定如何实现它. 思考? 到目前为止我在我的场景类中的代码(这只是在屏幕上激活了一次背景) 我正在尝试使用Apple的SpriteKit进行侧滚动游戏.当想要制作无休止的滚动背景时,我遇到了这个 answer.

在实施解决方案后,它似乎确实有效,尽管它显着降低了我的FPS.这可能是由于在每一帧上重新计算图像位置的事实.

我觉得如果我可以使用一个或多个SKAction调用来处理这个动画会更好,但我不确定如何实现它.

思考?

到目前为止我在我的场景类中的代码(这只是在屏幕上激活了一次背景)

- (voID)addBackgroundTileAtPoint:(CGPoint)point {    SKSpriteNode *bg = [SKSpriteNode spriteNodeWithImagenamed:@"background"];    bg.anchorPoint = CGPointZero;    bg.position = point;    bg.name = @"background";    bg.zposition = -99;    [self addChild:bg];    SKAction *sequence = [SKAction sequence:@[        [SKAction moveByX:-(bg.size.wIDth * 2) y:0 duration:10],[SKAction removeFromParent]    ]];    [bg runAction: sequence];}
解决方法 我在上一个开源项目中为一个特殊的需求做了一个名为SKScrollingNode的小组件: SprityBird.

即使有3层或4层(视差),FPS也不是问题,但您可能需要自己尝试.

要使用它,您只需像任何其他节点一样添加它并给它一个scrollingSpeed likeo:

back = [SKScrollingNode scrollingNodeWithImagenamed:@"back" inContainerWIDth:WIDTH(self)];[back setScrollingSpeed:BACK_SCRolliNG_SPEED];[self addChild:back];

SKScrollingNode.h

@interface SKScrollingNode : SKSpriteNode@property (nonatomic) CGfloat scrollingSpeed;+ (ID) scrollingNodeWithImagenamed:(Nsstring *)name inContainerWIDth:(float) wIDth;- (voID) update:(NSTimeInterval)currentTime;@end

SKScrollingNode.m

@implementation SKScrollingNode+ (ID) scrollingNodeWithImagenamed:(Nsstring *)name inContainerWIDth:(float) wIDth{    UIImage * image = [UIImage imagenamed:name];    SKScrollingNode * realNode = [SKScrollingNode spriteNodeWithcolor:[UIcolor clearcolor] size:CGSizeMake(wIDth,image.size.height)];    realNode.scrollingSpeed = 1;    float total = 0;    while(total<(wIDth + image.size.wIDth)){        SKSpriteNode * child = [SKSpriteNode spriteNodeWithImagenamed:name ];        [child setAnchorPoint:CGPointZero];        [child setposition:CGPointMake(total,0)];        [realNode addChild:child];        total+=child.size.wIDth;    }    return realNode;}- (voID) update:(NSTimeInterval)currentTime{    [self.children enumerateObjectsUsingBlock:^(SKSpriteNode * child,NSUInteger IDx,BOol *stop) {        child.position = CGPointMake(child.position.x-self.scrollingSpeed,child.position.y);        if (child.position.x <= -child.size.wIDth){            float delta = child.position.x+child.size.wIDth;            child.position = CGPointMake(child.size.wIDth*(self.children.count-1)+delta,child.position.y);        }    }];}   @end
总结

以上是内存溢出为你收集整理的ios – SpriteKit中的无尽滚动背景全部内容,希望文章能够帮你解决ios – SpriteKit中的无尽滚动背景所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1108201.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存