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亲可以告诉我为什么….