Ios SKAction scaleXTo:-1

Ios SKAction scaleXTo:-1,ios,sprite-kit,skspritenode,skphysicsbody,Ios,Sprite Kit,Skspritenode,Skphysicsbody,我正在尝试使用SKAction*mirrorDirection=[SKAction scaleXTo:-1 y:1 duration:0.0]镜像我的SKSpriteNode

我正在尝试使用
SKAction*mirrorDirection=[SKAction scaleXTo:-1 y:1 duration:0.0]镜像我的SKSpriteNode
这只有在我镜像精灵时才会发生。有人知道怎么解决这个问题吗

更新: 不幸的是,按照一个答案重置物理体并没有解决问题。似乎只有物理体的接触部分发生故障。当这个小家伙像石头一样下落时,重力仍然有影响

我还尝试再次通过
self.physicsBody=[skphysicsbodywithrectangleofsize:CGSizeMake(self.size.width,self.size.height)]重置


就在
self.xScale=-1之后但这也没有解决问题。

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

要实现此目的,请将精灵节点的x或y比例设置为-1。然后使用SKView方法从此镜像节点创建纹理


然后,您可以使用此纹理创建一个新的sprite节点,该节点被镜像,但不需要任何负缩放。

不要使用SKAction,只需将其直接设置为SKSpriteNode的xScale属性

self.yourSprite.xScale = -1;

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

node.xScale = -1;
node.physicsBody = node.physicsBody;
每次更改xScale属性时,都需要“重置”physicsBody

self.yourSprite.xScale = -1;

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

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

我遇到的问题与您的问题完全相同。我花了大约两个小时才弄明白

我不知道为什么,但我用这种方法纠正了这个问题

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的专业人士能告诉我…的原因。

您是否尝试过将镜像节点添加为常规SKNode的子节点,并将物理体设置在SKNode上而不是负比例节点上?尝试过您的建议,但不幸的是,小家伙仍然像石头一样掉落。也尝试过您的物理建议身体重置,但没有乐趣。physicsBody必须正常初始化至少一次,才能正常工作。正如我所说,一切正常,没有问题。当我镜像精灵时问题就开始了。@sangony你在做平台游戏吗?如果是这样,你有没有想过使用tmx映射?我正在使用应用程序平铺。这个选项可能会在简单的精灵上工作,但我有一堆动画预加载。。。走、跑、跳等。。。不幸的是,创建一个新的精灵会在游戏流程中造成明显的延迟。你是否担心纹理的生成会导致延迟,或者只是失去在动画中的位置而导致跳跃?我建议在加载序列中生成任何纹理,并重用该纹理,这将缓解第一个问题。尽管编写代码很繁琐。希望苹果能在未来的更新中解决这个问题。谢谢你的帮助和建议!