为了定义矩形边,这是我写的代码:
-(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
。
答案 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;
如果这一切都没有帮助,请检查您的视图是否尺寸正确。如果提供了错误的启动图像,则视图的大小可能会错误。
希望这有帮助并且有意义。