【问题标题】:Spritekit node jitters while moving.... why?Spritekit 节点在移动时抖动.... 为什么?
【发布时间】:2014-12-30 16:53:43
【问题描述】:

我尝试使用 SKAction 使节点移动,但每当我添加节点并移动它时,它就会像疯了一样沿着 y 轴上下抖动!

有什么想法吗?

我尝试过使用 MoveToY、MoveTo 等。但不知道是什么导致了抖动。

谢谢..

-(void)addEnemy{
    enemy = [SKSpriteNode spriteNodeWithImageNamed:@"enemy"];
    enemy.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(40, 40)];
    enemy.physicsBody.dynamic = YES;
    enemy.physicsBody.usesPreciseCollisionDetection = YES;
    enemy.physicsBody.categoryBitMask = enemyHitCatagory;
    enemy.physicsBody.contactTestBitMask = bulletHitCatagory;
    enemy.physicsBody.collisionBitMask = bulletHitCatagory;

    enemy.position = CGPointMake(random() % 300, CGRectGetMaxY(self.frame));
    enemy.size = CGSizeMake(40, 40);
    enemy.zPosition = 5;
    SKAction *attack = [SKAction moveTo:(CGPointMake(20, 300)) duration:(3)];
    [enemy runAction:[SKAction repeatAction:attack count:1]];


    [self addChild:enemy];

}

【问题讨论】:

  • 如果我让enemy.physicsBody.dynamic = NO 那么它不会抖动但我没有碰撞检测...
  • 你试过加enemy.physicsBody.restitution = 0吗?并为它击中的任何物理体设置相同的值?在我看来,你的敌人只是从一个物理身体上弹回来。默认情况下,物理体的恢复值为 0.2。
  • 太棒了!这似乎已经解决了!谢谢!! @pasta12
  • 太棒了!我会把它作为你接受的答案:)
  • 动态身体 + 移动动作 = 不是一个好主意。如果您希望节点表现得像物理对象,请考虑物理应该控制节点的位置和旋转属性。尽管建议的解决方法适用于这种特殊情况,但您今后可能会遇到更多问题。

标签: ios objective-c sprite-kit


【解决方案1】:

发生这种情况是因为物理物体正在碰撞。默认情况下,SKPhysicsBody 有一个 restitution0.2,使它有点弹性。设置enemy.physicsBody.restitution = 0 并对你的敌人正在碰撞的物理物体做同样的事情应该可以解决你看到的抖动。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多