我正在编写太空入侵者克隆,我正在努力创造子弹 每当我点击Space时,一个子弹应该被添加到向量中然后我想通过循环移动它们,但我不明白如何以正确的方式创建和处理它。
vector<Bullet> bullets(MAXBULLETS);
int bulletcounter = 0;
while (1) {
Sleep(10);
for (int i = 0; i < sizeof(bullets)-1; i++) {
bullets[i].Move(0, 1);
}
if (GetAsyncKeyState(VK_SPACE)) {
Bullet *bullet = new Bullet();
bullets[bulletcounter] = bullet; // Here is the error
bulletcounter++;
}
答案 0 :(得分:4)
bullets
是一个包含Bullet
类型对象的向量。
Bullet *bullet = new Bullet();
bullets[bulletcounter] = bullet; // Here is the error
此处bullet
此类型为Bullet*
。这两种不兼容的类型可以解决错误。
要解决此问题,请停止使用指针并仅实例化对象:
Bullet bullet;
这会使用无参数构造函数创建一个Bullet
对象,然后您可以将其添加到bullets
。
请注意,由于您初始化向量并为其指定预定义大小bullets(MAXBULLETS)
,因此目前无效,这已为您创建MAXBULLETS
默认构造对象,随时可用:
使用计数默认插入的T实例构造容器。 没有制作副本。
旁注:完全停止使用new
;这不是Java或C#。如果需要动态分配的对象,则使用智能指针。但是,大多数情况下,对象自动存储持续时间会很好。
答案 1 :(得分:0)
我的建议
vector<Bullet> bullets;
while (1)
{
Sleep(10);
for (int i = 0; i < bullets.size(); i++)
{
bullets[i].Move(0, 1);
}
if (GetAsyncKeyState(VK_SPACE))
{
bullets.push_back(Bullet());
}