配色: 字号:
greenfoot教程
2013-04-01 | 阅:  转:  |  分享 
  


Java游戏设计工具Greenfoot简介



1概述



Greenfoot是由肯特大学的Michael和Martin设计的一款Java游戏设计工具。它是一个功能完整的开发环境,可以方便地编写游戏和进行模拟。?Greenfoot可认为是一个用ava语言创建二维图形程序框架和的结合体支持java的全部特性,特别适合组件可视化编程。在Greenfoot中,对象的可视化和交互性是。

图11Greenfoot的界面





菜单栏中的各菜单项对应着各种操作命令,包括“打开”、“删除”、“关闭”等命令;游戏面板是整个游戏的运行容器,游戏的场景和角色在此进行交互和显示;场景信息中显示了游戏的组成部分及其结构;控制按钮用于对游戏进行即时掌控:“Run”按钮用于自动运行游戏,“Act”按钮用于单步运行游戏,“Reset”按钮让游戏回到初始情形,“Speed”滚动条用来调节游戏的运行速度,“ComplieAll”用来编译游戏代码。

Greenfoot软件只有几兆大小,安装起来也很方便,可以直接去其官方网站www.greenfoot.org下载最新版本的安装程序,然后直接双击安装程序进行安装。需要注意的是,在安装Greenfoot之前首先要保证系统中安装了JDK1.5版本(或更高级的JDK版本)。



2基本操作方法



对于拥有一定编程经历的人来说,Greenfoot使用起来非常简单。Greenfoot的安装目录下提供了很多游戏实例,比如“树袋熊”游戏、“打气球”游戏、“月球登陆者”游戏、“蚂蚁觅食”游戏等等,此外还可以去官方网站去下载更多的游戏实例。所有游戏实例都是开放源代码的,用户可以自由地阅读源代码、并能随意地修改这些游戏实例,让其表现出不同的游戏效果。

接下来以“树袋熊”游戏实例来说明Greenfoot的基本操作。



2.1打开游戏场景



第一次打开Greenfoot,可选择Opentutorialandtutorialscenario”,这时会自动打开“树袋熊”游戏,如图11.2所示。



图11.2“树袋熊”游戏的界面



从图中可以看到,游戏面板区域被划分为大小相等的网格,其中显示出了一个树袋熊及很多树叶的图像,不难看出,无论是树袋熊还是树叶都只占据了一个网格区域。

在Greenfoot中,游戏面板中的网格区域也被称为游戏世界(World),而网格中的物体则被称为游戏角色(Actor),各个游戏的需要分别继承这两个类来创建自己的游戏世界和游戏角色。从场景信息栏中可以直观的看到树袋熊游戏的游戏世界类名为“WombatWorld”,而游戏的两个角色树袋熊和树叶的类名则分别叫做“Wombat”和“Leaf”。



2.2添加游戏角色



Greenfoot是基于组件的交互式编程环境,可以直接地通过鼠标操作来为游戏添加任意角色。假设想要在游戏世界中加入一个树袋熊,则可用鼠标右键单击场景信息栏中的“Wombat”类,这时可以看到一个弹出式菜单,如图11.3的步骤a所示。选择“newWombat()”,这时Greenfoot便自动生成一个新的树袋熊对象,其显示位置为鼠标指针的位置,如图11.3的步骤b所示。接下来将鼠标移动到游戏世界中,在网格面板任意的空格处单击鼠标,于是树袋熊便被添加到该网格中,如图11.3的步骤3所示。

若想要在游戏中添加树叶也可采用类似的办法,即右键单击树叶类来生成一个树叶对象并用鼠标单击游戏世界中的一个空网格来放置。可以看到,在Greenfoot中每一个游戏角色都被看作为一个组件,对角色的添加、删除和修改都可以通过鼠标操作来完成,这也正是Greenfoot强大交互性的体现。但随之而来的问题是,假如要在游戏中添加大量的游戏角色,使用这样的鼠标操作则显得比较繁琐。事实上,Greenfoot提供了快捷操作来快速地添加多个游戏角色,只需要在创建游戏角色后按住键盘的“Shift”键,然后依次点击各个目标网格,则该游戏角色会被放置到所有点击过的网格中。



a.新建对象b.移入世界放图11.3在游戏世界中添加一个树袋熊

2.3运行游戏



当游戏角色都添加完毕之后,便可以让游戏运行起来。在此之前,我们需要定义游戏角色的行为,即规定游戏运行过程中各个游戏角色做什么事情,这需要通过编程来实现。在“树袋熊”游戏实例已经编写好相关程序,规定在游戏中树袋熊不停地向前运动,碰到墙壁则转弯继续前进,而碰到树叶则把它们“吃掉”。

