我是一个相当聪明的人,但当我看到某种数学时,我还不如成为一个巨大的白痴。我真的可以在这里使用一些帮助。
在学习 iOS 游戏开发的过程中,我一直在研究大量的东西,并且在进行一些搜索时遇到了一个公式。这是公式:
x(t) = x(0) + v(0)*t + .5 (F/m) * t^2
还说明了求解 x 和 y:
Fx = (x(t) - x(0) - vx(0)*t) * 2m/t^2
Fy = (y(t) - y(0) - vy(0)*t) * 2m/t^2
资料来源: Box2D.org 论坛
现在对于我的实际问题,这是什么意思?请记住,在这种情况下,我是个白痴。如果有人能用简单的术语解释变量以及它们与 box2d 的关系,那就太好了。我将如何应用这个公式?这是我的代码示例(发射弹丸):
- (void)spawnProjectile:(CGPoint)from direction:(CGPoint)direction inParent:(CCNode*)parentNode
{
double curTime = CACurrentMediaTime();
double timeTillShotDies = curTime + SHOT_TYPE1_EXIST_TIME;
b2Body *shotBody = projectileBodyTracker[nextShot];
b2Vec2 moveToPosition = b2Vec2(from.x/PTM_RATIO, from.y/PTM_RATIO);
shotBody->SetTransform(moveToPosition, 0.0);
shotBody->SetActive(true);
CCSprite *shot = [projectiles objectAtIndex:nextShot];
shot.position = ccp(from.x/PTM_RATIO, from.y/PTM_RATIO);
shot.visible = YES;
[projectilesTracker replaceObjectAtIndex:nextShot withObject:[NSNumber numberWithDouble:timeTillShotDies]];
CCParticleSystemQuad *particle = [projectileParticleTracker objectAtIndex:nextShot];
[particle resetSystem];
nextShot++;
if(nextShot >= projectiles.count) nextShot = 0;
// dx2 and dy2 are analog stick values (see below code)
b2Vec2 force = b2Vec2(dx2, dy2);
shotBody->SetLinearVelocity(force);
[AudioController playLaserShot];
}
在这段特定的代码中,我从播放器以模拟所在的角度发射。我还需要使用公式从敌人向玩家开火。这是一个自上而下的太空射击游戏。
总而言之,我如何根据 box2d 代码解决 x 和 y 随时间变化的恒定力?
额外信息:
dx2 = (float)joypadBG2.position.x - (float)convertedPoint.x;
dy2 = (float)joypadBG2.position.y - (float)convertedPoint.y;
所有对象都预先加载并保持这种方式。身体被设置为非活动状态,精灵被设置为不可见。粒子系统停止。再次使用射弹则相反。
非常感谢您提供的任何帮助。我希望我没有忘记任何事情。