我对DX11的理解和简化框架与快速游戏制作(续4)

来源:互联网 发布:淘宝怎么设置自动回复 编辑:程序博客网 时间:2024/05/21 17:54

前面已经具备了设备层(DEVICE)显示层(SwapChain)现在就可以尝试测试显示的结果了:

添加个"SpliteDevice.h"的头文件,内容如下(注意这里也保证了语法的无关性和可读性):

很大一批程序员愿意使用gMyRenderDeviceAbstract这样的命名方式可能它根本就不想自己读懂它!

还比如#define abc(a,c){ a=c; }这种定义,程序员的智商就不能再低点嘛?这些在即使是NV的官方范例中也屡见不鲜!

一个类的名称描述应该是尽量贴近它所带来的结果。

struct SpliteDevice
{
    Device device;  //设备
 SwapChain chain;//缓冲区

 int sample,Startframe;//AA
 float frameRate;//祯速率
  
 InputState Input;//输入

 void Create(Device dev,HWND hwnd,int sampleCount)
 {
 frameRate = 60;
    sample = sampleCount;   
 device=dev;
 chain.Create(dev,hwnd,sample); 
  Input.viewport=Viewport(chain.desc.Width,chain.desc.Height);//把窗口信息放在输入中便于其他下属类的访问Device.GetViewport()并不总是正确的是DX11的典型BUG
 Input.hit.Zero();
 LoadContent();  
  }

 virtual void LoadContent(){}

 virtual void UnLoadContent(){}

   virtual void HandleInput(){}//抽象的空动作为它的下属类使用

virtual void Update(float gameTime){}

 virtual void Resize(){ }
 virtual void Draw(){}//绘画的抽象

void Dispose()
 { 
  chain.Dispose();
   UnLoadContent();
 } 

 void Clear(Vector4 c) { chain.Clear(c); }

 void Render()
 {
      DWORD tc = timeGetTime();   
        if ((tc - Startframe) > (1000 / frameRate))
        {
   Startframe = tc;
   Update(1/frameRate);
         Draw();   
     chain.Present();
  }
 }

 //如果你真的是用游戏手柄或其他触摸设备输入的话也不必更改任何类的设定把InputState的类中增加个"Other。"的输入变量即可。

 int HandleMsg(int uMsg,WPARAM wParam,LPARAM lParam)//记录所有的输入信息
 { 
  switch (uMsg)  
  { 
  case WM_CLOSE:
            Dispose();
    return 0;
  case WM_KEYDOWN:
   Input.mkeys[wParam] = true;
   HandleInput();
   return 0; 
  case WM_KEYUP:   
   Input.mkeys[wParam] = false; 
   HandleInput();
  return 0;
  //  case WM_EXITSIZEMOVE:  
  case WM_SIZE:
     if(wParam==SIZE_MAXIMIZED||wParam== SIZE_RESTORED)
         { chain.Resize();
   Input.viewport=Viewport(chain.desc.Width,chain.desc.Height);
   Resize();}
  return 0;
  case WM_MOUSEWHEEL:
  case WM_LBUTTONUP:
  case WM_MBUTTONUP:
  case WM_RBUTTONUP:
  case WM_LBUTTONDOWN:
  case WM_MBUTTONDOWN:
  case WM_RBUTTONDOWN:
  case WM_MOUSEMOVE:
    Input.state=uMsg;
   int xPos =Input.X= (short)LOWORD(lParam);
   int yPos =Input.Y= (short)HIWORD(lParam);
     int nMouseButtonState = (short)LOWORD(wParam);
               Input.LM = ((nMouseButtonState & MK_LBUTTON) != 0);
               Input.RM = ((nMouseButtonState & MK_RBUTTON) != 0);
               Input.MM = ((nMouseButtonState & MK_MBUTTON) != 0);
    HandleInput();
     if (uMsg == WM_MOUSEWHEEL)
                {
                   int scroll =(short)HIWORD(wParam);                  
                    if (scroll != 0)
                    {
                        Input.WheelDelta = scroll/120;
                        HandleInput();
      Input.WheelDelta =0;
                    }
     scroll%=120;
                }             
                Input.PX = xPos;Input.PY = yPos;
   return 0;
  break;
   }
  return 0;
 }
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 充电宝充不了电怎么办 脚裸扭伤肿了怎么办 大货车电瓶亏电怎么办 货车电瓶被偷了怎么办 小乌龟尾巴断了怎么办 长青春痘怎么办简单小妙招 一关灯就有蚊子怎么办 狗狗误食蟑螂药怎么办 泰迪误食蟑螂药怎么办 猫咪吃了蟑螂药怎么办 狗把蟑螂药吃了怎么办 猫吃了蟑螂诱饵怎么办 猫吃了蟑螂中毒怎么办 孕妇胃烧的难受怎么办 6个月孕妇胃难受怎么办 飞机杯吸盘不上怎么办 我的车位被占用怎么办 占别人车位的车怎么办 头受凉受风了疼怎么办 看电脑时间长了眼睛疼怎么办 电脑玩久了头疼怎么办 屋里有死老鼠味怎么办 老鼠死在车里面怎么办 手机锁屏怎么办求解锁 玩lol左键失灵怎么办 小米鼠标没电了怎么办 电脑键盘鼠标没反应怎么办 win10玩游戏很卡怎么办 鞋子夹脚怎么办小妙招 新鞋两边夹脚怎么办 新鞋子两边夹脚怎么办 鞋子瘦两边夹脚怎么办 鞋子小脚趾磨脚怎么办 鞋子买小了顶脚怎么办 鼠标不亮了怎么办呢 坐便水箱不上水怎么办 2个shift键失灵怎么办 比熊鼻子粉了怎么办 比熊的皮肤变黑怎么办 猫吃了死老鼠怎么办 魅族手机锁定了怎么办