SpriteKit - Edge没有按预期运行

时间:2015-08-10 07:57:40

标签: ios objective-c sprite-kit

为了定义矩形边,这是我写的代码:

-(void)didMoveToView:(SKView *)view {
/* Setup your scene here */

SKNode *edge = [SKNode node];

edge.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];

[self addChild:edge];

}

我想要这个边缘包裹整个屏幕,即底部,顶部,左边和右边。

我希望我添加到场景中的对象在所有边框上反弹。但是,这些物体只会在边缘的底部和顶部反弹。

P.S:相同的代码,大约在一年前SpriteKit GameScene.m班级有-(id)initWithSize:(CGSize)size代替-(void)didMoveToView:(SKView *)view

1 个答案:

答案 0 :(得分:3)

目前,SpriteKit默认从.sks文件加载场景,默认情况下,场景大小设置为1024x768。这可能是您获得意外结果的原因(self.frame与视图相比具有不同的大小。)

这些天你应该记住几件事:

  • 从.sks文件加载场景时,initWithSize:永远不会被调用。 initWithCoder:被调用。如果你想使用initWithSize:你应该在" old"中创建一个场景。方式 - 使用sceneWithSize:

  • initWithSize中:视图始终为零,因此需要视图的所有代码都应移至didMoveToView

  • viewDidLoad中,视图的最终大小可能尚未知晓。 viewWillLayoutSubviews的正确实现可用于解决此问题。阅读更多here

我建议您使用viewWillLayoutSubviews:方法在sceneWithSize内创建一个场景,并使用view.bounds.size进行初始化。之后,您可以创建如下边框:

self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];

提示:启用可视物理表示非常有用。您可以从视图控制器执行此操作:

skView.showsPhysics = YES;

如果这一切都没有帮助,请检查您的视图是否尺寸正确。如果提供了错误的启动图像,则视图的大小可能会错误。

希望这有帮助并且有意义。