用c ++创建对象数组

时间:2017-06-20 08:32:07

标签: c++ sdl-2

我正在使用c ++和SDL2制作一个简单的平台游戏。在为玩家制作碰撞检测功能时,我已经被困了一段时间了。我已经让它在屏幕的底部和侧面工作正常,但现在我正在尝试添加代码以检测与平台的冲突,但我不知道该怎么做。

我所拥有的是一个名为 basicPlatform 的类,其中包含 x y 。我想做的只是制作一个对象数组,这样我就可以拥有平台1,2,3等等,这样我就可以像这样循环遍历它们:

for (int i = 0; i < platformAmount; i++) {
    //Checks for collision with player, by using platform[i].x and platform[i].y
}

如果有一种方法可以创建一个对象数组,那么可以产生效果来声明它的是我正在使用构造函数(在声明期间调用的函数),其中包含的值basicPlatform 类。

编辑:我已经尝试过这样做,只是为了看看它是否有效,但它给出了错误。

basicPlatform platform[2] (100, screen_height - 60, 60, 20, 255, 0, 0);
basicPlatform platform[1] (200, screen_height - 60, 60, 20, 255, 0, 0);
basicPlatform platform[0] (300, screen_height - 60, 60, 20, 255, 0, 0);

这给了我错误:从'int'转换为非标量类型'basicPlatform'请求冲突声明'basicPlatform platform [1]'

我现在尝试过:

basicPlatform platform[2] (100, screen_height - 60, 60, 20, 255, 0, 0);
platform[1].basicPlatform(100, screen_height - 60, 60, 20, 255, 0, 0);
platform[0].basicPlatform(100, screen_height - 60, 60, 20, 255, 0, 0);

它给了我错误: 表达式列表在初始化程序[-fpermissive]

中作为复合表达式处理

1 个答案:

答案 0 :(得分:2)

您一定要开始阅读一些基本的C ++教程,以便开始使用这个基本语法和STL容器。但是,为了让你开始,看起来你会想要这样的东西:

std::vector<basicPlatform> platforms;
platforms.push_back(basicPlatform(1, 4, ...));
platforms.push_back(basicPlatform(5, 9, ...));
platforms.push_back(basicPlatform(12, 10, ...));
platforms.push_back(basicPlatform(20, 4, ...));

或更短:

platforms.emplace_back(1, 4, ...);
platforms.emplace_back(5, 9, ...);
platforms.emplace_back(1, 4, ...);
platforms.emplace_back(1, 4, ...);
// This forwards the arguments to the constructor of basicPlatform

现在,循环遍历它们可以像这样(基于索引):

for (size_t i = 0; i < platforms.size(); ++i) {
   const basicPlatform &pf = platforms[i];
   // do something with it
}

或者,(基于for的迭代器):

for (auto it = platforms.begin(); it != platforms.end(); ++it) {
    const basicPlatform &pf = *it;
    // do something with it
}

或者,更短(对于每个循环):

for (const basicPlatform &pf : platforms) {
   // do something with it
}