swift - 我正在尝试使用 SpirteKit 创建一个无限的垂直滚动背景,但是我似乎无法让代码工作
问题描述
循环的时间不正确并且重置太快。循环图像也被截断,仅显示其中的一部分,而不是缝合到前一个图像的完整循环背景图像。
我尝试过使用 .position、.size 和 SKAction 值,但似乎无法将其调整到正常工作的位置。
func scrollingBackground() {
let BGTexture = SKTexture(imageNamed: "Background")
for i in 0 ... 1 {
let background = SKSpriteNode(texture: BGTexture)
background.zPosition = -30
background.anchorPoint = CGPoint(x: 0, y: 0)
background.size = CGSize(width: (frame.size.width), height: (frame.size.height))
background.position = CGPoint(x: 0, y: -BGTexture.size().height + (BGTexture.size().height + (BGTexture.size().height * CGFloat(i))))
addChild(background)
let scrollUp = SKAction.moveBy(x: 0, y: BGTexture.size().height, duration: 20)
let scrollReset = SKAction.moveBy(x: 0, y: -BGTexture.size().height, duration: 0)
let scrollLoop = SKAction.sequence([scrollUp, scrollReset])
let scrollForever = SKAction.repeatForever(scrollLoop)
background.run(scrollForever)
}
我希望获得一个无限期运行的无缝无限背景循环,而不是我目前拥有的这种跳跃的混乱。我可能会补充说,我的背景图像最初的大小并不适合设备,但我想确保我的背景适合所有 iPhone 设备。
解决方案
你的第一个 BG 在 y = 0,你的第二个 BG 在 y = height。我假设您在锚点 0.5 0.5 上,这将使高度 / 2 离开屏幕。您的动作将 BG 1 准确地移到屏幕外的位置,然后撞回 0。您的 BG2 开始离开屏幕,继续移出屏幕,然后当它达到 2 * 高度时,重置为 1 * 高度,因此永远不会出现在屏幕。这将在底部呈现黑色条形,因为 BG2 从未绘制。将您的乘以i
负高度,这应该会导致 BG2 出现在底部。
func scrollingBackground() {
let BGTexture = SKTexture(imageNamed: "Background")
for i in 0 ... 1 {
let background = SKSpriteNode(texture: BGTexture)
background.zPosition = -30
background.anchorPoint = CGPoint(x: 0, y: 0)
background.size = CGSize(width: (frame.size.width), height: (frame.size.height))
background.position = CGPoint(x: 0, y: -BGTexture.size().height + (BGTexture.size().height + (-BGTexture.size().height * CGFloat(i))))
addChild(background)
let scrollUp = SKAction.moveBy(x: 0, y: BGTexture.size().height, duration: 20)
let scrollReset = SKAction.moveBy(x: 0, y: -BGTexture.size().height, duration: 0)
let scrollLoop = SKAction.sequence([scrollUp, scrollReset])
let scrollForever = SKAction.repeatForever(scrollLoop)
background.run(scrollForever)
}
推荐阅读
- php - 在连接表上获取错误数据
- spring-cloud-dataflow - 如何在一个 jar 中创建多个任务(Spring Cloud Task)?
- php - PHP解析ELA温度传感器原始数据
- powerbi - 本月前 N 个原因
- masstransit - Masstransit EndpointConvention Azure 服务总线
- dictionary - 在 Dart 中映射一个 HashMap
- angular - 发生未处理的异常:找不到模块“@schematics/angular/utility/project”
- html - 如何在 svg 上剪切文本,以便在剪切一个单词后,可以看穿该剪切空间
- python - 打开模式透明时崩溃 Mitmproxy
- reactjs - 基于材质 ui 类的组件