void Bullet::step(float gameTime, float deltaTime) { Point2f delta = dest_pos - pos; float len; if (!bExplode) { len = delta.DotProduct(); if (len < 1) { bExplode = false; explodePos = pos; Explode(gameTime); return; } } else { bExplode = false; Explode(gameTime); return; } Point2f vel = delta.Normalize(min(sqrtf(len) / deltaTime, speed));// 可能引发爆发事件 collisionEntity.getBody().setVelocity(vel); collisionEntity.getBody().Update(deltaTime); }
void Bullet::Explode(float gameTime) { Explosive *e = new Explosive(graphicEntity.animResManager); Point2f delta = dest_pos - pos; float len = delta.DotProduct(); if (len > 1) { delta = delta.Normalize(speed); } e->orientation = orientation; e->init("data/tank/bulletexplode.xml", gameTime, gun->explosive); e->setPostion(explodePos, explodePos + delta); EntityManager::getSingleton().attach(e); active = false; }