gpt4 book ai didi

ios - Sprite 套件。与与重力相反的 applyForce 混淆

转载 作者:行者123 更新时间:2023-12-01 18:49:59 24 4
gpt4 key购买 nike

我使用下面列出的代码作为 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 相同。

如果有人知道这里发生了什么,请帮忙!

最佳答案

比方说,SpriteKit 中有 150 比 1 的点与米的比例。如果我们创建一个大小为 150*150 的物体,那么质量就是 1。好的,很好,我们有一个质量等于 1.0,我们自己不改变它。但是,接下来我们再次施加与重力相反且大小相同的力。在这种情况下, body 会再次下降。不好。

好的,150/1 是点对米,我们需要将力乘以 150 来平衡力。我们可能会开始思考“嗯,其中一定有一些线索”。可能是重力矢量(0,-9.8)影响的不是公斤,不是米,而是点!好吧,让我们拥有 150*150 点的主体。为了平衡我们需要的力量(理论上):

一方面重力:9.8牛顿(千*米)/秒^2)

另一方面,我们应用力:(1.0 公斤) * 9.8 * (150 点)/(sec^2)

所以,这里我们错过了 150。无论如何,这似乎有点愚蠢,但 applyForce 以 ((points * kg)/sec ^ 2) 为单位,但重力加速度以牛顿 ((kilo * 米)/sec 为单位^ 2) (尽管它在文档中被描述为每秒米。每秒米!加速度!)。将其乘以质量并获得力。

关于ios - Sprite 套件。与与重力相反的 applyForce 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31858973/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com