c++ - 访问二维数组中的元素

标签 c++ multidimensional-array tile

我正在用 C++ 编写平台游戏并使用平铺 map 构建世界。

map 包含分配给图 block 的值:

例如二维数组:

int map[4][4]={
    {1, 1, 1, 1},
    {1, 0, 0, 1},
    {1, 0, 0, 1},
    {1, 1, 1, 1}, };

我以类似的方式创建 Sprite :int sprite[1][1]={ {2} };

我的问题是,如何访问二维数组中的特定图 block 或元素

我读了这个post(3rd post down)并想知道二维数组是否不是最好用的。

我的 sprite 始终保持在窗口的中心,按键时我的世界移动到他身后。

我想与某些图 block 发生碰撞,因此我的 sprite 二维数组图 block 和我的 Map 二维数组之间需要一些交互...

就目前而言,我可以走出 map ,因为我还没有对它进行其他编码。我将如何处理这个理想情况下,我想阻止他离开 map ,然后我可以将碰撞与之整合。

下面是截图(但 map 比上面显示的要大): reanimation platformer

最佳答案

如果我有:

int array[4][4];

我可以通过以下方式访问元素:

array[a_num][also_a_num]

其中 i 和 j 是有效索引。

通常当我想要这样的东西时,我只使用一维数组和一些数学。

int height = a_num;
int width = also_a_num;
int amap[height * width];
int x_pos,y_pos;
int value = amap[y_pos*width + x_pos];

您可以很容易地检查 x_pos 和 y_pos 的边界。

至于碰撞,你可以尝试结构数组。

struct tile{
  bool walkable;
  int type;
};

tile amap[height*width];

关于c++ - 访问二维数组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15689370/

相关文章:

c# - Unity3D 等距瓦片 map 的鼠标事件

c++ - for 循环内的 while 循环

c++ - 如何在运行时从表示函数的字符串执行 C++ 代码?

java - 在 JAVA 中使用字符串作为多维数组的索引

javascript - 循环遍历多维数组

wpf - 在 WPF 中渲染大型平铺 map 时出现问题

c++ - 在 Linux 中将 fork() + execlp 与 boost::asio 一起使用时解决重用错误

c++ - VS15 使用 constexpr 和字符串文字抛出错误 C2975

javascript - 如何像在 PHP 中一样创建 Javascript 二维数组?

Java - 使用 Graphics2D 矩形在面板中创建 2D 平铺 map ?