- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验二 英雄出击(Hero Walking)
【实验目的与要求】
1.掌握用户按键事件处理方法
2.进一步掌握Sprite类
3.掌握碰撞检测的处理过程
4.实现英雄行走功能
【软硬件环境】
J2ME移动平台
【实验涉及的主要知识单元】
1. Canvas类处理用户按键方法
2. GameCanvas类处理用户按键方法
3. Sprite 类构造函数
4. 精灵碰撞
5. 精灵处理
6. 精灵变换
【实验内容与步骤】
一、用户按键事件处理
MIDP1.0:Canvas类处理用户按键方法
MIDP2.0:GameCanvas类处理用户按键方法
以下是 MIDP 1.0 实现的循环:
public void theGameCanvas extends Canvas implements Runnable {
public void run() {
while (true) {
repaint(); //更新游戏持续时间
}
}
public void paint(Graphics g) {
//着色
// 重新绘制图像
}
protected void keyPressed(int keyCode) {
//获得用户输入
}
}
上述代码有三个显而易见的功能块:屏幕绘制、run()和消息处理;所有这些都是在不同的线程中运行的。正是由于多个线程的缘故,最终的显示有可能偶尔会出 现不平稳的情况,特别是需要很多图形图像和交互内容的动作游戏。在三个不同的 部分跟踪三个不同的功能也是很麻烦的。
J2ME 游戏开发——基于 MIDP2.0
与 MIDP 1.0 中相比较,MIDP 2.0 中的 GameCanvas 带来了两点好处。一个是 创建的每一个 GameCanvas 类都有一个独立的 buffer,从而不但减少了堆的使用率, 也可以使用一个单独的堆控制游戏。在 MIDP 2.0 中,对 GameCanvas 的扩展,使一切都变得更清洁、更易使用也更 有效率。
GameCanvas 运行在一个线程中,同时运用 polling 的技术避免了对消息处 理(keyPressed)的等待,这意味着可以随时通过 GameCanvas 类提供的 getKeysState() 方法来获取按键的情况。通过 buffer 的使用,一种称为双缓冲(double buffering) 的技术被自动应用,开发者需要做到只是调用 flushGraphics()来显示图像。双缓冲 技术是用来避免屏幕显示的抖动问题,一般先在后台绘制一个临时的图像,绘制完 成后直接切换到显示区域,从而避免了直接在显示区域绘制时因延时发生的闪烁。
下面是 GameCanvas 使用的实例,在这个例子中用户可以通过按键控制“x”的 移动:
GameCanvas
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
public class ExampleGameCanvas extends GameCanvas implements
Runnable {
private boolean isPlay; // Game Loop runs when isPlay is true private long delay; // To give thread consistency
private int currentX, currentY; // To hold current position of the X
private int width; // To hold screen width private int height; // To hold screen height
// Constructor and initialization
public ExampleGameCanvas() {
super(true);
width = getWidth(); height = getHeight(); currentX = width / 2; currentY = height / 2; delay = 20;
}
// Automatically start thread for game loop
public void start() {
isPlay = true;
Thread t = new Thread(this);
t.start();
}
public void stop() {
isPlay = false;
}
// Main Game Loop
public void run() {
Graphics g = getGraphics();
您可能关注的文档
最近下载
- ARDS病理生理机制与临床诊疗实践题库答案-2025年华医网继续教育.docx VIP
- 急诊辅助检查判读与分析能力提升题库及答案-2025年华医网继续教育.docx VIP
- 游戏开发流程之完整指南.docx
- 2022年度中央机关遴选笔试题B卷真题试卷答案解析.doc VIP
- 飞机维修专业职业生涯规划书.pptx VIP
- 套管换热器计算(1).xls VIP
- 售后工程师沟通与协调技巧培养.pptx VIP
- 盐城市静脉产业园规划修编(2020-2030)环境影响报告书.docx VIP
- 民航安全隐患排查治理.docx VIP
- (高清版)DB42∕T 2305-2024 《高品质住宅技术标准》.pdf VIP
原创力文档


文档评论(0)