SKAction scaleXTo:-1

我想用SKAction *mirrorDirection = [SKAction scaleXTo:-1 y:1 duration:0.0];镜像我的SKSpriteNode SKAction *mirrorDirection = [SKAction scaleXTo:-1 y:1 duration:0.0]; 但是每次我做的时候,这个精灵的物理体就会变得混乱起来,从屏幕上掉下来。 我在精灵下面有几个物体(楼层),它们落在所有的物体上,好像它们不在那里一样。

这只发生在我镜像精灵的时候。 有人知道怎么修这个东西吗?

更新:作为一个答案build议重置物理机构不幸的是没有解决这个问题。 似乎只有物理机构的接触部分出现故障。 当小家伙像一块石头一样落下时,引力仍然有效果。

我也尝试重新由self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(self.size.width, self.size.height)];

self.xScale = -1; 但是这也没有解决这个问题。

将您的镜像节点添加为某个常规SKNode的子节点,并在此父节点上设置物理体而不是负面缩放节点。

我不知道如何解决这个问题,但我想build议一种方法,你可以创build一个镜像精灵。

为了达到这个目的,将你的精灵节点的x或y比例设置为-1。 然后使用SKView方法textureFromNode:从这个镜像节点创build一个纹理。

然后,您可以使用此纹理来创build镜像的新的精灵节点,但不需要任何负缩放。

不要使用SKAction,直接将其设置为SKSpriteNode的xScale属性即可。

 self.yourSprite.xScale = -1; 

Roecrew直接设置xScale属性是正确的。 我build议你试试这个:

 node.xScale = -1; node.physicsBody = node.physicsBody; 

每次更改xScale属性时,都需要“重置”physicsBody。

physicsBody的xScale问题是SpriteKit中的一个错误,但是我能够使用第二行“保留”physicsBody。

我遇到了和你一样的问题。 我花了大约2个小时搞清楚了。

只要你scaleX后初始化你的physicsBody,我不知道为什么,但我通过这样做纠正这个问题。

 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; } 

记得重新分配你所有的类别和一切像你以前init。

我希望有人在spritekit亲可以告诉我为什么….