在控制按钮区域点击“运行”按钮可以让游戏自动运行,此时“运行”按钮转变为“暂停”按钮,可以随时按下以便暂停游戏的运行。可以调节“Speed”滚动条来调节游戏的运行速度,可以看到,当把滚动条中的滑块向右侧移动时,树袋熊的移动速度也加快了。如果想测试游戏角色的行为,则可以单步地运行游戏,即一次只运行游戏的一帧,这可以通过点击“Act”按钮来实现。可以看到,每点击“Act”按钮一次,树袋熊便会向前移动一个网格的距离。

除了点击按钮来运行游戏之外,还可以直接调用游戏角色的方法让其执行相应的动作。在游戏停止运行的情况下右键单击树袋熊的图像,这时会出现一个弹出式菜单,其中显示了该对象的各种方法,如图11.4所示。



图11.4直接调用树袋熊的方法



可以在该弹出式菜单中选择任何方法,来要求树袋熊执行相应的动作。例如,点击“turnLeft()”方法后树袋熊将转向左侧;点击“getLeavesEaten”方法则会显示到目前为止袋熊吃了多少匹树叶。当然,这些方法都是事先编写好的程序,点击某个方法实质上就是执行相应的程序代码,关于如何编写游戏程序将在后面详细介绍。



3相关API介绍

???Greenfoot为编程人员提供了丰富的API(应用程序接口),通过调用这些API可以方便地编写各种游戏操作。Greenfoot提供了5个类:WorldActor类、Greenfoo类、GreenfootImage类、MouseInfo类和GreenfootSound类。

???World类和Actor类??GreenfootImage类是一个为提供图形及图形绘制方法Greenfoot类提供了使用Greenfoot自身框架的入口,例如暂停或调整速度MouseInfo类是一个提供鼠标输入信息的类,例如鼠标单击的坐标及什么角色被点击World(intworldWidth,intworldHeight,intcellSize) 创建一个新的游戏世界 voidact() 执行一次游戏动作 voidaddObject(Actorobject,intx,inty) 添加一个角色对象,初始位置为(x,y) GreenfootImagegetBackground() 获取游戏世界的背景图像 intgetCellSize() 获取游戏世界网格的尺寸 ColorgetColorAt(intx,inty) 获取坐标(x,y)处的颜色值 intgetHeight() 获取游戏世界的高度 intgetWidth() 获取游戏世界的宽度 intnumberOfObjects() 获取游戏世界中的对象数目 ListgetObjects(Classcls) 获取游戏世界中的对象列表 ListgetObjectsAt(intx,inty,Classcls) 获取坐标(x,y)处的对象列表 voidremoveObject(Actorobject) 从游戏世界中删除指定的游戏角色 voidremoveObjects(Collectionobjects) 从游戏世界中删除一组游戏角色 voidrepaint() 重绘游戏世界图像 voidsetActOrder(Class...classes) 设置游戏中各对象的动作顺序 voidsetBackground(GreenfootImageimage) 设置游戏世界的背景图像 voidsetBackground(Stringfilename) 从图像文件中为游戏设置背景图像 voidsetPaintOrder(Class...classes) 设置游戏中各对象的绘制顺序 voidstarted() 开始运行游戏 voidstopped() 停止游戏运行

表11.2Actor类的主要方法

Actor() 创建一个游戏角色 voidact() 执行一次角色的动作 protectedvoidaddedToWorld(Worldworld) 向游戏世界添加角色 GreenfootImagegetImage() 获取游戏角色的图像 protectedListgetIntersectingObjects(Classcls) 获取与指定角色碰撞的对象列表 protectedListgetNeighbours(intdistance,

booleandiagonal,Classcls) 获取在给定范围内与指定角色相邻的对象列表 ProtectedListgetObjectsAtOffset(intdx,

intdy,Classcls) 获取与坐标(x,y)发生碰撞的对象列表 protectedListgetObjectsInRange(intr,

Classcls) 获取以指定角色为中心半径为r的范围内的对象列表 protectedActor

getOneIntersectingObject(Classcls) 获取一个与指定角色发生碰撞的游戏角色对象 protectedActorgetOneObjectAtOffset

