这似乎是苹果的一个重大疏忽,但由于SKPhysicsJoints的锚点设置在场景坐标中,这使得做任何类型的滚动游戏都是不可能的。
若要在SpriteKit中模拟摄影机,可以创建一个包含所有游戏元素的WorldNode,然后在场景周围平移。不幸的是,这样做会导致游戏中每个对象的场景坐标在平移世界时在每一帧上都会发生变化。反过来,这破坏了联合锚点,事情变得疯狂。
甚至没有一种方法来改变关节的锚点,所以我甚至没有一种方法来更新每帧的坐标。在滚动游戏中使用SKPhysicsJoint似乎不是一个好的选择。
有没有人知道解决这个问题的办法?
发布于 2014-07-10 07:13:19
好吧,我想我搞清楚了到底是怎么回事,我的最初假设是完全错误的。我的锚点看起来不正确的原因是因为convertPoint toNode调用返回给我的场景坐标不正确。几个小时后,我意识到它的误差正好是屏幕尺寸的一半。我的场景的anchorPoint为(0.5,0.5),但这会破坏转换值。因此,如果我简单地将点偏移width/2,height/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];https://stackoverflow.com/questions/24661940
复制相似问题