正如您在使用 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
}
}
答案 0 :(得分:0)
Sprite套件的设计方式只需要创建一次游戏。
"屏幕的概念"不应该存在,你的场景就是你的屏幕,而你的屏幕就是你的观看方式。
正如我们在聊天中所讨论的那样,你想要一个7:9的游戏区域,你希望场景沿着它的两侧齐平。
要执行此操作,请选择比较宽的场景大小。我推荐使用375:812,因为那是iPhone X. @ 1x。然后将一个节点放在其中,大小为375:482,因为那是7:9。
在常规的9:16设备上会发生什么,顶部和底部区域将被裁剪,但它仍将显示整个比赛场地,因为9:16设备的高度为667。
这意味着将从主游戏区垂直裁剪145个点。
现在我们遇到了iPad的问题,它比9:16设备更胖。
我们的可见场景区域变为375:500,我们的游戏区域几乎不适合。
我们只有18分可以合作,或者没有。
为了解决这个问题,我们需要进入故事板并更改视图的约束。
我们基本上需要强制视图不超过某个宽高比。
通过限制视图的大小,我们可以控制在iPad上进行多少裁剪。然后我们可以在SKView后面添加另一个视图来控制我们希望用户看到的任何图形。
我们现在的游戏设置方式可以将所有游戏区域内容放在375:482游戏区域节点内。
这些维度将贯穿所有设备,硬件将为您进行扩展,这意味着您将拥有更少的代码和更少的数学运算。更少的代码和更少的数学意味着错误进入你的游戏的机会更少,而且游戏完全相同的游戏玩法,这意味着iPad用户没有比iPhone用户更有优势,因为你给了他们更大的游戏区域。