我正在学习如何在 iOS 中制作游戏,因此我决定使用自己的资源复制《马里奥兄弟》的第一关,只是为了学习如何制作它们。
我现在遇到的问题是,在创建滚动背景时,使用我在 Hacking with Swift 上找到的公式,我的图像之间总是出现一条线。
我检查过我的图像在 AI 文件中没有边框。 (图片如上)
import SpriteKit
import GameplayKit
class GameScene: SKScene {
private var player = SKSpriteNode()
private var bg = SKSpriteNode()
override func didMove(to view: SKView) {
let playerTexture = SKTexture(imageNamed: "player")
player = SKSpriteNode(texture: playerTexture)
player.position = CGPoint(x: self.frame.midX, y: self.frame.midY)
addBackground()
self.addChild(player)
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
}
override func update(_ currentTime: TimeInterval) {
// Called before each frame is rendered
}
// MARK: UTILITY FUNCTIONS
func addBackground() {
let bgTexture = SKTexture(imageNamed: "bg")
for i in 0 ... 1 {
bg = SKSpriteNode(texture: bgTexture)
//bg.position = CGPoint(x: (i == 0 ? bgTexture.size().width : bgTexture.size().width - 1) * CGFloat(i), y: self.frame.midY)
bg.position = CGPoint(x: (bgTexture.size().width * CGFloat(i)) - CGFloat(1 * i), y: 0)
bg.size.height = self.frame.height
//bg.anchorPoint = CGPoint.zero
bg.zPosition = -10
self.addChild(bg)
let moveLeft = SKAction.moveBy(x: -bgTexture.size().width, y: 0, duration: 5)
let moveReset = SKAction.moveBy(x: bgTexture.size().width, y: 0, duration: 0)
let moveLoop = SKAction.sequence([moveLeft, moveReset])
let moveForever = SKAction.repeatForever(moveLoop)
bg.run(moveForever)
}
}
}
只需创建一个新项目,复制粘贴它,您就应该看到它正在运行
我还将我的 GameScene.sks
大小更改为:2688 x 1242
为了使背景全屏显示,我所做的最后一项更改是设置 LaunchScreen,如 this answer 中所述。这似乎是 Xcode 12 中的一个问题
我知道 Hacking with Swift 帖子中的公式是使图像重叠 1px,我尝试从中删除 1 * i
部分,但结果并没有不同。
我做的另一件事是验证图像是否完美地“连接”在一起,它们确实如此,您在下图中看到的线条来自 AI Canvas ,两个图像都连接在“仙人掌”之间。
我还尝试将其运行到设备中,以防模拟器中可能存在错误:
最佳答案
您的图像的左侧和顶部有一个 1 像素宽的细黑色边框。它是黑色的。删除它并重试。
关于ios - SpriteKit 滚动背景图像显示图像之间的线条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66540829/