网站大量收购独家精品文档,联系QQ:2885784924

新Java游戏编程原理与实践教程 教学课件 陈锐 夏敏捷 葛丽萍 第20章 2.5D游戏.ppt

新Java游戏编程原理与实践教程 教学课件 陈锐 夏敏捷 葛丽萍 第20章 2.5D游戏.ppt

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第20章 2.5D游戏 通常的概念中,2D也就是所谓的二维,也就是平面图形——即由X与Y坐标构成的图形,其内容由水平的X轴向与垂直的Y轴描绘确定,也就是由长和高的形成所谓的二维平面。 而所谓3D,也称之为三维。其图形内容除了有水平的X轴向与垂直的Y轴向外还有进深的Z轴,故称三维(XYZ),也就是由长、宽、高三项要素形成所谓的三维立体。本游戏也可以通过方向键移动被选中的人物角色。 第20章 2.5D游戏 所谓的2.5D,介乎于模真的3D与完全平面的2D之间。即模拟了3D的空间感,也兼具2D的灵动简单,是一种“优势”的综合体。诚然2.5D最早的出现动机只是为了2D到3D间过渡。但就其应用而讲,好的2.5D图形即有3D的自由度与质感,又能利用2D图形将漫画式人物塑造得惟妙惟肖,使其拥有纯3D还无法做到的优势。因此2.5D在现在乃至未来的一段较长时间里还会和3D并存 游戏运行界面 20.2 设计思想 在2.5D推箱子游戏中利用斜45度视角,所以假如产生如图20-3所示14×14的网格,则需要绘制地图中多边形,而不是矩形 public void myDrawRect(Graphics g, int x ,int y){//绘制多边形 Graphics2D g2D=(Graphics2D)g; if(g2D==null){ return; } GeneralPath path = new GeneralPath(); path.moveTo(x+14, y); path.lineTo(x+53, y+10); path.lineTo(x+37, y+37); path.lineTo(x-2, y+26); path.lineTo(x+14, y); g2D.fill(path); //g.draw(myPath); } 20.2 设计思想 由于2.5D呈现技术与2D的绘制方式基本相同,在绘制时只需注意绘制的顺序。本游戏中地图元素采用的是等大图元(每个物件大小相同),所以可以先绘制底层地图、再绘制上层(建筑物)地图。所以采用两个数组map1,map2分别表示地图的两层,第一层数组map1中0表示白色空地, l表尔灰色空地,2表示目的地。第二层数组map2中1表示箱子, 2表示墙, 3表示绿色的箱子。第一层和第二层图中的-1代表该处没有任何地图元素。 20.2 设计思想 2.5D游戏中的图片为了配合倾斜后的X,Y坐标拼接,大部分平面图必须转换为45度图。 20.2 设计思想 20.3 程序设计的步骤 20.3.1 创建游戏界面类(PushBox.java) 在项目中创建一个继承JPanel的PushBox类,用于显示游戏界面和实现游戏逻辑。 paint(Graphics g) 画游戏界面。2.5D游戏需注意绘制的顺序。本游戏中地图元素采用的是等大图元(每个物件大小相同),所以可以先绘制底层地图、再绘制上层(建筑物)地图。 myDrawRect(Graphics g, int x ,int y)绘制游戏网格中的多边形。 20.3 程序设计的步骤 20.3.1 创建游戏界面类(PushBox.java) 键盘事件,根据用户按键处理人物的移动。当人物角色的移动时,此处不考虑符合游戏规则,例如碰到墙不移动。最后调用repaint()重新绘制窗体。 public void keyPressed(KeyEvent e) { // TODO Auto-generated method stub if (e.getKeyCode() == KeyEvent.VK_UP) { // 向上 moveUp(); } if (e.getKeyCode() == KeyEvent.VK_DOWN) { // 向下 moveDown(); } if (e.getKeyCode() == KeyEvent.VK_LEFT) { // 向左 moveLeft(); } if (e.getKeyCode() == KeyEvent.VK_RIGHT) { // 向右 moveRight(); } repaint(); if (isWin()) { JOptionPane.showMessageDialog(this, 恭喜您通过此关!!!); } } 20.3 程序设计的步骤 20.3.1 创建游戏界面类(PushBox.java) isWin()判断当前是否已经胜利,只

文档评论(0)

118压缩包课件库 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档