gpt4 book ai didi

ios - SpriteKit - Edge 的行为不符合预期

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:00:15 24 4
gpt4 key购买 nike

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

-(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.mclass 有 -(id)initWithSize:(CGSize)size 而不是 -(void)didMoveToView:(SKView *)view

最佳答案

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

最近有几件事你应该牢记:

  • 从 .sks 文件加载场景时,initWithSize: 永远不会被调用。 initWithCoder: 被调用。如果您想使用 initWithSize:您应该以“旧”方式创建场景 - 使用 sceneWithSize:

  • initWithSize 中: View 始终为 nil,因此所有需要 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com