首先,我想说我还很缺乏经验,我上周才开始编程。
我正在开发我的第一个游戏(和C ++应用程序),我遇到了一个问题,并且没有设法解决它,我开始放弃了。
我可以正确地产生敌人,但现在我希望他们每个人每秒射击一次。我正在使用的代码如下:
for (int i = 0; i < 200; i++)
{
if (enemy_basic[i].getPositionY() >= -100 && enemy_basic[i].getPositionY() <= 900)
{
if (enemyBasicLaserNumber[i] < 200 && enemyLaserTimer[i].getElapsedTime().asSeconds() > 1)
{
enemy_laser[enemyBasicLaserNumber[i]].setPosition(enemy_basic[i].getPositionX(), enemy_basic[i].getPositionY());
enemyLaserTimer[i].restart();
enemyBasicLaserNumber[i]++;
cout << enemyBasicLaserNumber[i] << endl;
}
if (enemyBasicLaserNumber[i] >= 199) enemyBasicLaserNumber[enemyBasicNumber] = 0;
}
}
现在,我知道某处出现了问题,因为一旦屏幕上出现多个敌人,子弹就会不断重置给敌人(只要它只有1个敌人,它就能完美地运行),我仍然没有'我设法弄清楚需要改变什么,或者我是否需要以完全不同的方式做到这一点。
如果有人能指出我正确的方向或以某种方式帮助我,我将非常感激!
答案 0 :(得分:0)
您应该以更合适的面向对象的方式构建代码。您可以创建一个包含虚函数更新的基类Entity。它还应包含实体的引用/指针父级。
class SceneManager
{
public:
SceneManager();
virtual ~SceneManager();
//put your own parameters
Bullet& createBullet(/* */);
private:
//a list of pointers for polymorphism
boost::ptr_list<Entity> entities_;
};
class Entity
{
public:
Entity(SceneManager& smgr);
virtual ~Entity();
virtual void update(const float timedelta) = 0;
private:
const int id_;
static int count_ = 0;
protected:
SceneManager& smgr_;
//local scale, rotation
Transform transform_;
//position
Vector3d position_;
//the model,sprite representation
char drawable_;
};
class Enemy:public Entity
{
public:
Enemy(SceneManager& smgr);
virtual ~Enemy();
virtual void update(const float timedelta);
void shoot();
};
class Bullet:public Entity
{
public:
Bullet(SceneManager& smgr);
virtual ~Bullet();
virtual void update(const float timedelta);
};
void Enemy::update(const float timedelta)
{
//shooting each second
static float shootDelay = 1;
static Timer timer;
//check if timer has started
if(!timer.started)
timer.start();
//if the timer has reached the desired delay
if(timer.elapsed() > shootDelay)
{
shoot();
timer.restart();
}
}
void Enemy::shoot()
{
//create the bullet via the scenemanager
smgr_.createBullet(/******/);
}
此代码只是符号代码,您必须使用现有的库来实际实现该结构。这种编码方式主要用于Irrlicht和Ogre3D图形引擎,但也可以应用于游戏引擎的核心逻辑。