ios - 调整 SKPhysicsBody 边缘的大小并让 children 在里面

标签 ios sprite-kit skphysicsbody skscene skphysicsworld

我有一个用 SKPhysicsBody(edgeLoopF​​rom:...) 创建的大矩形 SKPhysicsBody。在那个物理体内是一堆弹跳的球。出现通知时,我会在屏幕底部显示一个 View 。我想调整 SKPhysicsBody 的大小,以便球在屏幕上弹开此通知 View 。

我现在做的是

func updateWalls() {
    let wallInsets = UIEdgeInsetsMake(bottomWallInset, 0, 0, 0)
    scene.physicsBody = SKPhysicsBody(edgeLoopFrom:UIEdgeInsetsInsetRect(bounds, wallInsets))
}

换句话说,我只是将旧物理体替换为具有新维度的新物理体。这是有效的,除了如果任何球在旧尺寸和新尺寸之间的区域它们会被困住并从墙外弹回并掉出世界。

是否有一种优雅的方式来为新旧墙边界之间的过渡设置动画,以便位于底部的任何球都被“扫过”到新的维度中,并保证留在墙内? You can't scale an SKPhysicsBody directly .

最佳答案

在这种情况下,创建一个节点来表示通知可能更容易,而不是调整物理体的大小。也就是说,制作一个不渲染任何东西的 SKNode,将物理体附加到它上,大小与通知 View 相同,然后将节点与通知 View 一起移动。您可以以与 View 动画相同的速度为节点移动创建动画。这应该可以提供您需要的效果,同时减少混淆物理模拟的可能性。

关于ios - 调整 SKPhysicsBody 边缘的大小并让 children 在里面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42239104/

相关文章:

ios - 来自另一个类的调用方法不起作用 - iOS

ios - SpriteKit 物理在 iOS 9 上巨大的 FPS 下降

ios 模拟器 - 设置>通知>应用程序名称在哪里?

ios - SpriteKit 中火箭的烟雾效果

ios - AVAudioSession 未知

ios - 如何在 Sprite 工具包中使用新的每像素 SkPhysics Bodies

swift - SpriteKit 构建绳索功能不起作用

ios - 从粘贴板 IOS 检索视频

ios - Cordova iOS 应用程序中滚动的灰色背景

ios - 迅速3错误:参数标签'(_ :)'与UICollectionViewLayout(转盘)上任何可用的重载都不匹配