[英]SKAction scaleXTo:-1
我正在尝试使用SKAction *mirrorDirection = [SKAction scaleXTo:-1 y:1 duration:0.0];
来镜像我的SKSpriteNode SKAction *mirrorDirection = [SKAction scaleXTo:-1 y:1 duration:0.0];
但是每次我这样做时,子画面的物理物体似乎都被弄乱了,并从屏幕上掉了下来。 我在精灵下面有几个对象(地板),它掉落在所有对象之间,好像它们不在那里一样。
这仅在我镜像精灵时发生。 有人知道怎么修这个东西吗?
更新:不幸的是,建议将物理物体重置为一个答案不能解决问题。 看来只有物理物体的接触部分会发生故障。 小家伙像石头一样掉落,重力仍然有作用。
我也尝试过再次通过self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(self.size.width, self.size.height)];
进行重置self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(self.size.width, self.size.height)];
在self.xScale = -1;
但这也不能解决问题。
将可镜像节点添加为某些常规SKNode的子节点,然后在此父节点(而不是负缩放节点)上设置物理主体。
我不知道如何解决此问题,但我想提出一种创建镜像子画面的方法。
为了达到这个目的,请将您的精灵节点的x或y比例设置为-1。 然后使用SKView方法textureFromNode:从此镜像节点创建纹理。
然后,您可以使用此纹理创建一个新的sprite节点,该节点已镜像但不需要任何负缩放。
不要使用SKAction,只需将其直接设置为SKSpriteNode的xScale属性即可。
self.yourSprite.xScale = -1;
Roecrew关于直接设置xScale属性是正确的。 我建议您尝试一下:
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的专业人士可以告诉我为什么....
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.