缩放 SpriteKit 游戏

Posted

技术标签:

【中文标题】缩放 SpriteKit 游戏【英文标题】:Scaling SpriteKit game 【发布时间】:2016-07-02 17:18:15 【问题描述】:

使图像适合蓝色框的最佳方式是什么?游戏是基于像素的,所以我也想保持像素化的外观。

【问题讨论】:

...使用 Aspect Fit 缩放模式? 我在 self.view 上调用它吗?这会扩展所有节点吗? 【参考方案1】:

根据实际的 Swift 2.2 可以找到:

@available(ios 7.0, *)
public enum SKSceneScaleMode : Int 

    case Fill /* Scale the SKScene to fill the entire SKView. */
    case AspectFill /* Scale the SKScene to fill the SKView while preserving the scene's aspect ratio. Some cropping may occur if the view has a different aspect ratio. */
    case AspectFit /* Scale the SKScene to fit within the SKView while preserving the scene's aspect ratio. Some letterboxing may occur if the view has a different aspect ratio. */
    case ResizeFill /* Modify the SKScene's actual size to exactly match the SKView. */
 

例如,您可以在 viewController 中执行此操作:

override func viewDidLoad() 
        super.viewDidLoad()

        if let scene = PreloadScene(fileNamed:"PreloadScene") 
            // Configure the view.
            let skView = self.view as! SKView
            ...
            /* Set the scale mode to scale to fit the window */
            scene.scaleMode = .AspectFit 
            ...
            skView.presentScene(scene)
        
    

或者从一个SKScene 转换到另一个SKScene

let transition = SKTransition.doorsOpenVerticalWithDuration(0.5)
let nextScene = MainScene(size: self.scene!.size)
nextScene.scaleMode = .AspectFit
self.scene?.view?.presentScene(nextScene, transition: transition)

【讨论】:

由于某种原因,AspectFit 没有给我任何信箱,看起来与 AspectFill 完全相同。 尝试在您的问题中添加一些代码以更好地理解您的问题。【参考方案2】:

您可以将您的精灵缩放到蓝色框。

func fitToBlueBox(节点:SKSpriteNode,blueBox:SKSpriteNode) let actualScale = min(blueBox.size.width/node.size.width, blueBox.size.height/node.size.height) 节点.setScale(actualScale);

【讨论】:

以上是关于缩放 SpriteKit 游戏的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit Sprite 无法正确缩放

带有SpriteKit的iOS通用设备应用程序,如何为所有视图缩放节点?

SpriteKit 捏缩放相机

我怎样才能通过像 Cocos2D 这样的 SpriteKit 倾斜/剪切精灵?

SpriteKit 游戏物理滞后

暂停 SpriteKit 游戏 - UIApplicationWillResignActive 与 UIApplicationDidBecomeActive?