SwiftUI中SpriteView内SKScene尺寸为1、坐标偏移问题求助
SwiftUI中SpriteView的坐标系统与SKScene尺寸问题
我在SwiftUI应用中使用SpriteView时遇到了坐标系统的困惑。我开发了一个名为Spriteoscope的测试小程序,它会在SKScene中绘制64×64的方块网格(我称之为“像素”),通过改变方块颜色实现动画效果。SKScene的初始化代码开头为:
let pixelSize = min(self.size.width / Double(numColumns), self.size.height / Double(numRows))
随后我通过从-self.size.width/64到+self.size.width/64循环绘制尺寸为pixelSize的方块,使网格居中于SKScene的中心原点(0,0)。该SKScene原本在NSViewController或UIView中运行完全正常。
在将应用转为SwiftUI实现后,使用SpriteView完成了转换,但运行后发现所有内容都被推至左下角。调试时发现SKScene的尺寸为1×1,这超出预期。虽然像素会被缩放至视图大小,但负坐标部分全部超出屏幕,导致位置错误。
我曾怀疑是执行顺序问题——SKScene在视图布局前被初始化,但实际并非如此。我将SpriteView包裹在GeometryReader中,确认其尺寸确实为预期的480×480,且Scene的初始化方法确实是在SpriteView设置完成后调用的。
为何SKScene的原点(0,0)位于左下角而非中心,且尺寸为1×1?我查阅了SpriteView和SpriteView.options的文档,但未找到相关提示,请问我遗漏了什么?
相关SwiftUI代码如下:
@State private var scene = SpriteoscopeScene() var body: some View { HStack { VStack { Spacer() Button("pause") { scene.pauseKalidescope() } .buttonStyle(DefaultButtonStyle()) }.padding() SpriteView(scene: scene) VStack { Spacer() Button("reset") { scene.setupKalidescope() } .buttonStyle(DefaultButtonStyle()) }.padding() } .frame(width: 640, height: 480) }
内容的提问来源于stack exchange,提问作者Maury Markowitz
相关产品推荐
相关产品推荐

