首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sprite套件侧边滚动

Sprite套件侧边滚动
EN

Stack Overflow用户
提问于 2013-10-14 03:13:26
回答 4查看 11.6K关注 0票数 10

我开始使用Sprite工具包,我想知道如何创建一个无限滚动的游戏?我阅读了Sprite工具包文档,并阅读了场景的预处理过程。据说我们可以重新调整场景的位置,以防内容比场景大。我试过了,但是,当我滚动整个背景图像时,我开始看到场景的默认背景。如何创建无限的背景?谁能给我推荐正确的文档或文章来讨论他的问题?谢谢。

EN

回答 4

Stack Overflow用户

发布于 2013-10-14 11:35:58

像这样的东西应该会让你开始:

添加背景图像...

代码语言:javascript
复制
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 = @"background";
    [self addChild:bg];
}

在你的update方法中。

代码语言:javascript
复制
[self enumerateChildNodesWithName:@"background" usingBlock: ^(SKNode *node, BOOL *stop) {
    SKSpriteNode *bg = (SKSpriteNode *) node;
    bg.position = CGPointMake(bg.position.x - 5, bg.position.y);

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

这是来自RW的一个例子,他的例子使用了1136px的背景图像大小。

票数 12
EN

Stack Overflow用户

发布于 2014-02-15 19:30:57

为此,我做了一个名为SKScrollingNode的通用合成器,因为我通常会添加多个滚动背景来实现视差效果。使用它非常简单:

在scene类中声明它

代码语言:javascript
复制
@property(strong,nonatomic) SKScrollingNode * clouds;

创建它并将其添加到scene实例中

代码语言:javascript
复制
self.clouds = [SKScrollingNode spriteNodeWithImageNamed:@"clouds"];
self.clouds.scrollingSpeed = .5; // Speed at which the clouds will scroll
[self addChild:clouds];

在你的场景“update”方法中,只需调用

代码语言:javascript
复制
[self.clouds update:currentTime]

完成了!

你可以在这里找到'SKScrollinNode‘合成器的完整代码:

https://github.com/kirualex/SprityBird/blob/master/spritybird/Classes/Scenes/

票数 3
EN

Stack Overflow用户

发布于 2016-09-01 01:38:13

我的代码示例使用SpriteKit和Swift进行了精确的引用,如下所示。

代码语言:javascript
复制
func background1() {
        let backgroundTexture = SKTexture(imageNamed: "bg")

        //move background right to left; replace
        let shiftBackground = SKAction.moveByX(-backgroundTexture.size().width, y: 0, duration: 15)
        let replaceBackground = SKAction.moveByX(backgroundTexture.size().width, y:0, duration: 0)
        let movingAndReplacingBackground = SKAction.repeatActionForever(SKAction.sequence([shiftBackground,replaceBackground]))

        for var i:CGFloat = 0; i<3; i++ {
            //defining background; giving it height and moving width
            let background = SKSpriteNode(texture:backgroundTexture)
            background.position = CGPoint(x: backgroundTexture.size().width/2 + (backgroundTexture.size().width * i), y: CGRectGetMidY(self.frame))
            background.size.height = self.frame.height
            background.zPosition = -20
            background.runAction(movingAndReplacingBackground)

            self.addChild(background)

  1. create constant backgroundTexture创建为图像的常量。
  2. 创建常量,用于将背景向左移动( shiftBackground ),并将背景的另一个实例添加到当前显示的one movingAndReplacingBackground常量( SKAction )的右侧,作为永远重复的循环,将repeatActionForever的参数设置为具有SKAction.sequence的shiftBackground和replaceBackground常量,并创建一个定义背景定义的循环。(对于变量i,如果i的数量小于3,则将i递增1。
  3. 在循环中,保护纹理、位置、大小和zPosition (如果兄弟顺序被关闭),然后调用您的movingAndReplacingBackground作为您的操作,然后迭代您的movingAndReplacingBackground循环的最后部分是添加您的背景。只要它的迭代次数少于3次,它就会执行此操作。一旦你的第一个背景到达屏幕的最左边,它就会删除到2的节点,从而再次运行循环中的操作。

我将其封装在一个函数中,因为对于视差背景,我能够复制该函数4次,重命名变量,更改shiftBackground常量的“持续时间”,并根据它们的距离获得不同的速度。

我希望这能帮到你!当Swift转到Swift 3时,这个“C风格”的for循环将被弃用,所以我还不确定如何长期修复它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19349168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档