【发布时间】:2018-05-01 21:38:46
【问题描述】:
您在使用 SpriteKit 时可能知道,applyImpulse 并非在所有屏幕上都能正常工作。
在iPhone SE 上,我的球移动得非常快,但在iPad Pro 2nd gen 上,球跑得很慢。
有没有一种方法可以让所有屏幕上的值都相等,比较类似于屏幕的宽度?
例如,我希望我的球在 每个 设备上在 5 秒内穿过屏幕,我会使用什么公式?
我已经测试了屏幕尺寸和我的applyImpulse 让球移动到屏幕边缘的时间之间的关系:
注意: Points per second 由Half screen size 除以Time to move 计算得出。该图显示pixels per second随着屏幕尺寸的增大而减小。
如何更改我的applyImpulse 以在所有屏幕上工作? (不包括专门为每个设备制作,因为我希望这在未来是可持续的)
如果可以,请显示一个小的swift 函数,或者如果无法做到,请给我任何建议(文档、论坛等的链接)。
感谢任何人的帮助。
编辑:我的 GameViewController.swift 覆盖加载场景:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// Layout guides
guide = UIApplication.shared.keyWindow?.safeAreaInsets
if let view = self.view as! SKView? {
// Load scene
let scene = GameScene(size: view.frame.size)
// Set the scale mode to scale to fit the window
scene.scaleMode = .aspectFill
// Set (0, 0) as the centre of the screen
scene.anchorPoint = CGPoint(x: 0.5, y: 0.5)
// Present the scene
view.presentScene(scene)
view.ignoresSiblingOrder = true
view.showsFPS = true
view.showsNodeCount = true
view.showsPhysics = true
}
}
【问题讨论】:
-
如果您在除 resizeFill 之外的任何 scaleMode 下工作,您不必担心这一点,因为 scaleMode 的重点是设计 1 个尺寸。否则
150 points == 1 meter在 spritekit 中 -
我使用的是
.aspectFill,加载场景的代码是let scene = GameScene(size: view.frame.size)...有趣的是,您之前已经评论了我的很多问题???? -
将游戏场景设置为 view.frame.size 与场景的工作方式相反,它完全忽略了缩放模式,而这正是 Sprite Kit 的一大便利之处。此外,没有什么好笑的,我是 SO 上 SK 框架最活跃的贡献者之一
-
@Knight0fDragon 我正在努力做到这一点,以便我可以通过编程方式创建我的场景 - 你有什么建议以便我可以通过编程方式创建场景保持比例因子呢?跨度>
-
我不确定您所说的以编程方式创建场景并保持比例因子是什么意思。首先我要问,你打算为你的客户提供什么样的体验,你想让他们尽可能地接近体验吗?或者您是否计划让 4:3 设备的行为不同于 16:9 设备?
标签: ios swift sprite-kit skphysicsbody