ios - 您如何将节点位置调整为横向和纵向
问题描述
我正在尝试制作一个通用的游戏板,可以在 ipad/iphone 上以纵向或横向方式播放。瓷砖在纵向看起来不错,但是当我切换到横向时,它会被切断。我怎样才能确保董事会始终居中?
override func didMove(to view: SKView) {
let numRows = 7
let numCols = 7
var counter = 0
let squareSize = CGSize(width: view.bounds.width/7, height: view.bounds.width/7)
for row in 0..<numRows{
for col in 0..<numCols {
if counter == 49 {
break
}
let spriteNode = SKSpriteNode(imageNamed: "piece\(counter)")
spriteNode.size = squareSize
spriteNode.position = CGPoint(x: 0-(frame.width*0.43)+(CGFloat(col)*spriteNode.size.width), y: -CGFloat(row)*spriteNode.size.height + frame.height/3 )
addChild(spriteNode)
counter = counter+1
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
if let view = self.view as! SKView? {
if let scene = SKScene(fileNamed: "GameScene") {
scene.scaleMode = .resizeFill
view.presentScene(scene)
}
view.ignoresSiblingOrder = true
view.showsFPS = true
view.showsNodeCount = true
}
}
它看起来像这样:
解决方案
我会将场景比例模式从 更改scene.scaleMode = .resizeFill
为scene.scaleMode = .aspectFit
。在游戏中,不需要 SKView 帧大小,您可以在自己的坐标空间(场景的大小属性)内工作,例如设置为 100 x 100。 -> Interface Builder 设置。
不要在 SKView 的视图框架/边界上关联任何内容。来自场景控制器的代码应该如下工作,所有这些都与场景的大小有关。
override func didMove(to view: SKView) {
let numRows = 7
let numCols = 7
var counter = 0
let squareSize = CGSize(width: size.width/7, height: size.width/7)
for row in 0..<numRows{
for col in 0..<numCols {
if counter == 49 {
break
}
let spriteNode = SKSpriteNode(imageNamed: "piece\(counter)")
spriteNode.size = squareSize
spriteNode.position = CGPoint(x: 0-(size.width*0.43)+(CGFloat(col)*spriteNode.size.width), y: -CGFloat(row)*spriteNode.size.height + size.height/3 )
addChild(spriteNode)
counter = counter+1
}
}
}
推荐阅读
- django-models - 如何为 django 模板添加搜索栏?
- linker - 如何纠正“架构 x86_64 的未定义符号”?
- vb.net - 验证文件大小
- react-native - 无法构建反应原生 ios applozic 聊天实现
- angular - 从 1 个 URL 仅在 1 台 PC 中加载块失败问题
- python - 以 3D 形式显示 2D 正弦波图像
- javascript - 我的 NPM 包的条件“测试工具”代码?
- reactjs - 我在提交时无法将数据添加到我的表中
- android-studio - 无法在“文件映射”处打开库
- javascript - 直接使用原生 JavaScript 或 jQuery 方法来获取元素的包含块