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映射?我正在使用应用程序平铺。这个选项可能会在简单的精灵上工作,但我有一堆动画预加载。。。走、跑、跳等。。。不幸的是,创建一个新的精灵会在游戏流程中造成明显的延迟。你是否担心纹理的生成会导致延迟,或者只是失去在动画中的位置而导致跳跃?我建议在加载序列中生成任何纹理,并重用该纹理,这将缓解第一个问题。尽管编写代码很繁琐。希望苹果能在未来的更新中解决这个问题。谢谢你的帮助和建议!