【问题标题】:SKTexture in:texture yields empty resultSKTexture in:texture 产生空结果
【发布时间】:2017-03-05 09:39:16
【问题描述】:

我试图剪切一个精灵表,但出于某种原因,结果总是空的。

人们会认为下面会给出图像左下四分之一的一半。

let allTex = SKTexture(imageNamed: "zelda")
let standTex = SKTexture(rect: CGRect(x: 0, y:0, width: 1/2, height: 1/2), in: allTex)

然而,这给出了空的结果。

【问题讨论】:

    标签: swift sprite-kit sprite-sheet sktexture


    【解决方案1】:

    问题在于 CGRect 使用了错误的初始化程序。有人会认为下面会给你图像左下四分之一的一半。

    let allTex = SKTexture(imageNamed: "zelda")
    let standTex = SKTexture(rect: CGRect(x: 0, y:0, width: 1/2, height: 1/2), in: allTex)
    

    然而,由于类型推断表明结果应该是一个 int,然后不幸地将 1/2 舍入为 0,这会给出空结果。要解决此问题,请改为:

    let allTex = SKTexture(imageNamed: "zelda")
    let standTex = SKTexture(rect: CGRect(x: 0, y:0, width: 1.0/2.0, height: 1.0/2.0), in: allTex)
    

    这会强制计算结果为双精度 0.5,然后最终使用具有精确浮点数而不是四舍五入整数的 CGRect。

    【讨论】:

    • 这不是 CGRect 的问题,这是您没有指定 1 和 2 的问题,因此编译器将在没有小数时假定 Int,因为 Int 是最快的类型与合作
    • @Knight0fDragon 当然我明白发生了什么。只是我把头撞在墙上,希望能同样拯救其他人。人们可能会在很多地方遇到这种情况,但在这种特殊情况下,由于静默失败且屏幕上没有任何内容,因此有点难以意识到。
    • 我只是在澄清为什么你会得到你得到的错误。
    • @Knight0fDragon 谢谢,在答案中添加了类型推断。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多