第7章游戏编程(1).pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
小结 游戏画布— GameCanvas 键盘策略 画图策略 图层—Layer Sprite Sprite的创建 Sprite的旋转 Sprite的碰撞检测 带动画的Sprite * 2D游戏开发的基本思想是游戏界面由多个图形层次组成,例如游戏背景可以在一个图形层次上,而游戏人物可以在另一个图形层次上。每一个图形层次都可以分别使用Layer类控制。而Layer类包含了制作游戏背景的TileLayer类和制作游戏精灵的Sprite类。由于一个界面的图形层次可能不仅仅局限在两个层次,可能背景本身就是由多个层次的图形构成的,所以处理多个图形层次是由LayerManager类负责的 * * Sprite 是一个基本的可视元素,可以用存储在图像中的一帧或多帧来渲染它;轮流显示不同的帧可以令Sprite 实现动画。 翻转、旋转等几种变换方式也能应用于Sprite 使其外观改变。作为Layer 子类,Sprite 的位置可以改变,并且还能设置其可视与否。 * * 也可以不调用这个函数,因为默认情况下将Sprite的整个区域进行定义,也就是说,只要其他Sprite或图片进入当前Sprite占据的区域,则视为被碰撞。缺省的,Sprite的碰撞检测区定位在(0,0),并与Sprite尺度相同。 * * 示例 Image img = Image.createImage(“/img1.png”); Sprite s = new Sprite(img); s1.setPosition(0, 0); //初始位置在左上角 s.move(-1,-1); 表示将Sprite对象s向左上移动1个象素位置 很多游戏中的角色还有碰撞的效果。如飞机遇到子弹之后就爆炸,汽车撞到墙等等,实际上是一个碰撞的问题。那么怎样知道两个物体碰撞了呢?在Sprite中,对碰撞检测也具有一定的支持。 碰撞检测 Sprite的碰撞检测可以分两种:一种是矩形碰撞检测,另一种是像素碰撞检测。 游戏中Sprite的大小往往是用包围它的矩形的大小来表示的,如图3中的飞机和导弹并没有发生碰撞但检查的结果却发生了碰撞。 矩形碰撞检测:只要两个Sprite默认的碰撞边界相交,就被判定为发生碰撞。 碰撞检测 图3 矩形碰撞检测 碰撞检测 对于像素碰撞检测,往往把Sprite的背景色设置为相同的颜色,碰撞检查的时候就只判断两个图片除背景色以外的其他像素是否发生了重叠。 像素碰撞检测比较精确,但计算复杂,浪费大量的系统资源,所以一般没有特殊要求都使用矩形碰撞检测。 碰撞检测 下面的例子两个矩形发生了碰撞但飞机和导弹并没有发生碰撞,如图4所示。 图4 像素碰撞检测 碰撞检测 要判断两个Sprite 是否碰撞,或者与其他Layer 是否碰撞,可以使用collidesWith()方法。collidesWith()共有三种形式: 怎样得知两个角色是否碰撞了呢? 碰撞检测—判断是否碰撞 (1)public final boolean collidesWith(Sprite s,Boolean pixelLevel) 很明显,该函数的第一个参数是被检测的碰撞对象;第二个参数是一个boolean类型,意义如下: 如果为true,则认为两个Sprite上不透明点发生了重叠,就算碰撞,即像素检测; 如果为false,则认为两个Sprite所在矩形区域发生了重叠,就算碰撞,即矩形检测。 碰撞检测—判断是否碰撞 (2)public final boolean collidesWith(TitledLayer t,Boolean pixelLevel)该函数参数1表示和Sprite进行碰撞检测的TiledLayer,关于TiledLayer我们将在下一章进行讲解;参数2和前面所述相同。 碰撞检测—判断是否碰撞 (3)public final boolean collidesWith(Image image,int x,int y,Boolean pixelLevel): 检测一个精灵和一个图片是否发生碰撞。x,y是图片左上角的横坐标和纵坐标。 碰撞检测—判断是否碰撞 Sprite里面有一个重要函数: public void defineCollisionRectangle(int?x, int?y, int?width, int?height) 该函数在Sprite上定义一个矩形区域,如果其他Sprite或者图片的像素点进入了这个区域,则视为碰撞。此指定的矩形是相对于未经变换的Sprite的左上角。 碰撞检测—定义碰撞区域 Sprite旋转 刚才已经讲述了Sprite的生成,但是,图片在界面上运行的时候,是平移的。实际上,很多游戏中的角色还有

文档评论(0)

好文精选 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档