我想反映使用我SKSpriteNode SKAction *mirrorDirection = [SKAction scaleXTo:-1 y:1 duration:0.0];
但我每次做的时候,精灵的物理身体似乎变得一团糟并将其放到了屏幕。 我有多个对象(地板)精灵之下,它属于通过所有的人,如果他们是不存在。
这只有当我镜像精灵发生。 有人知道怎么修这个东西吗?
更新:正在重置物理身体作为一个答案建议可惜没能解决问题。 看来,只有身体的物理故障的接触部分。 随着小家伙下降像一块岩石重力仍然有效果。
我还试图复位通过再次self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(self.size.width, self.size.height)];
后右self.xScale = -1;
但这也并没有解决问题。
添加您的镜面能节点作为一些正规SKNode的孩子,并设置物理身体这个父节点,而不是负缩放的节点上。
我不知道如何解决,但我想建议你可以创建一个镜像精灵的一种方式。
为了实现这一目标设置你的精灵节点的x或y规模为-1。 然后使用SKView方法textureFromNode:这个镜像节点创建纹理。
然后,您可以使用此纹理创建一个镜像,但不需要任何负面缩放一个新的精灵节点。
不要使用SKAction,只需直接将其设置为SKSpriteNode的XScale属性。
self.yourSprite.xScale = -1;
Roecrew is right about setting the xScale property directly. I would suggest you try this:
node.xScale = -1;
node.physicsBody = node.physicsBody;
You will need to 'reset' the physicsBody each time you change the xScale property.
The xScale issue with physicsBody is a bug in SpriteKit, but I was able to 'retain' the physicsBody using the second line.
我正好符合这个问题像你。 我花了大约2个小时的数字出来。
只要你的初始化后physicsBody你的scaleX,我不知道为什么,但我做这样了解决此问题。
walkRight = [SKAction sequence:@[resetDirection,[SKAction runBlock:^{
[self changePhysicsDirectionRight];
}],[SKAction repeatActionForever: walk]]];
walkLeft = [SKAction sequence:@[mirrorDirection,[SKAction runBlock:^{
[self changePhysicsDirectionLeft];
}],[SKAction repeatActionForever: walk]]];
walkRight和walkLeft是我的动作改变方向时,及resetDirection和mirrorDirection正是我用于scaleXTo的操作:1和scaleXTo:1
我scaleXTo所以后,我用一个方法调用changePhysicsDirectionRight要重新初始化我physicBody像
- (void)changePhysicsDirectionRight{
self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(self.size.width,self.size.height)];
self.physicsBody.categoryBitMask = guyCategory;
self.physicsBody.contactTestBitMask = 0;
self.physicsBody.collisionBitMask = 0;
}
记得好像你之前初始化重新分配所有的类别和一切。
我希望有人在spritekit亲可以告诉我为什么....