![Java游戏开发实践:Greenfoot编程快速入门](https://wfqqreader-1252317822.image.myqcloud.com/cover/642/26793642/b_26793642.jpg)
第1章 Greenfoot简介
本章将要介绍Greenfoot的一些基本内容,包括Greenfoot的安装与设置、Greenfoot的基本操作,以及Greenfoot的API等。通过本章的介绍,可以全面了解Greenfoot的主要功能,同时初步掌握Greenfoot的使用方法。
1.1 概述
Greenfoot是由英国肯特大学的Michael和Martin设计的一款Java游戏设计工具,它是一个功能完整的开发环境,可以方便地使用Java语言编写游戏和进行游戏模拟。Greenfoot可认为是一个用Java语言创建的二维图形程序框架和集成开发环境的结合体,它支持Java语言的全部特性,特别适合进行基于组件的可视化编程。在Greenfoot中,对象的可视化和交互性是其重要特征,任何游戏中的角色和物体都可以通过鼠标拖放的形式添加和更改。
Greenfoot的运行界面很简洁,主要分为4个功能区域:菜单栏、游戏面板、控制按钮和场景信息,如图1.1所示。
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-P12_19047.jpg?sign=1739618227-cVV6sy1VO0n01ubqlTlsLNwymJnhPZkL-0-4ad19e30751427cd8410fa096994d3f3)
图1.1 Greenfoot的运行界面
菜单栏中的各菜单项对应着各种操作命令,包括“打开”“删除”“关闭”等命令;游戏面板是整个游戏的运行容器,游戏的场景和角色在此进行交互和显示;场景信息中显示了游戏的组成部分及其结构;控制按钮用于对游戏进行即时掌控:“运行”按钮用于自动运行游戏,“单步”按钮用于单步运行游戏,“复位”按钮让游戏回到初始情形,“运行速度”滚动条用来调节游戏的运行速度,“编译全部”按钮用来编译游戏代码。
1.2 Greenfoot的安装及设置
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-P13_2147.jpg?sign=1739618227-9ZsL9JWeYZM15TYyDK23lLyPxSJrIsWl-0-dbd596086b22126f19cb5c5f7f4195f0)
Greenfoot是一款免费的开源软件,可以在官网(www.greenfoot.org/download)直接下载,下载页面如图1.2所示。截至本书写作完毕,Greenfoot的最新版本为3.1.0,在下载页面中提供了各个平台下的Greenfoot安装包,包括Windows、Mac、Linux及其他Java平台。由于Greenfoot 3.x系列版本主要支持Windows 7以上的操作系统,考虑到与Windows XP系统的兼容性问题,本书以Greenfoot 2.x系列的最高版本2.4.2来编写游戏程序案例(本书还提供了Greenfoot 3.x版本的案例代码,以便安装Greenfoot最新版本的读者使用)。
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-P13_2140.jpg?sign=1739618227-ivqtFvmMEf0pqaBpcS3AJ5YSQnrFiqKg-0-2757ecc4aa3b5c3c140f1e8796a7b42c)
图1.2 Greenfoot下载页面
另外,Greenfoot 3.x系列加入了新的“Stride模式”,即将各种程序语法做成类似积木块的小模块,然后通过组合与拼接这些语法模块来搭建程序,目的是让初学者专注于程序编写的过程,而避免陷入程序语法的细节中。然而,虽然Stride模式能够帮助新手快速学会编程,但是对于编写大规模的程序却不够灵活和方便,而且游戏程序相对比较复杂,因此没有必要采用Stride模式来编写程序,直接使用传统的文本编辑模式即可。
Greenfoot 2.4.2版本的下载地址位于图1.2所示的下载页面最下方的“Old Versions”一栏。单击“old versions of Greenfoot”链接(www.greenfoot.org/download_old),可见图1.3所示页面,在该页面中可以找到Greenfoot 2.4.2的安装程序。
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-P14_19049.jpg?sign=1739618227-qLFy8dGytr12ZgbF2UznfTMvz2YE10JX-0-d5840813e9fcee004fd25bd604c801ca)
图1.3 Greenfoot 2.4.2下载页面
Greenfoot是基于Java开发环境的,其运行离不开JDK(Java开发工具包)的支持。从图1.3中可以看到,Greenfoot 2.4.2为Windows平台提供了两个安装程序,第一个已绑定了JDK,无须另外安装;第二个只是单独的Greenfoot安装程序,没有绑定JDK,因此需要先安装JDK后再安装Greenfoot。Greenfoot 2.4.2支持JDK 1.6及以上版本。当然,使用其他操作系统的读者也可以选择相应的Greenfoot安装文件进行安装。
在初次使用Greenfoot的时候,会弹出如图1.4所示的界面,需要在其中设置JDK的安装路径。单击左下角的“Browse”按钮进行设置。
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-P14_2168.jpg?sign=1739618227-xYr9K7A16GlYXYqWqSuvsQ0BDBiAzd03-0-b394e276d1fc706aeae8be64d7ae0222)
图1.4 JDK设置界面
随后会打开JDK选择对话框,如图1.5所示,在其中选择JDK的安装路径。若下载的Greenfoot安装文件绑定了JDK的版本,则可进入Greenfoot安装目录下的“jdk/bin”子目录,选择“java”文件,然后单击对话框下方的“打开”按钮,即可正常使用Greenfoot。
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-P15_2189.jpg?sign=1739618227-yIgmGjBOnkuX4c5t40QK2pL7dPMgCK0Q-0-94c62c9878c7cf30952565eacd7262ff)
图1.5 JDK选择对话框
Greenfoot是一款国际化的设计工具,支持多个国家的语言,安装完成后可将其界面设置为中文。打开Greenfoot,在主界面的菜单栏单击“Edit”菜单项下的“Preferences”选项,如图1.6所示。
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-P15_2193.jpg?sign=1739618227-lIo8gsHF4Gjxvly9QJOKmhMdrgctsaL8-0-504d9342e7ac2bf37f8cc66390ce199e)
图1.6 菜单栏中的“Preferences”选项
然后单击“Interface”标签,并在“Language”选项后的下拉列表中选择“Chinese”,如图1.7所示。关闭并重启Greenfoot,可以发现操作界面上的文字都变成了中文。
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-P16_2209.jpg?sign=1739618227-QNIclJrr3XhZWTJR0JOixxM9WJwnjkZf-0-278018455a1a011de474c8c92030103b)
图1.7 设置中文界面
1.3 Greenfoot基本操作方法
1.3.1 创建游戏场景
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-P16_2219.jpg?sign=1739618227-AClObWl7ofbqZuGAGnEqV5SycA6ugo2z-0-f98ef9b88f52212a31c7c354917b620a)
使用Greenfoot进行游戏设计,首先需要新建一个游戏项目。在Greenfoot界面的菜单栏中单击“剧本”菜单项下的“新建剧本”选项,如图1.8所示。在随后弹出的对话框中为游戏项目设置保存路径,同时设置一个项目名称,例如“myGame”。Greenfoot会自动创建一个文件夹,里面包含了该游戏的所有文件。
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-P16_2215.jpg?sign=1739618227-eEg3BwhvthXVXDJyv1utIHl3fYbMeReF-0-42299a5d13ddf0c5bdf8df7b091ca840)
图1.8 创建游戏项目
在创建游戏项目后,会出现一个空的游戏场景界面。界面右侧分别有两个类:一个是场景类World,另一个是角色类Actor。Java程序都是由类组成,而组成Greenfoot游戏的类则主要是场景类和角色类。需要注意,World类和Actor类都是抽象类,它们不能直接被使用,在设计程序时需要创建这两个类的子类才行,这在以后的游戏设计中会详细介绍。
接下来,右击World类,在弹出的快捷菜单中单击“新建子类”选项,如图1.9所示。
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-P17_2235.jpg?sign=1739618227-ycZl7eCOTILeMs7FdD9Il9sfau4kEpOo-0-c0c43d0fbdb541068fd0a36d67ed0cca)
图1.9 创建游戏场景
当执行“新建子类”命令后,将弹出“新建类”对话框进行World子类的设置,如图1.10所示。
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-P17_2239.jpg?sign=1739618227-4ODNJk85yUnmxWR3cc18XeKrXI1x3Jyf-0-78bcbdea7e8a4a9755451b3823cb1e62)
图1.10 “新建类”对话框
在图1.10中的“类名”文本框中输入子类的名称“MyWorld”。然后单击“完成”按钮,并单击Greenfoot界面右下方的“编译全部”按钮,便可以看到如图1.11所示的游戏场景。因为没有设置背景图像,所以系统默认生成的是一个白色背景的空白游戏场景。
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-P18_2252.jpg?sign=1739618227-UxGFlmXi2D0zdBPeViUxYPoH6VRoE6Mo-0-05eb96f473cd5aa19f2b19c53977c188)
图1.11 新建的游戏场景
需要指出的是,图1.11中所示的游戏场景面板的尺寸是可以调节的。右击图1.12上的场景子类MyWorld,在弹出的快捷菜单中选择“编辑代码”命令,则会弹出图1.13所示的MyWorld类的源代码框。
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-P18_2255.jpg?sign=1739618227-ykxL2CwfFrCGDXYbNu4cuzEOH4s1WGM4-0-99576a6fa6281d9508704abb743fe37e)
图1.12 选择“编辑代码”命令
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-P19_2274.jpg?sign=1739618227-iKFiUYl5WfPBDgF8muG6DnBJhz2S9HJd-0-f9256635f7351511d7dc32c15347e6f7)
图1.13 MyWorld类的源代码框
在图1.13中找到“super(600, 400, 1);”这条语句,它表示创建一个尺寸为600像素×400像素大小的游戏场景。如果将它改为“super(300, 200, 1);”,则创建的游戏场景尺寸变为了300像素×200像素大小。然后,单击Greenfoot界面右下角的“编译全部”按钮,便会生成图1.14所示的新尺寸的游戏场景面板。可以看到,新的游戏场景面板的尺寸比初始时缩小了一半。
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-P19_2278.jpg?sign=1739618227-mBVbP5FgU6NhWAxJDf9vYyG6flmPHuDl-0-3df734c9ac594d95d866d37832474fec)
图1.14 尺寸为300像素×200像素的游戏场景
此外,也可以在设置游戏场景时导入其他背景图片。这里选择的图片文件是“cell.jpg”文件,它是事先准备好的,并已被放置到游戏项目文件夹下的“images”子文件夹中。当然也可以选择或导入其他文件夹中的图片文件,但建议将项目中使用的所有图片文件放置在项目的“images”文件夹中,以便统一进行管理。
右击MyWorld类,在弹出的快捷菜单中选择“设置图像”选项,如图1.15所示。
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-P20_2291.jpg?sign=1739618227-cxV5fFXZ8uApyr5YxuvK3kC9kggVO6lx-0-121e134e0d226fa4ff80153dffb8fc68)
图1.15 设置场景的背景图像
此时将会弹出“选择类图像”对话框,如图1.16所示。
从该对话框中选择“cell.jpg”图片文件并单击“完成”按钮,即可看到Greenfoot更新了游戏场景。同时可以看到“cell.jpg”文件被设为场景的背景图像,并以平铺的方式填充了整个场景,如图1.17所示。若在图1.16所示的对话框中看不到“cell.jpg”图片文件,可以单击对话框中的“从计算机导入”按钮,然后在计算机磁盘中选择相应的图片并导入。
将游戏场景的尺寸恢复到初始大小(即600像素×400像素),这时背景图像仍然会以平铺的方式自动填充整个游戏场景。
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-P20_2295.jpg?sign=1739618227-B3gNXsQ6oPVmTtRIXoEZF1TEdahA7Zl9-0-42763784cd26f4b01d256462d98a7510)
图1.16 “选择类图像”对话框
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-P21_2307.jpg?sign=1739618227-CjPbt2pLT2IRhFQjlnayiFzvhfj3Fd34-0-b059baebbfce612f21728a709cdb27ea)
图1.17 设置背景图像后的游戏场景
1.3.2 添加游戏角色
Greenfoot是交互式的图形编程环境,可以用鼠标拖曳的方式向场景中添加游戏角色。
在添加角色前,首先要在游戏中创建一个角色。Greenfoot提供了一个角色类Actor,让游戏设计者通过创建它的子类来为游戏添加角色。右击Greenfoot界面上的Actor类,单击弹出快捷菜单上的“新建子类”选项,如图1.18所示。
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-P21_2312.jpg?sign=1739618227-A9dlsuU9MHRxspH1l6sPsoH3qe108j3T-0-341e72b0270bdf3358403a276bdc3b24)
图1.18 创建游戏角色
此时将会弹出如图1.19所示的“新建类”对话框,在该对话框中设置游戏角色类的名称为“Wombat”,并将事先准备的图片文件“wombat.gif”作为角色图像。
在“新建类”对话框中设置好角色类的名称和图像后,单击“完成”按钮。回到Greenfoot界面,单击“编译全部”按钮,会看见Greenfoot右侧的类图上新添加了一个名为Wombat的游戏角色类。
右击这个Wombat类,在弹出的快捷菜单中选择“new Wombat()”命令,然后单击游戏场景面板的任意一个网格,即可看到一个Wombat类的游戏角色对象被添加到游戏场景中,如图1.20所示。若是按住Shift键再移动鼠标,便可以重复地向游戏场景中添加多个角色对象。
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-P22_2330.jpg?sign=1739618227-hbyp0rHP6xSII6PiUpyeNM3seYfp8k2o-0-405a87321ae37f7cfc003e2a328eb763)
图1.19 设置角色的名称与图像
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-P22_2325.jpg?sign=1739618227-LyqXtuyZ7drRaATfpN5J6yFl23rcQnt7-0-a2b760824c215743ecb447d6f4039422)
图1.20 在场景中添加游戏角色
1.3.3 运行游戏
现在来看看Greenfoot界面上的控制按钮是怎样控制游戏程序运行的。在控制按钮区域单击“运行”按钮,可以让游戏自动运行。在运行过程中,“运行”按钮会转变为“暂停”按钮,单击它会使得游戏暂停运行。还有一个“复位”按钮,单击可以让程序还原到运行前的初始状态。可以调节“运行速度”滚动条来调节游戏的运行速度,当把滚动条中的滑块向右侧移动时,游戏的运行速度便加快了。若是想测试游戏角色的行为,则可以单击“单步”按钮来让游戏单步执行,每单击一次,游戏便运行一帧。而单击“运行”按钮实际上不过是循环地重复单步游戏程序。
“单步”按钮表示游戏在一个单位时间内的运行情况,但要注意,这里的单位时间并不是以秒或毫秒来度量的。因为每台计算机的硬件配置不同,运行情况有差异,所以编程时无法用精确的时间单位来计算游戏时间。这里所说的单位游戏时间是指游戏循环程序运行一次所耗费的那部分时间。
然而对于刚才创建的游戏来说,当游戏角色添加完毕后单击“运行”按钮,游戏似乎没有任何反应。此时程序虽然开始运行了,但角色并没有真正运动起来。这是因为虽然向场景中添加了游戏角色,但没有为角色编写任何的运动控制代码,所以角色还不能运动。需要打开角色子类的代码框,然后在其中编写运行代码,这在后面的章节中将会详细介绍。
1.4 Greenfoot提供的主要API
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-P23_2394.jpg?sign=1739618227-19GnombsFHFrpfSAZhZWAnF9bzdD0aTp-0-9bb84d471466505f5aae2fcd98da1a6e)
Greenfoot为编程人员提供了丰富的API(Application Programming Interface,应用程序接口),通过调用这些API可以方便地编写各种游戏操作。Greenfoot API包含了几个主要的类:World类、Actor类、Greenfoot类、MouseInfo类、GreenfootImage类和GreenfootSound类。
World类和Actor类分别作为游戏场景和游戏角色的父类;Greenfoot类提供了使用Greenfoot自身框架的入口,例如暂停游戏运行或调整游戏速度等;GreenfootImage类是一个图像类,主要为游戏场景和游戏角色提供图形及图像的绘制方法;MouseInfo类是一个提供鼠标输入信息的类,例如获取鼠标单击的坐标以及标示什么角色被单击等;GreenfootSound类则提供了对游戏音频的播放和处理方法。表1.1~表1.6分别列举了各类的主要方法。
表1.1 World类的主要方法
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-T23_19051.jpg?sign=1739618227-JkJXLz1VsMWnnmBm0QsAlGhED17dShUH-0-08f6bba715dbbb892fc92917b0277e50)
表1.2 Actor类的主要方法
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-T24_19055.jpg?sign=1739618227-Ud9zrO5a6Z77A4uHdjUEowVOCoRXq09H-0-ee5a49a23dfd704132291046c28f9a10)
表1.3 Greenfoot类的主要方法
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-T25_19059.jpg?sign=1739618227-BXZq3PZGauUHPB5bobFjGc8F84ZN6LoT-0-8adb6cd8b5049902d8dfb7d8b2894d84)
表1.4 MouseInfo类的主要方法
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-T25_19060.jpg?sign=1739618227-pd0hWTGAzAjOyywlV4BANSwqKMpvvKXy-0-83b44ffd572788c0d0a1b4351e1d1a31)
表1.5 GreenfootImage类的主要方法
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-T26_19064.jpg?sign=1739618227-6LN0Yb2R9vpgHBCTfQIq69fItpIbkYBx-0-754bbb4ef3638e69106fae31b7a040b1)
表1.6 GreenfootSound类的主要方法
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-T27_19065.jpg?sign=1739618227-Unah7gmc47QZKuF14LGAuCLoaviXBLZl-0-7fe5a68721ecc42a2618e4de4b2b1c4a)
若想要了解各个类的具体使用方法,可以在Greenfoot菜单栏的“帮助”菜单项中选择“Greenfoot类文档”选项,或者直接在World类或Actor类上双击。Greenfoot API的说明文档和Greenfoot软件集成在一起,不需要联网就可以查看,如图1.21所示。Greenfoot API的详细资料参见本书的附录部分。
![](https://epubservercos.yuewen.com/02F389/15253386504112906/epubprivate/OEBPS/Images/Figure-P27_3160.jpg?sign=1739618227-ydS0trtEZnGOGM0bqQVM0Q87lDxw4Egx-0-a2a4c67ba36fe3ad51407d9d195e67a9)
图1.21 Greenfoot API说明文档