(intdx,intdy,Classcls) 获取坐标(x,y)处的一个游戏角色对象 intgetRotation() 获取游戏角色的角度 WorldgetWorld() 获取游戏角色所在的游戏世界对象 intgetX() 获取游戏角色目前位置的x坐标 intgetY() 获取游戏角色目前位置的y坐标 protectedbooleanintersects(Actorother) 检测游戏角色是否与其他角色碰撞 voidsetImage(GreenfootImageimage) 设置游戏角色的图像 voidsetImage(Stringfilename) 从图像文件中为游戏角色设置图像 voidsetLocation(intx,inty) 设置游戏角色的坐标位置 voidsetRotation(introtation) 设置游戏角色的旋转角度

表11.3Greenfoot类

Greenfoot() 构造方法 staticvoiddelay(inttime) 设置游戏的时间延迟 staticStringgetKey() 获取按键信息 staticMouseInfogetMouseInfo() 获取鼠标信息对象 staticintgetRandomNumber(intlimit) 获取一个指定范围内的随机整数值 staticbooleanisKeyDown(StringkeyName) 检测指定的键是否被按下 staticbooleanmouseClicked(Objectobj) 检测鼠标是否点击到指定目标上 staticbooleanmouseDragEnded(Objectobj) 检测鼠标是否已经结束了拖动 staticbooleanmouseDragged(Objectobj) 检测鼠标是否拖动到指定目标上 staticbooleanmouseMoved(Objectobj) 检测鼠标是否移到指定目标上 staticbooleanmousePressed(Objectobj) 检测鼠标是否点击了指定目标 staticvoidplaySound(StringsoundFile) 播放声音文件中的声音 staticvoidsetSpeed(intspeed) 设置游戏的运行速度 staticvoidstart() 开始运行游戏 staticvoidstop() 停止游戏运行



表11.4MouseInfo类

ActorgetActor() 获取鼠标所操作的游戏角色对象 intgetButton() 获取鼠标按键的编号 intgetClickCount() 获取鼠标点击次数 intgetX() 获取鼠标光标处的x坐标 intgetY() 获取鼠标光标处的y坐标 StringtoString() 获取字符串



表11.5GreenfootImage类

GreenfootImage(GreenfootImageimage) 基于已有图像对象来创建图像对象 GreenfootImage(intwidth,intheight) 指定范围内创建图像对象 GreenfootImage(Stringfilename) 从图像文件中创建图像对象 voidclear() 清除图像 voiddrawImage(GreenfootImageimage,

intx,inty) 在坐标(x,y)处绘制指定图像对象 voiddrawLine(intx1,inty1,intx2,nty2) 绘制线段 voiddrawOval(intx,inty,intwidth,intheight) 绘制椭圆 voiddrawPolygon(int[]xPoints,int[]yPoints,intnPoints) 绘制多边形 voiddrawRect(intx,inty,intwidth,intheight) 绘制矩形 voiddrawString(Stringstring,intx,inty) 绘制字符串 voidfill() 使用当前颜色填充整个图像区域 voidfillOval(intx,inty,intwidth,intheight) 填充椭圆形区域 voidfillPolygon(int[]xPoints,int[]yPoints,

intnPoints) 填充多边形区域 voidfillRect(intx,inty,intwidth,intheight) 填充矩形区域 ColorgetColor() 获取目前的画笔颜色 ColorgetColorAt(intx,inty) 获取坐标(x,y)处的像素颜色 FontgetFont() 获取目前的字体 intgetHeight() 获取图像的高度 intgetTransparency() 获取图像的透明度 intgetWidth() 获取图像的宽度 voidmirrorHorizontally() 水平翻转图像 voidmirrorVertically() 垂直翻转图像 voidrotate(intdegrees) 围绕中心旋转图像 voidscale(intwidth,intheight) 根据指定尺寸缩放图像 voidsetColor(Colorcolor) 设置目前的画笔颜色 voidsetColorAt(intx,inty,Colorcolor) 设置坐标(x,y)处的颜色 voidsetFont(Fontf) 设置字体 voidsetTransparency(intt) 设置图像透明度 StringtoString() 获取图像的字符信息

表11.6GreenfootSound类

GreenfootSound(String?filename) 从声音文件创建一个声音对象 booleanisPlaying() 获取鼠标所操作的游戏角色对象 voidpause() 获取鼠标按键的编号 voidplay() 获取鼠标点击次数 voidplayLoop() 获取鼠标光标处的x坐标 voidstop() 获取鼠标光标处的y坐标 StringtoString() 获取字符串



场景信息



控制按钮



游戏面板



菜单栏







献花(0)
+1
(本文系62392237首藏)