`
izuoyan
  • 浏览: 9220780 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

J2ME游戏开发中时钟的简单实现

阅读更多

作者:mingjava 文章来源:http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=436

在游戏开发中,有时候我们需要一个时钟来记录游戏的时间,如果时间结束则结束游戏。本文介绍如何在J2ME中使用Timer和TimerTask来实现这样一个时钟,并给出具体代码实例。

在java.util包中有一个TimerTask类,你可以扩展这个类并且实现他的run()方法,在run()方法中编写我们的逻辑代码。如果我们想制作一个游戏时钟,那么非常简单我们编写一个GameClock类扩展TimerTask,GameClock需要维持一个实例变量timeLeft,这样我们就可以记录游戏剩余的时间了,在每次run()运行的时候把timeLeft减1就可以了。有时候我们需要始终暂停以及重新启动,这并不复杂,在GameClock中添加一个boolean类型的标记就可以了。下面给出GameClock的代码:
/*
* GameClock.java
*
* Created on 2005年7月18日, 上午11:00
*
* To change this template, choose Tools | Options and locate the template under
* the Source Creation and Management node. Right-click the template and choose
* Open. You can then make changes to the template in the Source Editor.
*/

package com.j2medev.gameclock;
import java.util.TimerTask;
/**
*
* @author Administrator
*/
public class GameClock extends TimerTask{

private int timeLeft = 60;//时钟的默认时间
private boolean pause = false;
/** Creates a new instance of GameClock */
public GameClock() {
}

public GameClock(int value){
timeLeft = value;
}

public void run(){
if(!pause){
timeLeft--;
}
}

public void pause(){
pause = true;
}

public void resume(){
pause = false;
}

public int getTimeLeft(){
return timeLeft;
}

public void setTimeLeft(int _value){
this.timeLeft = _value;
}


}

当我们使用这个时钟的时候,只需要把它的一个实例作为参数传给Timer的schedule()方法即可。例如
clock = new GameClock(30);
timer.schedule(clock,0,1000);

  接下来我们编写一个简单的游戏界面测试一下时钟。我们在程序启动的时候开始计时,每隔一秒钟timeLeft会减少1,并且在手机屏幕上显示当前剩余的时间。如果timeLeft为0的时候代表游戏已经结束了。因此我们需要这样判断游戏的状态。
public void verifyGameState(){
timeLeft = clock.getTimeLeft();
if(timeLeft == 0){
going = false;
}
}
为了测试时钟的暂停功能,我们接收用户的按键行为,如果左键被按下,那么调用clock的pause()方法,如果右键被按下则调用clock的resume()方法。
public void userInput(){
int keyStates = this.getKeyStates();
if((keyStates & GameCanvas.LEFT_PRESSED) != 0){
clock.pause();
}else if((keyStates & GameCanvas.RIGHT_PRESSED) != 0){
clock.resume();
}

}

下面给出MIDlet和Canvas的代码:
/*
* ClockCanvas.java
*
* Created on 2005年7月18日, 上午11:04
*
* To change this template, choose Tools | Options and locate the template under
* the Source Creation and Management node. Right-click the template and choose
* Open. You can then make changes to the template in the Source Editor.
*/

package com.j2medev.gameclock;
import java.util.Timer;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.game.*;

/**
*
* @author Administrator
*/
public class ClockCanvas extends GameCanvas implements Runnable {

private Timer timer = new Timer();
private GameClock clock = null;
private boolean going = true;
int timeLeft = 0;
/** Creates a new instance of ClockCanvas */
public ClockCanvas() {
super(false);
}

public void run(){
clock = new GameClock(30);
timer.schedule(clock,0,1000);
while(going){
verifyGameState();
userInput();
repaint();
try{
Thread.sleep(100);
}catch(Exception e){
e.printStackTrace();
}

}
}

public void userInput(){
int keyStates = this.getKeyStates();
if((keyStates & GameCanvas.LEFT_PRESSED) != 0){
clock.pause();
}else if((keyStates & GameCanvas.RIGHT_PRESSED) != 0){
clock.resume();
}

}

public void paint(Graphics g){
int color = g.getColor();
g.setColor(0xffffff);
g.fillRect(0,0, this.getWidth(), this.getHeight());
g.setColor(color);

if(timeLeft == 0){
g.drawString("游戏结束", this.getWidth()/2, this.getHeight()/4, Graphics.HCENTER|Graphics.BOTTOM);
}else{
g.drawString("游戏剩余时间:"+timeLeft, this.getWidth()/2, this.getHeight()/4, Graphics.HCENTER|Graphics.BOTTOM);

}


}

public void verifyGameState(){
timeLeft = clock.getTimeLeft();
if(timeLeft == 0){
going = false;
}
}

public void start(){
Thread t = new Thread(this);
t.start();
}

public void stop(){
going = false;
}

}

/*
* TestMidlet.java
*
* Created on 2005年7月18日, 上午11:00
*/

package com.j2medev.gameclock;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

/**
*
* @author Administrator
* @version
*/
public class TestMidlet extends MIDlet {

private Display display = null;

public void startApp() {
display = Display.getDisplay(this);
ClockCanvas canvas = new ClockCanvas();
canvas.start();
display.setCurrent(canvas);
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
}
}
  程序运行的截图如下:

   总结:本文实现了一个游戏开发中可能用到的时钟程序,代码并不复杂。希望能对大家有所帮助。

分享到:
评论

相关推荐

    J2ME游戏开发(中文译本)

    5. **游戏物理系统**:介绍基本的物理规则,如碰撞检测、重力模拟,以及如何在J2ME中实现这些物理效果。 6. **音频和多媒体**:讨论如何在J2ME游戏中集成音频效果,包括背景音乐和音效的播放,以及如何处理多媒体...

    j2me游戏开发 经典教程

    j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发

    j2ME游戏开发详解

    【j2ME游戏开发详解】 Java 2 Micro Edition(j2ME)是Oracle公司推出的用于开发和部署在小型设备、移动设备以及嵌入式系统上的应用程序的平台。它以其轻量级、跨平台的特性,成为了早期手机游戏开发的重要工具。本...

    J2ME 游戏开发资源

    在J2ME游戏开发中,以下几个核心知识点至关重要: 1. **基础环境搭建**:首先,开发者需要安装Java SDK,然后配置J2ME的开发环境,如NetBeans或Eclipse,搭配WTK(Wireless Toolkit)或MIDP(Mobile Information ...

    j2me游戏开发及其源码.rar_J2ME游戏_j2me_j2me game source_j2me 游戏_j2me游戏开发

    在J2ME游戏开发中,你需要了解以下几个核心知识点: 1. **基础环境配置**:首先,开发者需要安装Java SDK和J2ME Wireless Toolkit (J2ME WTK)。J2ME WTK提供了模拟器和开发工具,帮助开发者编写、测试和调试J2ME...

    J2ME游戏开发(第一版)

    在J2ME游戏开发中,以下几个关键知识点至关重要: 1. **MIDP API**:这是开发J2ME游戏的核心,它提供了图形绘制、事件处理、用户界面构建等功能。例如,`Canvas`类是游戏的主要绘图表面,允许开发者直接进行像素级...

    J2ME游戏开发中的WTK游戏框架

    "J2ME游戏开发中的WTK游戏框架" 指的是在Java Micro Edition(J2ME)平台上,使用Wireless Toolkit(WTK)进行游戏开发时所采用的一种特定的游戏开发框架。J2ME是Java的一个子集,用于开发和部署在移动设备、...

    J2ME游戏开发教程 pdf文件

    **J2ME游戏开发教程详解** Java 2 Micro Edition(J2ME)是Java平台的一个子集,专门设计用于资源有限的设备,如移动电话、智能手表和家用电器等。在2000年代初,J2ME是移动游戏开发的重要平台,许多经典手机游戏都...

    j2me游戏开发实例

    在J2ME游戏开发实例中,它可能详细介绍了每个游戏的实现原理、技术要点以及运行要求。 2. **Chap12、Chap17、...**:这些章节名称可能对应着书籍中的各个章节,每个章节可能涵盖不同的游戏开发主题,如2D图形绘制、...

    J2ME 游戏开发(基本功能开发)

    在J2ME中进行游戏开发,开发者可以利用其跨平台特性,将游戏移植到各种不同的设备上。本教程将探讨J2ME游戏开发的基本功能,特别是人物和地图的绘制。 **1. J2ME游戏架构** 在J2ME中,游戏通常基于MIDP(Mobile ...

    J2ME游戏开发PDF教程

    **J2ME游戏开发概述** Java 2 Micro Edition(J2ME)是Java平台的一个子集,主要用于嵌入式设备和移动设备,如早期的智能手机和平板电脑。它提供了丰富的功能,使得开发者能够构建功能丰富的应用程序,特别是游戏。...

    j2me游戏开发详解

    在J2ME游戏开发中,首先需要理解的是基础环境的搭建,包括安装Java SDK、配置J2ME Wireless Toolkit (WTK) 或者NetBeans IDE等,这些工具为开发者提供了编写、测试和调试J2ME应用的环境。开发者还需要熟悉MIDP...

    J2ME游戏程序开发实例详解.pdf

    J2ME的游戏程序开发则是利用J2ME平台开发可在手机等移动设备上运行的简单游戏。由于设备资源有限,J2ME游戏通常比PC游戏或游戏机游戏简单许多。下面将围绕J2ME游戏程序开发的关键知识点进行详细解释。 1. J2ME的...

    经典→j2me游戏开发实例讲解

    Java 2 Micro Edition(J2ME)是一种针对嵌入式设备和移动设备的Java平台,它主要用于开发在手机、智能手表、电视等设备上的应用程序,尤其是游戏。本篇将深入探讨J2ME游戏开发的经典实例,揭示其核心技术和设计思路...

    J2ME游戏开发J2ME游戏开发

    **J2ME游戏开发** Java 2 Micro Edition (J2ME) 是一种Java平台,主要用于开发和部署在移动设备、嵌入式系统以及家用电器上的应用程序,尤其在早期的智能手机和功能手机上广泛用于游戏开发。J2ME以其轻量级、跨平台...

    J2ME游戏开发实例讲解

    在本文中,我们将深入探讨如何利用J2ME进行游戏开发,以华容道游戏为例,展示从项目规划到最终实现的全过程。 首先,开发者在决定使用J2ME进行游戏开发时,通常是基于其广泛的应用场景和便捷的开发环境。J2ME由配置...

    J2ME开发 J2ME开发 J2ME开发

    在J2ME开发中,开发者通常会使用集成开发环境(IDE),如NetBeans、Eclipse或JBuilder,这些工具提供了代码编辑、调试和打包应用的功能。编写完代码后,需要通过模拟器或实际设备进行测试。 "J2ME开发.pdf"可能包含...

Global site tag (gtag.js) - Google Analytics