实际上,我正在为 iPad 创建一款益智游戏。我想创建一个包含所有拼图部分的移动 slider ,独立于游戏的其他元素。
我已经成功地在屏幕上创建拼图,周围有不同的拼图部件,用户可以用手指移动。要创建移动 slider ,我想使用我的主 .swift 文件中的指令。
addChild()
一个创建游戏的不同元素,站在屏幕上,另一个创建移动 slider 。我已经成功地做到了这一点, slider 上包含不同的拼图部件,但我无法使其水平移动,即使 slider 上有 touchMoved 功能也是如此。我创建了一个 4096 像素的大 slider ,我的场景大小固定为 2048 x 1536,并将 scene.scalemode 设置为 .AspectFill。我认为问题出在这里(也许)。
如果我创建一个更大的场景(如 4096 x 1536)并将 scene.scalemode 设置为 .Fill,我会在 iPad 上看到变形的图片。如何管理?
class GameViewController: UIViewController {
override func viewWillLayoutSubviews() {
// Configure the view.
let skView = self.view as! SKView
skView.showsFPS = true
skView.showsNodeCount = true
skView.ignoresSiblingOrder = true
let scene = GameScene(size: skView.frame.size)
scene.size.width = 4096
scene.size.height = 1536
/* Set the scale mode to scale to fit the window */
scene.scaleMode = .Fill
skView.presentScene(scene)
}
预先感谢您的帮助,
最佳答案
尽管标题和您的实际问题有所不同,但我认为您的问题是如何创建一个比呈现它的 UIView 更大的 SKScene。
SKScene 的大小是呈现 View (通常是 SKView 的实例)渲染它的点分辨率。这是在考虑 UIScreen 缩放之前的情况,因此全屏 iPad View 中 1024*768 的场景会以 2048*1536 渲染。仅当场景和包含的 SKView 实例的大小不同时,才会考虑 SKScene 的 scaleMode 属性。
在我看来,场景大小与 SKView 大小不同的场景很少见且异常(exception)。您可以分别将 SKView 和 SKScene 与 UIImageView 和 UIImage 进行比较。只有当宽高比不同时,scaleMode 才会影响 View 内 UIImage 的渲染/外观。
那么,如何创建比 View 更大的场景呢?这是一个技巧性问题,因为您不需要。
将 SKScene 的大小视为场景的视口(viewport)。场景内的 SKNodes 不限于仅位于场景视口(viewport)内。对于大小为 1024*768 的 SKScene,创建一个 SKSpriteNode(例如,大小为 20*20)并将其放置在以下位置是完全合法的:
- (0,0):您在左下角看到一个 10*10 点(或 20*20 像素)的正方形(四分之三隐藏在渲染之外)视口(viewport))
- (500,500):完全可见
- (1034,778):正好在右上角出界
关于ios - swift SpriteKit : How to make an horizontal moving slider larger than screen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37836507/