这似乎是Apple的主要疏忽,但由于SKPhysicsJoints在场景坐标中设置了锚点,因此无法进行任何类型的滚动游戏。
要在SpriteKit中模拟相机,您需要创建一个包含所有游戏元素的WorldNode,然后在场景周围平移。不幸的是,这样做会导致游戏中每个对象的场景坐标在平移世界时在每个帧上发生变化。反过来,这打破了关节锚点,事情变得狂暴。
甚至没有办法改变关节的锚点,所以我甚至没有办法只更新每一帧的坐标。似乎在滚动游戏中使用SKPhysicsJoint不是一种选择。
有没有人知道解决这个问题的方法?
答案 0 :(得分:3)
好吧,我想我弄明白发生了什么,而且我原来的假设完全不正确。我的锚点看起来不正确的原因是因为[convertPoint toNode]调用返回了我不正确的场景坐标。几个小时后,我意识到它只有一半的屏幕尺寸。我的场景的anchorPoint为(0.5,0.5),但这会搞砸转换值。所以,如果我只是按宽度/ 2,高度/ 2偏移点,那么它是正确的:
GPoint pt = CGPointMake(anchorWorldX, anchorWorldY);
pt = [gGameScene convertPoint:pt fromNode:gGameWorld]; // convert to scene coords, but it's WRONG
pt.x += scene.size.width * scene.anchorPoint.x; // this properly adjusts the value to be correct
pt.y += scene.size.height * scene.anchorPoint.y;
SKPhysicsJointPin* pin =[SKPhysicsJointPin jointWithBodyA:hinge.physicsBody bodyB:door.physicsBody anchor:pt];