C# 8方向运动,如何正确显示每个方向的正确图像?

C# 8方向运动,如何正确显示每个方向的正确图像?,c#,.net,image,properties,C#,.net,Image,Properties,我正在做一个简单的自上而下的游戏。有8个可能的方向的汽车,所以我想分配适当的图像显示每个方向 我的想法是:像位图数组一样将8幅图像传递给汽车类 在Position_X和Position_Y属性中,我可以在Set accessor中确定现在要显示的方向,并选择正确的图像。 这有意义吗 class Car { Bitmap ImageToDisplay; Bitmap left; Bitmap right; ... public Car(Bitmap []

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

我的想法是:像位图数组一样将8幅图像传递给汽车类 在Position_X和Position_Y属性中,我可以在Set accessor中确定现在要显示的方向,并选择正确的图像。 这有意义吗

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;
        }
    }
}
我会为你辩护。 如果这是你的完整的汽车类,这将是好的,但我想你的汽车类将做更多的工作

受我最近使用WPF和数据绑定的经历的启发,我建议Car类公开一个属性方向,最好使用一个描述8个方向的枚举。然后,您有一个单独的转换器类将方向转换为位图

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


从技术上讲,您的代码没有什么问题,但有一个很大的风险,即您最终拥有一个可以同时处理许多事情的大型汽车类。警告标志可能是,当您的位置设定器除了更新ImageToDisplay外,还更新了其他五个属性。

我将有一个单独的函数,每当对象的旋转发生变化时调用该函数,该函数将根据对象的旋转知道哪个图像应为活动图像,以及如何更新objects display和private currentImage属性。

对我来说是个不错的计划,让对象确定其方向,并通过公共方法显示正确的图像。但是我以前从来没有设计过2d或3d游戏。但是如果汽车只显示方向,那么一些单独的类怎么知道加载哪个图像呢?只有当convert类仅适用于Car类时,这才有效。@Coco,是的,这将是一个专门为Car对象构建的类,或者至少它必须知道如何转换Directionproperty的枚举类型。如果您愿意,您可以称之为CardDirectionToImageConverter。目的是尽可能多地从汽车运动的实际逻辑中删除内容。同意。将“表示”层与“业务”层分开。汽车对象了解汽车的内部状态及其可识别的外部属性,如速度和方向。在游戏循环的展示逻辑部分,更高层次的东西应该是询问所有汽车的配置,然后决定如何在屏幕上表现出来。