我是一個相當聰明的人,但是當我看到某種算術時,我可能會成爲一個巨大的白癡。我真的可以在這裏使用一些幫助。Box2D(Cocos2D)隨着時間的推移恆定的力量
我一直在研究大量的事情,因爲我學習iOS遊戲開發,並且在搜索時遇到了一個公式。下面是式:
X(t)= X(0)+ V(0)* T + 0.5(F/M)* T^2
另外指出被求解x和y:
Fx的=(X(t) - X(0) - VX(0)* T)* 2米/噸^ 2
Fy的=(Y(T) - Y( 0)-vy(0)* t)* 2m/t^2
現在對於我的實際問題,這是什麼意思?請記住,在這種情況下,我是一個白癡。如果有人能夠用簡單的術語解釋這些變量以及它們與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;
所有對象都預裝,並保持這種方式。機構被設置爲不活動,精靈被設置爲不可見。粒子系統停止。再次使用拋射物的情況正好相反。
非常感謝您爲您提供的任何幫助。我希望我沒有忘記任何事情。
這是非常有用的,但我仍然有點麻煩理解如何將它應用到Cocos2D和Box2D。看到我對Emmanuel的答案的評論。 – 2011-06-14 15:21:48
請參閱編輯1.請注意,我從未使用過Box2D,但這些是如何建模對象運動的原理。 – 2011-06-15 07:52:26
這是完美的謝謝你!正是我需要的。這是一種我能理解的語言:) Box2D只是一種不知道物理學的物理學方法(無論如何,大部分都是這樣)。大多數情況下,當我在模擬世界中移動物體時,我會應用衝動或力量。據我所知,沒有固定的速度持續一定的時間。無論如何,謝謝。 – 2011-06-15 10:29:44