在场景中定位精灵

时间:2015-02-20 12:32:44

标签: position sprite-kit skspritenode skscene

我希望当我创建所有精灵以在屏幕中居中时,但事实并非如此,当我将它设置为CGPointMake(self.size.width / 2, self.size.height / 2)时,我有一个精灵它会垂直居中但是不是水平的,当我将它设置为CGPointMake(0, 0)时,它设置在屏幕的底部,只有一半的身体可见(这是你所期望的)但水平它没有正确定位(他的垂直身体的一半出现),直到我将它的X设置为300。 为什么精灵的Y位置设置得恰到好处但是X没有?

scene.scaleMode = .AspectFill

我还没有设置任何anchorPoint,4'屏幕。

更新:

我使用Portrait,使用不同的scaleMode进行游戏,发现在左下方设置精灵的完美(0,0)是:

scene.scaleMode = .ResizeFill

它也可以在不同的屏幕尺寸下正常工作,但(self.size.width / 2)将它放在左侧。你认为它是所有SpriteKit Portrait项目的最佳设置吗?

1 个答案:

答案 0 :(得分:1)

我试图重现你所说的内容,但我不能使用.sks文件或不加载scene。此外,我在7.1和8.1模拟器上都取得了良好的效果......事实上,模拟器有时可能很棘手而且不是100%可靠,所以你不应该相信它们。

我不知道这是否会对你有所帮助,但你应该考虑一下......在Xcode 5中,项目场景是以编程方式创建的,具有视图的大小。基本上它是在viewDidLoad方法中完成的,如下所示:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Configure the view.
    SKView * skView = (SKView *)self.view;
    skView.showsFPS = YES;
    skView.showsNodeCount = YES;

    // Create and configure the scene.
    GameScene * scene = [GameScene sceneWithSize:skView.bounds.size];
    scene.scaleMode = SKSceneScaleModeAspectFill;

    // Present the scene.
    [skView presentScene:scene];
}

或使用像LearnCocos2D这样的viewWillLayoutSubviews指出:

- (void)viewWillLayoutSubviews
{

    [super viewWillLayoutSubviews];


    // Configure the view.
    SKView * skView = (SKView *)self.view;
    skView.showsFPS = YES;
    skView.showsNodeCount = YES;
    skView.showsDrawCount = YES;
    //skView.showsQuadCount = YES;

    skView.showsPhysics = YES;
    skView.ignoresSiblingOrder = YES;

    if(!skView.scene){
        // Create and configure the scene.
        GameScene * scene = [GameScene sceneWithSize:skView.bounds.size];

        scene.scaleMode = SKSceneScaleModeAspectFill;

        // Present the scene.
        [skView presentScene:scene];
    }


}

但Xcode 6使用SKS文件:

override func viewDidLoad() {
  super.viewDidLoad()
  if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
    // 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 */
    scene.scaleMode = .AspectFill
  }
}

如果查看GameScene.sks,您会发现默认场景大小为1024x768。

尝试打印场景大小以及视图的边界大小以查看实际大小。你可以使用类似的东西:

println("view.bounds\(view.bounds), self.size\(self.size)")

我不知道是否有任何帮助,但我希望它会引导你到某个地方。古德勒克!