




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C 游戏编程 游戏开发梦想的集散地 毛星云 浅墨 的专栏C 游戏编程 游戏开发梦想的集散地 毛星云 浅墨 的专栏 愿尽以绵薄之力 薪火相传游戏开发的信仰与梦想 复兴国产单机游戏 愿尽以绵薄之力 薪火相传游戏开发的信仰与梦想 复兴国产单机游戏 Visual C 游戏开发笔记二十 游戏基础物理建模 二 重力系统的模拟 Visual C 游戏开发笔记二十 游戏基础物理建模 二 重力系统的模拟 分类 Visual C 游戏开发 Visual C 2012 05 06 02 05 18772人阅读 评论 46 收藏 举报 游戏c nullimagecallback编程 本系列文章由zhmxy555 毛星云 编写 转载请注明出处 作者 毛星云 邮箱 happylifemxy 欢迎邮件交流编程心得 在笔记十八里面我们介绍了基础的匀速与加速运动的物理建模 基本的物理建模导论和前续相关知识的讲解请移步 Visual C 游戏开发笔记十八游戏基础物理建模 一 匀速与加速运动 本节知识相当于该节知识的一个拓展 模拟生活中的重力系统 它可以为我们开发的游戏提供一个近乎逼真的重力模拟系统 也 可以为我们游戏引擎开发中物理系统相关代码的书写提供一定的思路 重力模拟实现起来其实非常简单 我们都知道 重力的表现形式其实就是一个大小约等于9 8米每二次方秒 方向垂直地面指向 地心的加速度 且由于X轴方向的速度不受重力影响 所以我们只要将物体的速度进行正交分解 处理竖直向下的Y轴方向即 可 下面用本节的实例中的实现重力模拟的代码来具体说明 这一节着重讨论重力 所以演示时暂时先忽略下坠时的空气阻力与触 地时的摩擦力 这是一个平抛运动 小鸟将具有水平方向的初速度 且受到向下的重力 即小鸟具有向下的加速度 若碰到地面就会进行反弹 速度反向 首先我们定义下坠物体的初始坐标与初始速度 初始横坐标x 0 初始纵坐标y 100 初始水平方向速度vx 6 初始竖直方向 速度vy 0 重力加速度gy 3 这里为了方便演示 我们设置为3 即 intx 0 y 100 vx 6 vy 0 gy 3 初始横坐标x 0 初始纵坐标y 100 初始水平方向速度vx 6 初始竖直方向速度vy 0 重力加速度gy 3 这里为了方便演示 我们设置为3 然后我们在MyPaint 函数中实现具体的重力环境模拟 x vx 计算X轴方向贴图坐标 每调用一次MyPiant x坐标就加上一个恒定不变的vx 相当于匀速运动 vy vy gy 计算Y轴方向速度分量 vy随着每一次MyPiant 函数的调用就加上一个gy 重力加速度 y vy 计算Y轴方向贴图坐标 每调用一次MyPiant y坐标就加上一个刚改变过后的vy 相当于加速运动 判断是否触地 如果触碰到窗口边界 vy调整为相反方向 if y rect bottom 60 1 y rect bottom 60 vy vy 基础部分就讲解完成了 国际惯例 依旧是贴出注释详细的源代码 include stdafx h include 全局变量声明 HINSTANCE hInst HBITMAP bg angrybird HDChdc mdc bufdc HWNDhWnd DWORDtPre tNow tCheck RECTrect intx 0 y 100 vx 6 vy 0 gy 3 初始横坐标x 0 初始纵坐标y 100 初始水平方向速度vx 6 初始竖直方向速度vy 0 重力加速度gy 3 这里为了方便演示 我们设置为3 全局函数声明 ATOMMyRegisterClass HINSTANCE hInstance BOOLInitInstance HINSTANCE int LRESULT CALLBACKWndProc HWND UINT WPARAM LPARAM voidMyPaint HDC hdc WinMain函数 程序入口点函数 int APIENTRY WinMain HINSTANCE hInstance HINSTANCE hPrevInstance LPSTR lpCmdLine int nCmdShow MSG msg MyRegisterClass hInstance 初始化 if InitInstance hInstance nCmdShow return FALSE 消息循环 GetMessage 初始化msg while msg message WM QUIT if PeekMessage DispatchMessage else tNow GetTickCount if tNow tPre 50 MyPaint hdc return msg wParam 设计一个窗口类 类似填空题 使用窗口结构体 ATOM MyRegisterClass HINSTANCE hInstance WNDCLASSEX wcex wcex cbSize sizeof WNDCLASSEX wcex style CS HREDRAW CS VREDRAW wcex lpfnWndProc WNDPROC WndProc wcex cbClsExtra 0 wcex cbWndExtra 0 wcex hInstance hInstance wcex hIcon NULL wcex hCursor NULL wcex hCursor LoadCursor NULL IDC ARROW wcex hbrBackground HBRUSH COLOR WINDOW 1 wcex lpszMenuName NULL 2 wcex lpszClassName maple wcex hIconSm NULL return RegisterClassEx 初始化函数 1 加载位图资源 2 取得内部窗口区域信息 BOOL InitInstance HINSTANCE hInstance int nCmdShow HBITMAP bmp hInst hInstance hWnd CreateWindow maple 浅墨的绘图窗口 WS OVERLAPPEDWINDOW CW USEDEFAULT 0 CW USEDEFAULT 0 NULL NULL hInstance NULL if hWnd return FALSE MoveWindow hWnd 10 10 600 450 true ShowWindow hWnd nCmdShow UpdateWindow hWnd hdc GetDC hWnd mdc CreateCompatibleDC hdc bufdc CreateCompatibleDC hdc bmp CreateCompatibleBitmap hdc 640 480 SelectObject mdc bmp bg HBITMAP LoadImage NULL bg bmp IMAGE BITMAP 640 480 LR LOADFROMFILE angrybird HBITMAP LoadImage NULL angrybird bmp IMAGE BITMAP 120 60 LR LOADFROMFILE GetClientRect hWnd SelectObject bufdc bg BitBlt mdc 0 0 640 480 bufdc 0 0 SRCCOPY MyPaint hdc return TRUE 自定义绘图函数 1 窗口贴图 2 计算小球速度 坐标以及判断是否碰到窗口下缘 void MyPaint HDC hdc SelectObject bufdc bg BitBlt mdc 0 0 640 480 bufdc 0 0 SRCCOPY SelectObject bufdc angrybird BitBlt mdc x y 60 60 bufdc 60 0 SRCAND BitBlt mdc x y 60 60 bufdc 0 0 SRCPAINT BitBlt hdc 0 0 640 480 mdc 0 0 SRCCOPY x vx 计算X轴方向贴图坐标 每调用一次MyPiant x坐标就加上一个恒定不变的vx 相当于匀速运动 vy vy gy 计算Y轴方向速度分量 vy随着每一次MyPiant 函数的调用就加上一个gy 重力加速度 y vy 计算Y轴方向贴图坐标 每调用一次MyPiant y坐标就加上一个刚改变过后的vy 相当于加速运动 判断是否触地 如果触碰到窗口边界 vy调整为相反方向 if y rect bottom 60 y rect bottom 60 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 3 break default 其他消息 return DefWindowProc hWnd message wParam lParam return 0 该demo运行的截图如下 4 5 依然 我们可以通过更改横坐标x 纵坐标y 水平速度vx 竖直速度vy以及加速度gy的值来改变小鸟的运动速度与运动轨迹 这一节到这里就结束了 应大家要求 从本节文章开始 以后浅墨提供的文章配套源码都将分为VC6 0和VS2010两个版本 以方便使用不同版本IDE的朋 友们进行学习提高 当然 依旧是0资源分下载 分享精神至上 好了 下载地址就在下面 6 本篇文章VC6 0版的源码请点击这里下载 VC6 0版 Visual C Code Note 20 本篇文章VS2010版的源码请点击这里下载 VS2010版 Visual C Code Note 20 感谢
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 音乐专业听力试题及答案
- 黑吉辽蒙金太阳2026届高三9月开学联考(26-1002C)地理试题及答案
- 安徽省九师联盟2026届高三9月开学联考政治(含答案)
- 《烹饪原料初加工工艺》项目一刀工与原料成形
- 钻石专业试题及答案大全
- 路面施工方案反光衣
- 库房物资搬运施工方案
- 地产开发合作协议示例
- 楼顶油漆施工方案
- DB32-T 4451.10-2023 医用影像设备临床使用管理与质量控制规范 第10部分:超声成像设备
- 2025年中学生法治素养竞赛题库及答案
- 城市空中交通管理试点工作方案
- 肺真菌病的诊断与治疗
- 名著章节课件-《水浒传》第5回《小霸王醉入销金帐 花和尚大闹桃花村》情节梳理+人物形象+巩固试题
- 海口寰岛小升初数学试卷
- 城市更新中装饰工程重点及难点措施
- 惠普尔养障体肺炎诊疗要点解析
- 贷款中介员工培训
- 以转变渔业发展方式为主线 全面推进“十五五”现代渔业建设
- 校长标准考试试题及答案
- 湖南2025年湖南省省直事业单位第二次集中招聘笔试历年参考题库附带答案详解
评论
0/150
提交评论