ios - SpriteKit 滚动背景图像显示图像之间的线条

标签 ios swift sprite-kit infinite-scroll

我正在学习如何在 iOS 中制作游戏,因此我决定使用自己的资源复制《马里奥兄弟》的第一关,只是为了学习如何制作它们。

我现在遇到的问题是,在创建滚动背景时,使用我在 Hacking with Swift 上找到的公式,我的图像之间总是出现一条线。

enter image description here

enter image description here

enter image description here

我检查过我的图像在 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 ,两个图像都连接在“仙人掌”之间。

enter image description here

我还尝试将其运行到设备中,以防模拟器中可能存在错误:

最佳答案

您的图像的左侧和顶部有一个 1 像素宽的细黑色边框。它是黑色的。删除它并重试。

关于ios - SpriteKit 滚动背景图像显示图像之间的线条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66540829/

相关文章:

ios - 选择器不会从CoreData(SwiftUI)中选择值

iphone - PhoneGap + iOS 防止默认滚动操作从输入文本字段开始

swift - 何时在可选展开 if 语句中执行 "where"条件?

swift - 扩展 Encodable(或 Codable)的协议(protocol)不符合它

swift - 在我的 Sprite-Kit 游戏中实现此操作的正确方法是什么?

ios - 不支持覆盖扩展中的非@objc 声明

ios - 如何识别 Apple Watch 应用程序中的手势?

swift - Xcode:设置 UIControl 背景颜色在方向更改时重置

swift - Super.Init 在初始化器中多次调用

swift - 可选展开 SKPhysics 错误