gpt4 book ai didi

ios - 在 SpriteKit 中处理不同的 iOS 设备分辨率

转载 作者:IT王子 更新时间:2023-10-29 07:36:40 26 4
gpt4 key购买 nike

我在 Xcode 6、iOS 8 beta 5 中玩弄 SpriteKit。在 iPhone 4S 模拟器上一切都已布置并完美运行,但是当切换到 5S 时,屏幕底部的元素被剪切离开。

据我了解,iPhone 屏幕的左下角应该是 CGPoint(0, 0) 但是在通过将坐标打印到控制台来检查位置后,我可以点击的左角最低点在附近(5, 44)。是不是我的场景设置有问题导致了这种情况?

没有对 GameViewController 文件进行任何更改,即使在我剥离 GameScene 文件后问题仍然存在。

至少有人能用这个给我指明正确的方向吗?

最佳答案

添加以下代码解决您的问题(代码在 Swift 中):

scene.scaleMode = SKSceneScaleMode.ResizeFill

现在,如果您想知道为什么这可以解决您的问题、您的实际问题是什么以及如何处理多个解决方案——我建议您继续阅读。

有三件事会影响场景中节点的位置。

1) anchor
确保场景的 anchor 设置为 (0,0) 左下角。默认情况下,场景的 anchor 从 (0,0) 开始,所以我假设这不会导致问题。

2) 大小
检查场景的大小。我通常让我的场景大小与设备的大小相匹配(即 iPad、iPhone 4 英寸、iPhone 3.5 英寸),然后我在场景中放置另一个层来存储我的节点。这使我能够为分辨率较小的设备制作滚动效果,但这当然取决于您的游戏。我的猜测是您的场景大小可能设置为 320、480,这可能会导致您的 iPhone 5s 出现定位问题。

3) 缩放模式
缩放模式对场景中节点的定位有巨大影响。确保将缩放模式设置为对您的游戏有意义的模式。当您的场景大小与 View 大小不匹配时,缩放模式就会启动。所以缩放模式的目的就是让Sprite Kit知道如何处理这种情况。我的猜测是您将场景大小设置为 320,480 并且正在缩放场景以匹配 iPhone 5 View ,这将导致与您描述的相同的定位问题。以下是您可以为场景设置的各种缩放模式。

SKSceneScaleMode.AspectFill

The scaling factor of each dimension is calculated and the larger of the two is chosen. Each axis of the scene is scaled by the same scaling factor. This guarantees that the entire area of the view is filled, but may cause parts of the scene to be cropped.


SKSceneScaleMode.AspectFit

The scaling factor of each dimension is calculated and the smaller of the two is chosen. Each axis of the scene is scaled by the same scaling factor. This guarantees that the entire scene is visible, but may require letterboxing in the view.


SKSceneScaleMode.Fill

Each axis of the scene is scaled independently so that each axis in the scene exactly maps to the length of that axis in the view.


SKSceneScaleMode.ResizeFill

The scene is not scaled to match the view. Instead, the scene is automatically resized so that its dimensions always matches those of the view.


结论
看起来您想删除场景的缩放比例,这样您在场景中的位置将与 View 中的实际位置相匹配。您可以将场景的大小设置为与 View 大小相匹配,在这种情况下不会发生缩放。或者您可以将场景的缩放模式设置为 ResizeFill,这将使场景的大小始终与 View 的大小相匹配,并且不会缩放任何内容。一般来说,我会远离任何缩放,而是调整界面和场景大小以最适合每个设备。您可能还想添加缩放和/或滚动以允许分辨率较小的设备实现相同的视野。


但是如果我想缩放我的场景怎么办?
但是,如果您需要缩放场景,但您仍然希望位置相对于 View (即即使场景被截断,您也希望 (0,0) 位于屏幕的左下角)然后查看我的回答 here


附加信息
查看答案 here用于显示我如何动态布局节点的示例代码。

查看答案 here有关扩展以支持多个设备的更多详细信息。

关于ios - 在 SpriteKit 中处理不同的 iOS 设备分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25205882/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com