1

我正在尝试使用 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;但这也没有解决问题。

4

5 回答 5

2

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

于 2014-03-29T01:57:46.893 回答
0

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

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

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

于 2014-03-28T02:42:10.013 回答
0

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

self.yourSprite.xScale = -1;
于 2014-03-28T03:02:44.667 回答
0

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

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

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

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

于 2014-03-28T06:45:35.617 回答
0

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

只需在 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 的专业人士可以告诉我原因....

于 2014-09-19T14:56:57.223 回答