为了定义矩形边缘,这是我编写的代码:
-(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
。
最佳答案
目前,SpriteKit 默认从 .sks 文件加载场景,并且默认场景大小设置为 1024x768。这可能就是为什么您会得到意想不到的结果(self.frame
与 View 相比具有不同的大小)。
这些天你应该记住一些事情:
从 .sks 文件加载场景时,永远不会调用
initWithSize
:。 initWithCoder: 被调用。如果您想使用initWithSize
:您应该以“旧”方式创建场景 - 使用 sceneWithSize:在
initWithSize
中: View 始终为零,因此所有需要 View 的代码都应移至didMoveToView
。在
viewDidLoad
中, View 的最终大小可能还不知道。可以使用viewWillLayoutSubviews
的正确实现来解决这个问题。了解更多 here .
我建议您使用 sceneWithSize
: 方法在 viewWillLayoutSubviews
中创建一个场景,并使用 view.bounds.size
对其进行初始化。之后,您可以像这样创建边框:
self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];
提示:启用视觉物理表示可能很有用。您可以从 View Controller 执行此操作:
skView.showsPhysics = YES;
如果这一切都没有帮助,请检查您的 View 大小是否正确。如果提供了错误的启动图像, View 的大小可能会错误。
希望这有帮助并且有意义。
关于ios - SpriteKit - Edge 的行为不符合预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31914383/