SpriteKit物理每次都会给出不同的结果

时间:2016-08-17 11:54:51

标签: ios objective-c sprite-kit game-physics

在我的游戏中,我创造了一些受重力影响的球。当游戏开始时,它们会从屏幕上掉下来并在底部获得它们的位置。没有其他力量适用于他们。

问题是我用精确的坐标,精确的物理属性创建这些球,如前一个,但结果不一样。它类似但不相同。但我认为它应该完全相同,因为每次值都相同。

您可以在下面这3张图片中了解我所说的内容。enter image description here enter image description here enter image description here

你知道为什么会这样吗?我该如何解决?

这就是我创建精灵节点的方法:

BallSpriteNode *sprite = [BallSpriteNode spriteNodeWithTexture:ballTexture];
sprite.xScale = scale;
sprite.yScale = scale;
sprite.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:sprite.size.width/2];
sprite.physicsBody.density = 1.0f;
sprite.physicsBody.restitution = 0;
sprite.physicsBody.dynamic = YES;
sprite.physicsBody.categoryBitMask =  ballHitCategory;
sprite.physicsBody.contactTestBitMask = ballHitCategory;
sprite.physicsBody.collisionBitMask = ballHitCategory;

CGPoint startPosition = CGPointMake(xPosition, yPosition);
sprite.position = startPosition;

[bounceScene addChild:sprite];

1 个答案:

答案 0 :(得分:2)

有很多因素使物理引擎不那么随意。

FPS极大地影响了随机性。在SKSpriteKit Physics中,SKScene中有一个Update方法,每个帧调用一次,并带有前一帧的时差。通常为了减少随机性,你必须以某种方式覆盖该方法。

或者使用其他可定制的物理引擎(Bullet Physics)。仅通过调整StepSimulation函数调用就可以很容易地得到相同的结果。