C++ 混合对象数组

标签 c++ arrays object

我正在通过 http://www.tonypa.pri.ee/tbw/tut02.html 阅读 tile 引擎教程但是当我将 Flash 代码翻译成 C++ 时我被卡住了。到目前为止我理解并翻译了这部分:

unsigned int MAPDATA[6][8] = {
    { 1, 1, 1, 1, 1, 1, 1, 1 },
    { 1, 0, 0, 0, 0, 0, 0, 1 },
    { 1, 0, 1, 0, 0, 0, 0, 1 },
    { 1, 0, 0, 0, 0, 1, 0, 1 },
    { 1, 0, 0, 0, 0, 0, 0, 1 },
    { 1, 1, 1, 1, 1, 1, 1, 1 }
};

class Tile0 {
    public:
        Tile0();
        bool walkable = true;
        unsigned int frame = 0;
};

class Tile1 {
    public:
        Tile1();
        bool walkable = false;
        unsigned int frame = 1;
};

但是在这条线上,它说,

"First line game.Tile0= function () {} declares new object prototype. When we get 0 from map array, we will use Tile0 as template to make new tile object on that position."

是不是说把数组MAPDATA转换成对象数组?

unsigned int MAPOBJS[6][8] = {
    { Tile1, Tile1, Tile1, Tile1, Tile1, Tile1, Tile1, Tile1 },
    { Tile1, Tile0, Tile0, Tile0, Tile0, Tile0, Tile0, Tile1 },
    { Tile1, Tile0, Tile1, Tile0, Tile0, Tile0, Tile0, Tile1 },
    { Tile1, Tile0, Tile0, Tile0, Tile0, Tile1, Tile0, Tile1 },
    { Tile1, Tile0, Tile0, Tile0, Tile0, Tile0, Tile0, Tile1 },
    { Tile1, Tile1, Tile1, Tile1, Tile1, Tile1, Tile1, Tile1 }
};

还是说用Tile0间接引用0?你如何在 C++ 上做到这一点,以便以后你可以......

if ( MAPOBJS[1][5].walkable )
    player.moveLeft();

用于合谋检测?

最佳答案

必须先阅读原始文章。嗯,我认为那里提出的建议可以用类似的东西代替(不要假装优化或其他任何东西),但我希望它能给你一个大概的想法。

class Tile {
   public:
     enum {
        TILE0,
        TILE1
     };

     Tile(int type) : m_type(type) {};
   protected:
     int m_type;   
};

class Tile1 : public Tile {
     Tile1( Tile::TILE0 );
};

class Tile2 : public Tile {
     Tile2( Tile::TILE1 );
};

int mapData[6][8] = {
     { Tile::TILE0, Tile::TILE1, ... }, 
     { ... }
};

Tile * mapObject[6][8];


initMap() {
   for (int i=0;i<6;i++) 
     for (int j=0;j<8;j++) {
       switch (mapData[i][j]) {
           case Tile::TILE0:
              mapObect[i][j] = new Tile1();
           break;
           case Tile::TILE1:
              mapObject[i][j] = new Tile2();
           break;
           default:
              mapObject = NULL;
           break;
       }
   }
}

关于C++ 混合对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16154852/

相关文章:

c++ - OpenMesh 面分割

javascript - 将 javascript 数组中的值发送到表单值 html,将 html 值中的值发送到 php

C++ 指针和对象实例化

javascript - 通过键从对象中删除项目

c++ - 如何在 C++ 中检查互联网可用性

C++ MSVS 项目内链接器错误 LNK2019 - 声明定义不匹配?

c - 为什么使用 & 运算符时 char* 和 char[x] 之间的差异很重要

java - 使用函数将元素添加到类数组。处理3中的 "Paint"

c - 我将如何复制和重命名目标文件中的符号?

c++ - FFMPEG:编码后直接解码数据包