而整个游戏中主角只有一个,箱子是Array的。为什么这么做?如果你只是奔着克隆一个简陋的,30年前水平的仓库番,那么上面的做法也可以,不过这是标准的IJW的代码(it just work),时不提倡的,我说的这种做法是正确的,因为角色并不属于地图,箱子和箱子的目标也一样不属于地图,从程序的角度来说,这就是一个对象之间的依赖性关系决定的,地图不依赖于这些,没有主角、没有箱子、没有箱子的目标地图一样可以存在,但是相反的,没有地图,这3个存在就没有价值,他们依赖于地图,至少目前这个游戏中是这样。
当然实际操作中,我们很多时候会把视觉和逻辑混做一谈,罪魁祸首就是我们认为我们肉眼看到的那个角色,就是实际上的逻辑角色。但是如果你这样写过仓库番,并且真的思考过,你就会发现,实际上真正的角色是哪个逻辑上的Player这个struct,画面上,他是一个圆圈,是一个等腰直角三角形(直角代表面向),或者是一个小人,一个小狗,一辆汽车都是可以的;同样的,你的角色、场景什么的是2D和3D的都没关系,他们的信息都来自于逻辑层的这些数据(Map Player Box BoxTarget)但是不管他看起来是什么,他的位置、面向全部是依赖于Player这个信息的,而不是等于Player这个信息的,并且Player这个信息更不应该是属于这个贴图的。在没有游戏框架(没有unity,没有cocos等)的年代里,甚至早期传奇时代,还有人用GDI渲染的时代,OOPer们已经有人开始自作聪明的走弯路,走Image等派生出角色,包含了player信息,正因为这个“自作聪明的错误”,结合现在“所见即所得的渴望”,产生了逻辑反过来依赖视觉的错误,最常见的是做动作游戏的时候甚至有人拿角色的图片做hitTest……