我希望当我创建所有精灵以在屏幕中居中时,但事实并非如此,当我将它设置为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项目的最佳设置吗?
答案 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)")
我不知道是否有任何帮助,但我希望它会引导你到某个地方。古德勒克!