奇怪的行为改变了图像位置

时间:2014-12-08 22:02:19

标签: ios swift sprite-kit

我是swift和SpriteKit的新手。

我加载了一张图片,我试图将图像放在顶部,但图像是" cutted"在顶部

Cut on the top

正如您在图像上看到的那样,窗口最大化,所以它似乎不是缩放问题。 看起来好像"吃掉了#34;前40个像素,我正在使用Iphone 4s仿真器。 如果我改用iphone 6,那就吃掉了#34;顶部有更多像素,是否有"使用顶部像素,如信息栏" ?

我正在使用的代码是,类似于我的代码,我在代码上循环:

options.append(SKSpriteNode(imageNamed:"help"))

//Reload anchor point to top up
options[0].anchorPoint=CGPoint(x:0, y:1)
//try to position the image on the top... BUT IT CUTS MY IMAGE ON THE TOP
options[0].position = CGPoint(x: 0, y: 0)
self.addChild(options[0])

//Set the scene configuration
self.backgroundColor=UIColor(hue: 0.33, saturation: 0.47, brightness: 0.91, alpha: 1)
self.anchorPoint=CGPoint(x: 0, y: 1)

1 个答案:

答案 0 :(得分:1)

我认为你通过改变周围的一切东西来使事情变得更加艰难。这使得概念化坐标系变得更加困难。如果你要直接在它上面放置精灵,你应该尽量避免改变场景本身的锚点。

通常,当你想让精灵围绕它的角落而不是它的中心旋转时,你会改变定位点。像这样的东西。如果您只是定位事物,那么保持默认值会更有意义。

这是确保我们的场景具有正确坐标的简便方法

<强> GameViewController.swift

import UIKit
import SpriteKit

class GameViewController: UIViewController {

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)

        // Configure the view.
        let skView = self.view as SKView
        skView.showsFPS = true
        skView.showsNodeCount = true

        /* Sprite Kit applies additional optimizations to improve rendering performance */
        skView.ignoresSiblingOrder = true

        /* Set the scale mode to scale to fit the window */
        let scene = GameScene(size: skView.bounds.size)
        scene.scaleMode = .AspectFill

        skView.presentScene(scene)

    }

    override func shouldAutorotate() -> Bool {
        return true
    }

    override func supportedInterfaceOrientations() -> Int {
        if UIDevice.currentDevice().userInterfaceIdiom == .Phone {
            return Int(UIInterfaceOrientationMask.AllButUpsideDown.rawValue)
        } else {
            return Int(UIInterfaceOrientationMask.All.rawValue)
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Release any cached data, images, etc that aren't in use.
    }

    override func prefersStatusBarHidden() -> Bool {
        return true
    }
}

<强> GameScene.swift

import SpriteKit

class GameScene: SKScene {


    override func didMoveToView(view: SKView) {

        self.backgroundColor = SKColor.clearColor()
        let sprite = SKSpriteNode(color: SKColor.redColor(), size: CGSize(width: 20, height: 20))
        // position sprite on top left corner of screen
        sprite.position = CGPoint(x: sprite.size.width/2, y: self.size.height - sprite.size.height/2)


        self.addChild(sprite)

    }

    override func update(currentTime: CFTimeInterval) {
        /* Called before each frame is rendered */
    }
}

尝试以此为出发点。默认情况下,spritekit设置为使用sks文件(关卡编辑器文件)作为场景的模板。我不认为你正在使用它。使用此代码,我们确保在创建场景时使用正确的尺寸初始化场景。