我有两个 SkSpriteNodes 称为 left-ballright-ball 。它们从屏幕两侧流出。

我为这两个球实现了 collision detection。但是我注意到在我添加碰撞检测之前,球在没有任何抖动效果的情况下平滑移动,但是在我添加碰撞检测之后,球在它们的路径中抖动并移动。

我对这两个球使用相同的位类别:

   static const int ballHitCategory = 1;

无抖动:

ios - 添加 SKPhysicsBody 导致 SKSpriteNode 抖动-LMLPHP

颤抖:

ios - 添加 SKPhysicsBody 导致 SKSpriteNode 抖动-LMLPHP

这是我在代码中尝试的内容:
_leftBall.physicsBody=[SKPhysicsBody bodyWithRectangleOfSize:_leftBall.frame.size];
_leftBall.physicsBody.categoryBitMask=ballHitCategory;
_leftBall.physicsBody.contactTestBitMask=ballHitCategory;
_leftBall.physicsBody.collisionBitMask=ballHitCategory;
_leftBall.physicsBody.dynamic=YES;
_leftBall.physicsBody.usesPreciseCollisionDetection=YES;

 _rightBall.physicsBody=[SKPhysicsBody bodyWithRectangleOfSize:_rightBall.frame.size];
_rightBall.physicsBody.categoryBitMask=ballHitCategory;
_rightBall.physicsBody.contactTestBitMask=ballHitCategory;
_rightBall.physicsBody.collisionBitMask=ballHitCategory;
_rightBall.physicsBody.dynamic=YES;
_rightBall.physicsBody.usesPreciseCollisionDetection=YES;




-(void)didBeginContact:(SKPhysicsContact *)contact
{

    _leftBall = (SKSpriteNode*)contact.bodyA.node;
    _rightBall = (SKSpriteNode *)contact.bodyB.node;

    if(_leftBall.physicsBody .categoryBitMask == ballHitCategory ||  _rightBall.physicsBody.categoryBitMask == ballHitCategory)
    {

        NSLog(@" hit the ");
        //setup your methods and other things here
        [_leftBall removeFromParent];
        [_rightBall removeFromParent];


    }
}

请注意,只有在添加碰撞检测后才会发生抖动,如果删除上述代码,则一切正常。

在不影响 skspritenode 的情况下添加碰撞检测的正确方法是什么?

最佳答案

所以你使用非物理代码移动 Sprite ......但它们仍然是物理模拟的一部分。我猜他们正在与重力作斗争。

要么将每个 Sprite 的 affectedByGravity 设置为 false

或者您可以完全关闭游戏中的重力

[self.physicsWorld setGravity:CGVectorMake(0, 0)];

关于ios - 添加 SKPhysicsBody 导致 SKSpriteNode 抖动,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34005449/

10-13 03:52