首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Swift中的SKSpriteNode和SKAction创建具有随机Y坐标的视差云

使用Swift中的SKSpriteNode和SKAction创建具有随机Y坐标的视差云
EN

Stack Overflow用户
提问于 2016-07-12 08:20:49
回答 0查看 152关注 0票数 0

我正在尝试创建具有不同速度和大小的视差云效果,但在尝试添加不同的Y坐标时,我遇到了困难,因为所有云的Y坐标并不总是相同的。

因此,我有5个云,以及它们各自的X和Y坐标,我使用SKAction.moveByX()函数。

例如,所有的云都从FRAME_WIDTH + 200 (边界外)开始,并在-100结束。在那之后,我将X重置为FRAME_WIDTH + 200,并执行“永远”序列。这是完美的工作,但我想添加一个随机的Y坐标每次动画完成。我可以这样做,但那只会改变Y坐标一次。

我如何才能做到这一点?

下面是我当前的代码:

代码语言:javascript
运行
复制
func addClouds() {

        let cloud1 = SKSpriteNode(imageNamed: "cloud1")
        let cloud2 = SKSpriteNode(imageNamed: "cloud2")
        let cloud3 = SKSpriteNode(imageNamed: "cloud3")
        let cloud4 = SKSpriteNode(imageNamed: "cloud4")
        let cloud5 = SKSpriteNode(imageNamed: "cloud5")

        cloud1.zPosition = ZIndexPosition.CLOUD
        cloud1.position = CGPoint(x: self.FRAME_WIDTH - 100, y: self.FRAME_HEIGHT / 2 - 150)
        cloud1.size = CGSize(width: 44, height: 14)

        cloud2.zPosition = ZIndexPosition.CLOUD
        cloud2.position = CGPoint(x: self.FRAME_WIDTH + 150, y: self.FRAME_HEIGHT - 100)
        cloud2.size = CGSize(width: 104, height: 16)

        cloud3.zPosition = ZIndexPosition.CLOUD
        cloud3.position = CGPoint(x: self.FRAME_WIDTH - 50, y: self.FRAME_HEIGHT - 200)
        cloud3.size = CGSize(width: 8, height: 6)

        cloud4.zPosition = ZIndexPosition.CLOUD
        cloud4.position = CGPoint(x: self.FRAME_WIDTH + 200, y: self.FRAME_HEIGHT / 2 - 50)
        cloud4.size = CGSize(width: 116, height: 32)

        cloud5.zPosition = ZIndexPosition.CLOUD
        cloud5.position = CGPoint(x: self.FRAME_WIDTH, y: self.FRAME_HEIGHT - 250)
        cloud5.size = CGSize(width: 24, height: 6)


        let resetCloud1YPos = SKAction.moveToY(self.randomCloud1, duration: 0)
        let resetCloud2YPos = SKAction.moveToY(self.randomCloud2, duration: 0)
        let resetCloud3YPos = SKAction.moveToY(self.randomCloud3, duration: 0)
        let resetCloud4YPos = SKAction.moveToY(self.randomCloud4, duration: 0)
        let resetCloud5YPos = SKAction.moveToY(self.randomCloud5, duration: 0)

        let resetCloud1Pos = SKAction.moveToX((self.FRAME_WIDTH * 2) - 100, duration: 0)
        let resetCloud2Pos = SKAction.moveToX((self.FRAME_WIDTH * 2) - 150, duration: 0)
        let resetCloud3Pos = SKAction.moveToX((self.FRAME_WIDTH * 2) - 50, duration: 0)
        let resetCloud4Pos = SKAction.moveToX((self.FRAME_WIDTH * 2) - 200, duration: 0)
        let resetCloud5Pos = SKAction.moveToX((self.FRAME_WIDTH * 2) - 20, duration: 0)

        let moveCloud1 = SKAction.moveToX(-100, duration: 28)
        let cloud1Sequence = SKAction.sequence([moveCloud1, resetCloud1Pos, resetCloud1YPos])
        let cloud1Forever = SKAction.repeatActionForever(cloud1Sequence)

        let moveCloud2 = SKAction.moveToX(-100, duration: 24)
        let cloud2Sequence = SKAction.sequence([moveCloud2, resetCloud2Pos, resetCloud2YPos])
        let cloud2Forever = SKAction.repeatActionForever(cloud2Sequence)

        let moveCloud3 = SKAction.moveToX(-100, duration: 35)
        let cloud3Sequence = SKAction.sequence([moveCloud3, resetCloud3Pos, resetCloud3YPos])
        let cloud3Forever = SKAction.repeatActionForever(cloud3Sequence)

        let moveCloud4 = SKAction.moveToX(-100, duration: 13)
        let cloud4Sequence = SKAction.sequence([moveCloud4, resetCloud4Pos, resetCloud4YPos])
        let cloud4Forever = SKAction.repeatActionForever(cloud4Sequence)

        let moveCloud5 = SKAction.moveToX(-100, duration: 18)
        let cloud5Sequence = SKAction.sequence([moveCloud5, resetCloud5Pos, resetCloud5YPos])
        let cloud5Forever = SKAction.repeatActionForever(cloud5Sequence)

        cloud1.runAction(cloud1Forever)
        cloud2.runAction(cloud2Forever)
        cloud3.runAction(cloud3Forever)
        cloud4.runAction(cloud4Forever)
        cloud5.runAction(cloud5Forever)

        self.addChild(cloud1)
        self.addChild(cloud2)
        self.addChild(cloud3)
        self.addChild(cloud4)
        self.addChild(cloud5)

    }

随机云1、2、3、4和5只是屏幕高度范围内的随机生成。

提前谢谢。

EN

回答

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

https://stackoverflow.com/questions/38318144

复制
相关文章

相似问题

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