2011-03-07 86 views
0

我正在做简单的自上而下的游戏。有8个可能的方向车,所以我想分配适当的图像显示每个方向。8个运动,如何正确显示每个方向的正确图像?

我的想法:通过8个图像Car类(如位图的阵列) 在Position_X和Position_Y性能我可以在Set访问确定哪个方向是现在要被显示并选择合适的图像。 它有道理吗?

class Car 
{ 
    Bitmap ImageToDisplay; 

    Bitmap left; 
    Bitmap right; 
    ... 
    public Car(Bitmap [] dirImages) 
    { 
     left=dirImages[0]; 
     right=dirImages[1]; 
     ..etc 

    } 

    public int POSITION_X 
    { 
     set 
     { 
      if (POSITION_X>value) 
       ImageToDisplay=left; 
      else ImageToDisplay=right; 
     } 
    } 
} 
+0

听起来像是不错的计划给我,让对象确定自己的方向,通过公开曝光的方法正确的图像。但我从来没有设计过2D或3D游戏。 – Chev 2011-03-07 14:52:11

回答

2

我认为是separation of concerns
如果这是你的完整车类,这将是好的,但我认为你的车类会做更多的工作。

受我最新的WPF和数据绑定冒险的启发,我建议Car类公开一个属性Direction,最好用enum描述你的8个方向。然后你有一个单独的转换器类,将Direction转换为位图。

通过分解Car类中的实际位图选择,可以将逻辑(计算方向)与表示(选择适当的位图)分开。
通过这种方式,您可以将Direction属性重新用于其他目的,例如计算汽车移动的位置以及计算用户输入如何影响汽车移动的位置。

你的代码没有什么技术上的错误,但是最终你会得到一个巨大的汽车类,这个类对许多事情一次做到了很大的风险。警告标志可能是当您的POSITION_X设定器除了更新ImageToDisplay之外还更新其他五个属性。

+0

好吧,但如果汽车暴露了方向,一些单独的班级怎么知道要载入哪个图像?只有该转换类只为Car类工作时,该方法才有效。 – Mocco 2011-03-07 15:33:04

+0

@Coco,是的,这将是Car对象的特制类(或者至少它必须知道如何转换'Direction'属性的枚举类型)。如果你喜欢,你可以称它为“CarDirectionToImageConverter”。目的是从汽车运动的实际逻辑中去除尽可能多的东西。 – 2011-03-07 15:45:26

+0

同意。维持“表现”层从“生意”层分开。 Car对象知道汽车的内部状态,以及其可识别的外部属性(如速度和方向)。东西“上涨”,在游戏圈的表现逻辑部分,应该要求所有的汽车他们的性格是什么,然后发表关于如何表示在屏幕上的决定。 – 2011-03-07 16:19:20

0

我想有一个单独的函数被调用时的对象变化的旋转,并且该功能会知道,基于对象的旋转中,形象应该是“主动”的形象,以及如何更新的对象显示和私人“currentImage”属性。