Objective-C SpriteKit:CGVector中设置的值与实际的国际单位制(SI)之间的关系是什么?

时间:2014-07-31 20:48:10

标签: objective-c sprite-kit physics

在Apple Developer's Guide中,它说:

  

Sprite Kit使用国际单位制,也称为SI,   或米 - 千克 - 秒系统。必要时,您可能需要   在线咨询其他参考资料以了解更多相关信息   Sprite Kit

使用的物理方程

我正在开发一款带有蝙蝠的小游戏,当用户触摸屏幕时,它可以摆动翅膀。对于主菜单,我希望我的蝙蝠保持上下飞行,描述谐波振荡,如this video 01:43 to 01:46

代码

-(SKSpriteNode *)createBat:(float)scale {
    SKSpriteNode *bat = [SKSpriteNode spriteNodeWithImageNamed:@"bat_01"];
    bat.xScale = scale;
    bat.yScale = scale;
    bat.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:bat.size];
    return bat;
}

-(SKAction *)actionSwingWings {
    return [SKAction runBlock:^{
        [self.player.physicsBody setVelocity: CGVectorMake(0.0f, 450.0f)];
    }];
}

-(float)timeToReturnToInitialPositionAfterJump {
    /* CODE SUPPRESSED TO SPARE CHARACTERS
    ORIGINAL CODE CALCULATES BHASKARA WITH a=gravity/2, b=initSpeed=450.0 & c=0
    c=0 because I want my bat to swing wings again when he falls back to the last wing swing position
    The bhaskara function is tested and returning the correct values */
}

-(SKAction *)actionStationaryFly {
    return [SKAction repeatActionForever:
            [SKAction sequence:@[
                [self actionSwingWings],
                [SKAction waitForDuration:[self timeToReturnToInitialPositionAfterJump]]
            ]]
    ];
}

问题

主要想法是使用Bhaskara功能来了解每只机翼摆动之间必须等待多少时间,但它不起作用。我检查了计算和bhaskara函数是否一致。另一方面,蝙蝠行为不是。

我为这个应用程序选择了Bhaskara,因为positionChange = initialSpeed * time + 0.5 * speedUp * time * time,正如物理学在公式中告诉我们的那样。当positionChange = 0且时间> 0时,我应该得到机翼摆动间隔。

对于当前值: 比重= -9.8; initialVelocity = 450; 我的Bhaskara返回91.8,而只有当我将机翼摆动时间设置为0.6(每0.6秒一个机翼摆动)时,蝙蝠才显示出所需的行为。

为什么系统的行为如此?如果CGVectors代表SI所说的SI,那么实际的蝙蝠行为是否应该与基于它的速度和加速计算一致?

0 个答案:

没有答案