编辑: 阿拉蕾 | 2019-07-06 |
//定义DCCBitmap BufBmp,ManBmp,BackBmp;
//定义位图LPPICTURE pPicture;
//指向图片的指针void LoadPicture(CString strFile);
//装入图片函数 点击C…View类的 + 号在C…View类的 构造函数C…View中添加初始化语句:pPicture=NULL;
在….
.View.cpp 后面添加 LoadPicture函数的定义:LoadPicture(CString strFile){………..(代码从例子复制)} 用类向导添加 WM_CREATE 的消息响应函数OnCreate在OnCreate中装入图片到 m_pPicture指向的对象中 BufDC.CreateCompatibleDC(this->GetDC(创建与当前DC兼容的DCBufBmp.CreateCompatibleBitmap(this->GetDC(),1024,768)创建当前DC兼容的缓存位图BufDC.SelectObject(&BufBmp);
//缓存DC选用缓存位图LoadPicture("back.jpg");
//装入背景图片if(pPicture) //…..(图片渲染的代码从例子复制){…… pPicture->Render(BufDC……. //图片渲染到缓存DC中}//此时缓存DC已有图像,但缓存DC不可见,所以屏幕没有显示 显示图片可将缓存DC屏幕COPY到屏幕DC静态图片可在OnDraw消息响应函数中显示void C…View::OnDraw(CDC* pDC){CClientDC SRCDC(this);
//引用this指针创建屏幕DCSRCDC.BitBlt(0,0,1024,768,&BufDC,0,0,SRCCOPY)复制缓存DC指定区域图片上屏幕DC 游戏的动态图片可赋给指定的DC备用 动画贴图 ①在上个实验的基础上,在C…View.cpp中补充定义缓存、背景、人物、影子的DC及位图LPPICTURE pPicture;
//指向图片对象的远程指针void LoadPicture(CString strFile)装入图象文件至图片对象函数CDC BufDC,ManDC,BackDC;
定义缓存、人物 、背景 的DC CBitmap BufBmp,ManBmp,BackBmp;
定义缓存、人物 、背景的位图 ③在OnCreate中初始化DC、位图并装入图片到 DC中 缓存、背景、人物的DC与屏幕DC 兼容缓存、背景、人物的位图与屏幕DC 兼容ManDC.CreateCompatibleDC(this->GetDC());
//人物DCManDC.SelectObject(&ManBmp);
//人物DC选人物位图.SetTimer(0,20,NULL);
//设置定时器,每20ms触发 用类向导添加 WM_TIMER 的消息响应函数OnTimer在OnTimer 中将图片显示到屏幕 贴背景图(BackDC)至缓存DC贴人物图至缓存DC中,指定位置x,y,必须指明透明的底色贴缓存DC至屏幕DC 改变x,y即可实现动画 BufDC.TransparentBlt(x,y,64,64,&FDC,0,0,64,64,0xffffff)贴人物图上缓存DC,白色为透明的底色SRCDC.BitBlt(0,0,1024,768,&MemDC,0,0,SRCCOPY);
//贴缓存DC上屏幕DC 联网游戏(socket编程,用UDP协议) 从CSocket类派生新类MySocket,重载OnReceive消息响应函数class MySocket:public CSocket{public: char buf[1000];
void OnReceive(int nErrorCode);
};
MySocket sock;
//定义MySocket 对象sock,游戏中 //网络信息的发送接收将通过sock进行 收到报文后所有玩家信息的组织 从me开始搜索链表 Me.IP==you.IP? 是我自己的 电脑发的报文 别的电脑发给我的报文 完成 无对应结点是新玩家 you.IP在链表中有对应结点吗? 有对应结点是旧玩家 插入新玩家结点,用you的信息更新结点人物信息 用you的信息更新旧玩家结点人物信息 void MySocket::OnReceive(int nErrorCode){CString from_IP,ttt;
from_IP="0,0,0,0";
unsigned int from_port;
CSocket::ReceiveFrom((void*)&buf[0],sizeof(Man)from_IP,from_port,0);