《第四章游戏程序设计之运行机制优秀课件.ppt》由会员分享,可在线阅读,更多相关《第四章游戏程序设计之运行机制优秀课件.ppt(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第四章游戏程序设计之运行机制第1页,本讲稿共17页游戏程序设计教程 人民邮电出版社 作者:何青 出版时间:2011年 ISBN:9787115248428 第2页,本讲稿共17页内容提要游戏世界中的物体运动碰撞检测实例:打砖块游戏第3页,本讲稿共17页 1.游戏世界中的物体运动物体运动分类(直线运动):匀速运动:st*v加速运动:st*(v+t*cv)如何在游戏中模拟?对于匀速运动,在每一帧中对物体的x与y坐标值赋予一个恒定的增量恒定的增量,形如:x=x+dx;y=y+dy;第4页,本讲稿共17页对于变速运动,每一帧在实现匀速运动的基础上再赋予额外的一个恒定增量作为速度的增量速度的增量(加速度
2、),形如dx=dx+dcx;x=x+dx;dy=dy+dcy;y=y+dy;第5页,本讲稿共17页 2.碰撞检测游戏世界中物体之间如何交互?碰撞各个物体的显示区域相互重叠如何进行碰撞检测?边界检测法(俄罗斯方块)边界检测法(俄罗斯方块)中心检测法中心检测法(贪食蛇)贪食蛇)第6页,本讲稿共17页3.制作打砖块游戏 基本元素:小球、挡板、砖块基本规则:小球在屏幕四周弹跳,碰到挡板或砖块后改变方向,而且被碰到的砖块消失应该为此游戏程序设计几个主要的类?5个第7页,本讲稿共17页设计挡板类如何设计挡板的移动控制?移动范围:窗口下边缘下边缘,左右移动控制方式:玩家按下左或右键时挡板向左或右移动,松开按
3、键时停止松开按键时停止移动(和贪食蛇的移动比较)如何绘制挡板?g.fillRect(location.x,location.y,size.x,size.y);第8页,本讲稿共17页设计砖块类如何表示多个砖块?Array or ArrayList如何为每个砖块设定显示坐标?(难点难点)双重循环如何绘制砖块?逐一绘制所有砖块 第9页,本讲稿共17页碰撞检测及处理(1)小球与墙壁(程序窗口的边界)碰撞反弹反弹效果:碰到墙壁后改变方向如何实现?碰到左右两边墙壁,dx设为-dx碰到上侧墙壁,dy设为-dy第10页,本讲稿共17页(2)小球与砖块碰撞(重点重点)当小球碰撞到砖块后,要求:a 砖块消失b 小
4、球反弹问题一:如何检测小球与砖块的碰撞?边界检测法边界检测法(小球左上角的坐标进入图中的红色矩形框红色矩形框即判定为碰撞。Why?)砖块砖块第11页,本讲稿共17页问题二:如何让砖块消失a 设置一个boolean数组exist,其中的每个boolean变量用来标记砖块是否被碰撞标记砖块是否被碰撞,b 初始时讲exist数组中的所有变量赋值为true,表示砖块都没被撞到c 当小球与某块砖块碰撞,则将exist数组中相应砖块的boolean变量设置为falsed 在砖块绘制时加入条件判断,如果某个砖块的exist变量为true才将其显示出来第12页,本讲稿共17页问题三:如何设定小球的反弹规则(难
5、点难点)当碰撞发生在R2R2区域:dy变为相反数,dx不变当碰撞发生在R1R1区域:若来球方向为左(dx0),dx变为相反数,dy不变;否则,dy变为相反数,dx不变当碰撞发生在R3R3区域:若来球方向为右(dx0),dx变为相反数,dy不变;否则,dy变为相反数,dx不变R2R1R3第13页,本讲稿共17页(3)小球与挡板碰撞可以采用与砖块碰撞检测同样的算法但是会出现会出现BUGBUG!why?挡板挡板挡板挡板挡板挡板第一帧第一帧第二帧第二帧第三帧第三帧bug1:小球飞出下边界后被挡板“救救”回来第14页,本讲稿共17页Bug1解决:缩小碰撞检测区域 挡板挡板出界出界反弹反弹第15页,本讲稿共17页Bug2及其解决设置布尔变量padCanBounce,当挡板碰到小球后该变量设置为false,以免连续地和小球发生碰撞bug2:挡板内的反复碰撞反复碰撞 挡板挡板R1R3第16页,本讲稿共17页 完善游戏规则(1)平滑移动挡板,按键松开时让挡板停止移动(2)游戏开始时小球停在挡板上,当按下空格键后发射出去(3)小球从窗口下边飞出后回到挡板上(4)所有砖块打完后游戏结束,按R键重新开始第17页,本讲稿共17页
限制150内