• 加载图片的问题


    没有接触过游戏开发的我,当准备开始学习游戏开发的时候,总觉得游戏开发是神秘的,需要很牛的技术才能实现。

    以前做过很多应用程序,基本上都是拖动控件,用很少的代码就能实现。

    比如加载图片,用pascal的话只需要在你放置图片的地方,放一个image控件即可,不需要写一行代码,还可以根据属性设置设置不同的效果。

    由于是第一次玩这么高深的东西(自己感觉)。很简单的一个问题,被我想复杂化了。

    加载游戏场景和人物(其实就是两张图片---------哈哈)

    源码:

    声明全局变量

    HBITMAP bit; 
    HDC  MemDC; 
    int  w,h;
    CString dir; 

    int  p;

    BOOL loadbmp(CString cc);

    BOOL loadbmp(CString cc)

       DeleteObject(bit); 
        bit=(HBITMAP)LoadImage 
          (AfxGetInstanceHandle(),
               cc,
               IMAGE_BITMAP, 
               0, 
               0, 
               LR_LOADFROMFILE|LR_CREATEDIBSECTION
           );

    其实以上部分已经把图片加载到bit,下面的部分是获取图片的信息,高度和宽度
         if(bit==NULL) return FALSE; 
         DIBSECTION ds;
         BITMAPINFOHEADER &bm = ds.dsBmih;
         GetObject(bit,sizeof(ds),&ds); 
         w = bm.biWidth; 
         h = bm.biHeight;
         return TRUE;
    }

    显示图片的功能

    CClientDC dc(this);//这里告诉图片 你将要显示到客户区 下面要用到
       CString cc;
     p=0;
     MemDC = CreateCompatibleDC(0);//暂存设备场景
     dir="图片/";

     //加载地图
     cc=dir+"地面.BMP";
     if(loadbmp(cc)==FALSE)
       AfxMessageBox(cc+"没找到!");
     SelectObject(MemDC,bit);  建立关联,不然如何让图片显示呢
     BitBlt(dc.m_hDC,0,0,300,300,MemDC,0,0,SRCCOPY);//就理解它为让内存中的图片显示到客户区吧

     //加载人
     cc.Format("%s人/c%05d.bmp",dir,p);
     if(loadbmp(cc)==FALSE)
      AfxMessageBox(cc+"没找到!");
     SelectObject(MemDC,bit);
     BitBlt(dc.m_hDC,200,200,w,h,MemDC,0,0,SRCCOPY);

    上面就实现了一个非常简单游戏场景加载,虽然什么实质内容也没有。

  • 相关阅读:
    [bzoj2654]tree_二分_kruskal
    [luogu1373]小a和uim之大逃离_动态规划
    [luogu1156]垃圾陷阱_动态规划_背包dp
    [luogu2209][USACO13]燃油经济性Fuel Economy_贪心
    UNIX环境高级编程——进程基本概述
    UNIX环境高级编程——进程控制
    UNIX环境高级编程——进程环境
    UNIX环境高级编程——时间和日期
    UNIX环境高级编程——Linux进程地址空间和虚拟内存
    UNIX环境高级编程——标准I/O库函数和Unbuffered I/O函数
  • 原文地址:https://www.cnblogs.com/batman425/p/3227517.html
Copyright © 2020-2023  润新知