`
rmi
  • 浏览: 2070 次
  • 性别: Icon_minigender_1
  • 来自: 南通
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

走上j2me的道路 第一集

阅读更多
刚开始实习 近期公司成立了android研发小组 我和几个同事一起被选进去做培养。以后不做J2EE了,老大说我们每天自己学习新技术,我呢会及时更新博客,貌似明天先叫我们看j2me,我一定要加油 我现在有最宝贵的青春做后盾 没老婆没孩子拼了
今天更新了
首先是以段代码  用上下左右控制小球移动

---------------------------入口类--------------------------------------
package day01;

import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Image;

public class MyDisPlay extends MIDlet {

private Display display;

public MyDisPlay() {
      display = Display.getDisplay(this);
}

protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
           System.out.println("destroyApp");
           System.out.println("destroyApp线程"+Thread.currentThread());
}

protected void pauseApp() {
System.out.println("pauseApp");
}

protected void startApp() throws MIDletStateChangeException {
System.out.println("startApp");
MyCanvas mc = new MyCanvas();
mc.setTitle("画布");
mc.setFullScreenMode(true);
mc.sizeChanged(200,100);

        display.setCurrent(mc);
}

}
---------------程序入口类-----------------------------------

--------------------画布类-------------------------------------
package day01;

import java.io.IOException;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

public class MyCanvas extends Canvas implements Runnable {

private int type;
private int x = 100;
private int y = 100;
private Image img;

public MyCanvas() {
Thread th = new Thread(this);
         th.start();
}

protected void paint(Graphics g) {
System.out.println("paint线程   " + Thread.currentThread());
System.out.println("paint");
g.setColor(0xffffff);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
g.setColor(0xff0000);
g.fillArc(x, y, 50, 50, 0, 360);

}

public int getGameAction(int keyCode) {
// TODO Auto-generated method stub
return super.getGameAction(keyCode);
}

public int getKeyCode(int gameAction) {
// TODO Auto-generated method stub
return super.getKeyCode(gameAction);
}

public String getKeyName(int keyCode) {
// TODO Auto-generated method stub
return super.getKeyName(keyCode);
}

public boolean hasPointerEvents() {
// TODO Auto-generated method stub
return super.hasPointerEvents();
}

public boolean hasPointerMotionEvents() {
// TODO Auto-generated method stub
return super.hasPointerMotionEvents();
}

public boolean hasRepeatEvents() {
// TODO Auto-generated method stub
return super.hasRepeatEvents();
}

protected void hideNotify() {
// TODO Auto-generated method stub
super.hideNotify();
System.out.println("hideNotify");
System.out.println("hideNotify线程   " + Thread.currentThread());
}

public boolean isDoubleBuffered() {
// TODO Auto-generated method stub
return super.isDoubleBuffered();
}

protected void keyPressed(int keyCode) {
// TODO Auto-generated method stub
super.keyPressed(keyCode);

System.out.println(keyCode + " keyPressed");
System.out.println("keyPressed线程   " + Thread.currentThread());
type = keyCode;
}

protected void keyReleased(int keyCode) {
// TODO Auto-generated method stub
super.keyReleased(keyCode);
System.out.println(keyCode + " keyReleased");
System.out.println("keyReleased线程   " + Thread.currentThread());
        type=-5;
}

protected void keyRepeated(int keyCode) {
// TODO Auto-generated method stub
super.keyRepeated(keyCode);

System.out.println(keyCode + " keyRepeated ");
System.out.println("keyRepeated线程   " + Thread.currentThread());
}

protected void pointerDragged(int x, int y) {
// TODO Auto-generated method stub
super.pointerDragged(x, y);
}

protected void pointerPressed(int x, int y) {
// TODO Auto-generated method stub
super.pointerPressed(x, y);
}

protected void pointerReleased(int x, int y) {
// TODO Auto-generated method stub
super.pointerReleased(x, y);
}

public void setCommandListener(CommandListener l) {
// TODO Auto-generated method stub
super.setCommandListener(l);
}

public void setFullScreenMode(boolean mode) {
super.setFullScreenMode(mode);
System.out.println("setFullScreenMode");
System.out.println("setFullScreenMode线程   " + Thread.currentThread());
}

protected void showNotify() {
super.showNotify();
System.out.println("showNotify");
System.out.println("showNotify线程   " + Thread.currentThread());
}

protected void sizeChanged(int w, int h) {
// TODO Auto-generated method stub
super.sizeChanged(w, h);
System.out.println("sizeChanged" + w + " " + h);
System.out.println("sizeChanged线程   " + Thread.currentThread());
}

public void run() {
while (true) {
System.out.println("不死线程"+Thread.currentThread());
switch (type) {
case -1:
y -= 10;
try {
Thread.currentThread().sleep(100);
repaint();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case -2:
y += 10;
try {
Thread.currentThread().sleep(100);
repaint();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case -3:
x -= 10;
try {
Thread.currentThread().sleep(100);
repaint();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case -4:
x += 10;
try {
Thread.currentThread().sleep(100);
repaint();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
default:
break;
}
}
}

}
------------------------------总结--------------------------------
用了线程控制小球移动 此程序正常运行
我使用了很多标记语句(打印语句)发现了很多问题:
1。在循环体中写repaint();不管你写几次,他只执行一次
例:for(int i=0;i<10;i++){
   System.out.println("--i--");
   repaint();
}
结果只运行10 次打印1次repaint();根据paint()只被调用一次判断的,没明白。
把 repaint();换成serviceRepaints() 竟然一次也不打印,奇怪。

2.上下左右控制 事件 流程我通过标记语句明白了
于是我在构造器中调用控制事件,结果一点反应也没 仍然只执行paint()1次,和不写一样(因为paint()必然执行一次)。
构造器代码如下:
for(int i = 0;i<10;i++){
keyPressed(-1);
keyReleased(-1);
}
我想可能事件触发必须硬件输入,并不是我表面想的那样,(也就是无法用代码实现)。
3.在构造器中写repaint(),程序也完全无视,写不写都只执行一次paint().

我猜可能是消息回调机制,下次更新解决上面的问题...
分享到:
评论

相关推荐

    J2ME小游戏合集很实用

    7. **J2me游戏1945第二版源代码**:1945是一款流行的垂直滚动射击游戏,这个J2ME版本展示了如何在小屏幕设备上实现高帧率的飞行射击游戏。源码提供了处理大量游戏对象、子弹轨迹和敌机AI的实例。 8. **J2me手机...

    j2me开发教程全集

    Java 2 Micro Edition(J2ME)是一种针对嵌入式设备和移动设备的Java平台,主要用于开发手机应用、智能家电控制、游戏等。本"j2me开发教程全集"涵盖了J2ME开发的核心概念、技术和实践案例,是学习和掌握J2ME编程的...

    J2ME开发 J2ME开发 J2ME开发

    1. **KVM (K Virtual Machine)**:这是J2ME设备上的Java虚拟机,它针对资源有限的设备进行了优化,内存占用小,启动速度快。 2. **MIDP (Mobile Information Device Profile)**:MIDP是J2ME中最常见的框架,用于...

    j2me开发教程全集.

    - **Record Management System (RMS)**:J2ME提供的一种本地数据存储机制,用于在设备上持久化数据。 7. **游戏开发** - **基本游戏架构**:如何构建一个简单的J2ME游戏,包括游戏循环、事件处理和帧速率控制。 ...

    我的第一个j2me游戏代码

    我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我...

    J2ME游戏开发(第一版)

    通过《J2ME游戏开发(第一版)》这本书,开发者将获得对J2ME平台深入的理解,并学会如何克服其挑战,创建出能在各种移动设备上运行的高质量游戏。书中可能还会包含实际案例研究和练习,帮助读者将理论知识转化为实践...

    J2ME API 2.0 J2ME使用手册 J2ME帮助文档

    Java 2 Micro Edition(J2ME)是Java平台的一个子集,专为资源有限的设备如移动电话、智能手表和家用电器等设计。J2ME API 2.0 提供了在这些小型设备上开发应用程序所需的类库和接口。这个API涵盖了多个配置和 ...

    j2me_plane.rar_j2me_j2me 飞机_j2me 飞机 游戏_飞机游戏

    本篇文章将深入探讨如何利用J2ME技术开发一款简单的飞机游戏,以此帮助初学者理解J2ME编程的基本原理和技巧。 首先,我们要了解J2ME的基础架构。J2ME包括配置(Configurations)、配置文件(Profiles)和功能包...

    J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏下,上为另一部分

    J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏

    J2ME小游戏J2ME小游戏J2ME小游戏上,下为另一部分

    J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏

    j2me开发教程全集.rar

    Java 2 Micro Edition(J2ME)是Java平台的一个子集,专为资源有限的设备如移动电话、PDA和家用电器设计。本教程全集将深入探讨J2ME的各个方面,帮助开发者掌握这一强大的技术。 J2ME由两部分组成:KVM(Java虚拟机...

    SUN官方的J2ME游戏实例源码集.rar

    《SUN官方J2ME游戏实例源码集》是一份专为Java初学者和J2ME游戏开发者设计的宝贵资源。这份源码集由SUN公司官方提供,旨在帮助开发者理解并掌握J2ME(Java 2 Micro Edition)平台上的游戏开发技术。J2ME是Java的一个...

    J2ME中文版教程 J2ME教程

    1. **J2ME概述**:教程首先介绍了J2ME的基本概念,包括其架构、主要组件和目标设备。J2ME由配置(Configurations)和 profiles(Profiles)组成,如CLDC(Connected Limited Device Configuration)和MIDP(Mobile ...

    j2me游戏.rar

    Java 2 Micro Edition(J2ME)是一种针对嵌入式设备和移动设备的Java平台,主要用于开发手机游戏、应用程序和服务。"j2me游戏.rar"很可能是包含了一系列使用J2ME技术开发的游戏资源包。在本文中,我们将深入探讨J2ME...

    J2ME_Map.rar_J2ME 地图_J2ME游戏_j2me 游戏_j2me_m_绘制地图

    在J2ME(Java 2 Micro Edition)平台上开发游戏时,地图的设计与绘制是至关重要的一个环节。J2ME作为一种轻量级的Java平台,广泛应用于移动设备,如早期的智能手机和平板电脑,用于实现各种应用程序,特别是游戏。本...

    Java J2ME学习实例源码集.rar

    这个压缩包"Java J2ME学习实例源码集.rar"显然是一份针对J2ME初学者的资源集合,包含了一些关于文本处理和图像处理的源代码示例。下面,我们将深入探讨这两个领域的关键知识点。 1. **文本处理**: - **文本输入与...

    j2me开发框架介绍

    1. EasyMF 简易 J2ME 开发框架 EasyMF 是一个 J2ME 开发框架,目标是设计一个简单、稳定、可快速开发的 J2ME 开发框架。它简化了 UI 设计、RMS 操作、日志框架、联网框架、通用工具设计等多个方面。EasyMF 的功能...

    J2ME教材:J2ME&Gaming中文版

    总的来说,“J2ME&Gaming中文版”是一本引导初学者进入J2ME游戏开发领域的教程,它将帮助你理解如何利用Java语言在移动平台上创建互动性强、趣味性高的游戏。通过深入学习和实践,你可以掌握到构建移动游戏所需的...

    j2me手机浏览器/j2me手机浏览器

    在2000年代初期,J2ME是许多非智能手机上实现互联网浏览的主要技术,其中“j2me手机浏览器”就是这样一个应用。这个应用允许用户在他们的手机上访问网页,尽管其功能和性能可能与现代智能手机上的高级浏览器相比有限...

Global site tag (gtag.js) - Google Analytics