【发布时间】:2015-08-06 14:50:54
【问题描述】:
我使用下面列出的代码作为 SpriteKit 的实验。我所做的是对它施加与重力效应相同的力,但使用反平行矢量(物体质量设置为 1.0)。该函数通过更新函数在每一帧上执行。我希望对象根本不会移动,因为 applyForce 和重力会相互补偿。
-(void)didMoveToView:(SKView *)view {
self.anchorPoint = CGPointMake(0.5, 0.5);
SKShapeNode *node = [SKShapeNode shapeNodeWithRect:CGRectMake(0,0,WIDTH, HEIGHT)];
node.position = CGPointMake(30, 280);
node.strokeColor = [SKColor whiteColor];
node.fillColor = [SKColor purpleColor];
node.name = @"node";
CGSize sz = node.frame.size;
node.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:sz center:[GameScene Center]];
node.physicsBody.restitution = 0.3;
node.physicsBody.mass = 1.0;
node.physicsBody.affectedByGravity = YES;
self.figure = node;
[self addChild:node];
self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];
}
-(void)update:(CFTimeInterval)currentTime {
[self.figure.physicsBody applyForce:CGVectorMake(
- self.physicsWorld.gravity.dx,
- self.physicsWorld.gravity.dy)];
但是,物体会像仅受重力影响一样落下。我用日志检查了质量,它始终是 1.0
经过一些实验,我发现它有一个神奇的数字。是 150。如果使用下一个更新方法,对象被休息:
-(void)update:(CFTimeInterval)currentTime {
[self.figure.physicsBody applyForce:CGVectorMake(
- self.physicsWorld.gravity.dx,
-150 * self.physicsWorld.gravity.dy)];
另外,如果物体尺寸为 150*150,质量会自动计算为 1.0。无论如何,这无济于事。行为与我们直接将质量设置为 1 相同。
如果有人知道这里发生了什么,请帮忙!
【问题讨论】:
标签: ios objective-c iphone sprite-kit