我正在阅读http://www.tonypa.pri.ee/tbw/tut02.html的tile引擎教程,但是当我将Flash代码翻译成C++时,我陷入了困境。到目前为止,我理解和翻译这一部分: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;
};
但在这条线上,它甾体抗炎药,
“第一线game.Tile0 =函数(){}声明新的对象原型当我们得到的。 0从地图数组中,我们将使用Tile0作为模板在该位置创建新的图块对象。“
这是否意味着将数组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();
为共谋检测?
您可以创建一个对象数组,是的,但它不能是类型'无符号int'的,但类型'瓷砖*',而这又需要一个超类既'Tile0'和'Tile1'。否则,它会给你输入错误。 – 2013-04-22 19:35:02
@RefugnicEternium据我所知,编译器需要类型来确定数据的大小。 Tile0和Tile1是从Tile开始扩展的,并且由于扩展类可以大于其基类,Tile MAPOBJS []可以保持Tile0和Tile1吗?这不是无效的吗? – 2013-04-22 20:30:12
不,这不会无效,只要您存储指向平铺对象的指针即可。无论指向哪个对象(整数大小,32位系统上的4字节),每个指针都具有相同的大小。多态性101:每个孩子班也是一个父班。因此,每个孩子类都可以毫无问题地转换成父类。通过这种方式,您可以节省大量内存,只需每个tile有一个对象,并将对这些tile的引用复制到您的阵列中即可......您将只有两个实际对象,但只有两个实际对象。 – 2013-04-22 20:37:18