[第三章游戏程序设计之基本框架2.pptVIP

  • 1
  • 0
  • 约3.89千字
  • 约 16页
  • 2017-01-10 发布于北京
  • 举报
[第三章游戏程序设计之基本框架2

《游戏程序设计教程》 人民邮电出版社 作者:何青 出版时间:2011年 ISBN:9787115248428 问题导入:绘制一个小球 回顾:Java2D绘图框架 提问:如何使其移动? 回答:移动图形显示 进一步提问:如何移动图形显示? 回答:不断地改变图形显示的位置,并重新绘 制在屏幕上 那么:技术上如何实现? 回答: 使用程序的循环结构, While(){ 改变小球坐标; 重新绘制; } 1.移动的小球 提问:while()循环放在何处? 选择1:放在主类(GameFrame) × 选择2:放在子类(drawBall) √ 步骤a:添加gameLoop()方法 public void gameLoop() { while(true) { x++; repaint(); } } 步骤b:在主类中调用drawBall对象的gameLoop()方法 AWT图形绘制机制 图形绘制代码放置在组件的paint()方法中 程序不能直接调用paint()方法来绘制组件,而需调用组件的repaint()方法来重绘该组件 repaint()首先调用update()方法,然后调用paint()方法,默认的update()将进行清屏操作 当多个repaint请求同时作用在同一个组件上时,由于事件处理线程无法及时作出响应,将导致合并为一个repait请求 操作并演示:加入gameLoop()方法 问题1:为什么没有显示小球? 原因:循环执行得太快,导致repait请求无法及时响应 解决:加入空循环 问题2:为什么不能直接调用paint() 原因:repaint()方法能调用update()方法清屏 问题3:为什么屏幕闪烁? 原因:在同一个绘图表面上反复绘制并擦除 解决:使用双缓冲机制(要点2) 离屏渲染操作: 步骤a:建立一个Image对象,并获取其Graphics对象(图象缓冲区) Image im; im=creatImage(width,height); Graphics dbg=im.getGraphics(); 步骤b:在Image上渲染图形 dbg.setColor(Color.blue); dbg.fillOval(x, y, diameter, diameter); 前屏显示操作: 步骤a:获取当前屏幕的Graphics对象 Graphics g = this.getGraphics(); 步骤b:绘制Image图象缓冲区中的内容 g.drawImage(im,0,0,null); 步骤c:释放当前屏幕的Graphics对象 g.dispose(); 实现更加复杂的移动 改进1:斜向移动 改进2:小球移出边界后从另一边出来 改进3:随机移动 改进4:弹跳(作业) 2.游戏的运行框架 对gameLoop()中的代码进行封装: gameLoop(){ while(true){ gameUpdate(); gameRender(); gamePaint(); } } 3.创建新的线程 为何创建新线程? 作用1:减轻主线程压力,提高执行效率 主线程—用于响应用户事件 子线程---用于处理游戏循环 创建步骤: a. 在drawBall类上实现Runnable接口 b. 将游戏循环放置在run()方法中 c.实例化线程并启动(Thread.start()) 作用2:获得稳定的FPS(帧速率) (要点4) Tread.sleep(sleepTime); 如何合理设置sleepTime? 另外的选择: 使用TimerTask类(自学) 4.移植到Applet版本 继承Applet类,并实现Runnable接口 重载线程的run()方法,加入游戏循环代码 重载Applet.int(),初始化 重载Applet.start(),建立并启动线程 重载Applet.stop(),终止线程 第3章 游戏程序的基本框架(2) ——建立游戏循环 Evaluation only. Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0. Cop

文档评论(0)

1亿VIP精品文档

相关文档