设为首页 加入收藏

TOP

(Visual C++)游戏开发笔记二十一 游戏基础物理建模(三) 摩擦力系统模拟 (四)
2014-11-23 19:42:48 】 浏览:587
Tags:Visual 游戏 开发 笔记 二十一 基础 物理 建模 摩擦力 系统 模拟
;
bmp = CreateCompatibleBitmap(hdc,750,400);

SelectObject(mdc,bmp);

bg = (HBITMAP)LoadImage(NULL,"bg.bmp",IMAGE_BITMAP,750,400,LR_LOADFROMFILE);
angrybird = (HBITMAP)LoadImage(NULL,"angrybird.bmp",IMAGE_BITMAP,140,70,LR_LOADFROMFILE);


GetClientRect(hWnd,&rect);

MyPaint(hdc);

return TRUE;
}

//****自定义绘图函数*********************************
// 1.窗口贴图
// 2.根据小球的运动状态计算速度与贴图坐标
void MyPaint(HDC hdc)
{
SelectObject(bufdc,bg);
BitBlt(mdc,0,0,750,400,bufdc,0,0,SRCCOPY);

SelectObject(bufdc,angrybird);
BitBlt(mdc,x,y,70,70,bufdc,70,0,SRCAND);
BitBlt(mdc,x,y,70,70,bufdc,0,0,SRCPAINT);

BitBlt(hdc,0,0,750,400,mdc,0,0,SRCCOPY);

x += vx; //计算X轴方向贴图坐标,每调用一次MyPiant(),x坐标就加上一个vx的当前值

vy = vy + gy; //计算Y轴方向速度分量,vy随着每一次MyPiant()函数的调用就加上一个gy(重力加速度)
y += vy; //计算Y轴方向贴图坐标,每调用一次MyPiant(),y坐标就加上一个刚改变过后的vy,相当于加速运动

if(y >= rect.bottom-70) //判断是否触地,如果触碰到窗口边界,进行调整
{
y = rect.bottom - 70;

//X轴方向的摩擦力处理
vx += fx; // vx=fx+vx;这里fx为负值,所以每调用一次MyPiant(),vx恒定减小一个fx
if(vx < 0) //当vx值递减到小于0时,就将其设为0,即小球在X方向不再移动。
vx = 0;

//Y轴方向摩擦力处理
vy += fy; //vy=fy+vy;这里fy同样为负值,所以每调用一次MyPiant(),vy恒定减小一个fy
if(vy < 0) //若速度减到小于等于0,置为零,即小球在X方向不再移动。
vy = 0;

vy = -vy;
}

tPre = GetTickCount(); //记录此次时间
}

//****消息处理函数***********************************
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_KEYDOWN: //按键消息
if(wParam==VK_ESCAPE) //按下【Esc】键
PostQuitMessage(0);
break;
case WM_DESTROY: //窗口结束消息
DeleteDC(mdc);
DeleteDC(bufdc);
DeleteObject(bg);
DeleteObject(angrybird);
ReleaseDC(hWnd,hdc);
PostQuitMessage(0);
break;
default: //其他消息
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}


下面是运行时的截图:

\

\

\

\

\最后小鸟能量耗尽,停留在窗口边缘的地面上。

作者:zhmxy555


首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇(Visual C++)游戏开发笔记十八 .. 下一篇(Visual C++)游戏开发笔记二十 ..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目