添加 SKPhysicsBody 会导致 SKSpriteNode 抖动
Posted
技术标签:
【中文标题】添加 SKPhysicsBody 会导致 SKSpriteNode 抖动【英文标题】:Adding SKPhysicsBody causes the SKSpriteNode to shake 【发布时间】:2015-11-30 18:27:48 【问题描述】:我有两个SkSpriteNodes
,分别称为left-ball
和right-ball
。它们从屏幕两侧流出。
我为这两个球实现了collision detection
。但是我注意到,在我添加碰撞检测之前,球运动平稳,没有任何晃动效果,但在我添加碰撞检测后,球在晃动并在其路径中移动。
我对这两个球使用相同的位类别:
static const int ballHitCategory = 1;
不摇晃:
摇晃:
这是我在代码中尝试过的:
_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 的情况下添加碰撞检测的正确方法是什么?
【问题讨论】:
【参考方案1】:所以你使用非物理代码移动精灵。但它们仍然是物理模拟的一部分。我猜他们是在与重力作斗争。
将每个精灵上的 affectedByGravity
设置为 false
或者您可以在游戏中完全关闭重力
[self.physicsWorld setGravity:CGVectorMake(0, 0)];
【讨论】:
那么我们什么时候需要重力? 让我们说当两个球互相撞击时,我希望它们掉下来,在这种情况下我需要重力吗? @hamobi 你可以手动设置他们的速度下降..或者如果你想让它看起来更自然你可以使用重力。也许让你的物理世界有重力。使球在相互碰撞之前不受重力影响【参考方案2】:不用担心重力。你应该设置你的 spritenode:
_leftBall.physicsBody.dynamic=YES;
_leftBall.physicsBody.affectedByGravity=NO;
_rightBall 上也一样
【讨论】:
以上是关于添加 SKPhysicsBody 会导致 SKSpriteNode 抖动的主要内容,如果未能解决你的问题,请参考以下文章
iOS -- SpriteKit框架之SKPhysicsBody的移动和连接