gpt4 book ai didi

ios - SpriteKit 中的无限滚动背景

转载 作者:可可西里 更新时间:2023-11-01 03:07:08 24 4
gpt4 key购买 nike

我正在尝试使用 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 :

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 中的无限滚动背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21703194/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com