Nuk*_*ker 11 game-physics ios sprite-kit
我用物理机身创建了一个SpriteKit场景.这工作得很好.我也在使用带有"相机节点"的Apple最佳实践滚动场景.
我的场景节点树是这样的:
Scene
|- World
|- Camera node
|- Game nodes with physics bodys
Run Code Online (Sandbox Code Playgroud)
我的问题是,在游戏过程中,我动态地创建了具有新关节(大多数是固定关节)的新节点.此时,世界节点的位置与开始时的位置不同(例如:在开始时(0,0),在游戏期间(1000,500)..)现在,固定关节的锚点不在我希望它的位置,它在场景中的某个地方.
我假设,场景的坐标系与物理引擎的坐标系不同.
对于锚点,我使用以下转换:
[world.scene convertPoint:node.position fromNode:node.parent];
Run Code Online (Sandbox Code Playgroud)
我想将锚点设置在"节点"的位置.移动世界节点后,锚点的计算不再起作用.
谢谢你的帮助!
格雷茨 - 内克罗
更新:
在播放器上居中场景的代码
- (void)centerOnNode:(SKNode*)node {
CGPoint cameraPositionInScene = [node.scene convertPoint:node.position fromNode:node.parent];
node.parent.position = CGPointMake(node.parent.position.x - cameraPositionInScene.x, node.parent.position.y - cameraPositionInScene.y);
}
Run Code Online (Sandbox Code Playgroud)
使用具有 SpriteKit 物理特性的关节有两个要求:
从您的问题和评论来看,听起来您的第一点是正确的:当关节位于不是场景直接子节点的节点之间时,您需要在使用它们定义关节之前将坐标转换为场景空间。
然而,当您尝试移动根坐标系时,SpriteKit 物理特性无法很好地处理它。因此,通过移动世界来实现“相机”会给关节带来麻烦。反而:
如果您有能力仅以 iOS 9.0 / OS X 10.11 / tvOS 9.0 及更高版本为目标,请使用SKCameraNode而不是移动世界。这也更容易!
(如果您想知道是否只能支持 iOS 9,请检查采用率统计数据,并与您的开发计划进行比较……如果您暂时不会发布,iOS 9 可能是“-1”操作系统完成后的版本。还请记住,热情的客户和早期采用者之间存在高度相关性。)
如果您仍然支持 iOS 8 / OS X 10.10,请尝试在场景中添加一个额外的层:通过移动作为场景子级和所有游戏内容父级的节点来伪造相机。
| 归档时间: |
|
| 查看次数: |
236 次 |
| 最近记录: |