无限精彩,DreamflyIT世界!

有一种执著叫坚持,有一种梦想叫超越!

导航

在手机上动起来的文字

Posted on 2006-04-29 11:30  韦忠波  阅读(351)  评论(0编辑  收藏  举报

 

主程序:

/*
 * GameMIDlet.java
 *
 * Created on 2006年4月28日, 下午9:31
 
*/


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

/**
 *
 * 
@author  hero
 * 
@version
 
*/

public class GameMIDlet extends MIDlet
{
     
static GameMIDlet instance;
    
static Display display;
    
private GameScreen gameScreen;
    
public GameMIDlet()
    
{
         instance 
= this;
        gameScreen 
= new GameScreen(false); //产生实例
        display = Display.getDisplay(this);
    }

    
protected void startApp() throws MIDletStateChangeException 
    
{
       gameScreen.start();
// 启动线程,不知道什么原因,在这一句出现stop的现象,有可能是自己用F5时,设置了断点
       display.setCurrent(gameScreen);
    }

    
     
protected void pauseApp()
    
{
        gameScreen.stop();
    }

    
    
public void destroyApp(boolean flag) throws MIDletStateChangeException
    
{
        gameScreen.stop();
    }

   
}

次程序:
/*
 * GameScreen.java
 *
 * Created on 2006年4月28日, 下午10:22
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 
*/


import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.util.Random;
/**
 *
 * 
@author hero
 
*/

 
final  class GameScreen extends GameCanvas implements Runnable
{
    
    
/** Creates a new instance of GameScreen */
      
private Graphics graphics; //保存图形环境实例
    private boolean runningFlag = false//线程运行标志
    private static final long TIME_PER_FRAME = 100;// 每一帧的周期
    private int width;//屏幕宽度
    private int height;//屏幕高度
    private Random random = new Random(); //设置一个随机数;
    public static final int BLUE = 0x000000ff;
    
private int x,y,vx,vy;
    String str
="J2ME游戏世界";
    
public GameScreen(boolean flag)
    
{
        
super(flag);
        graphics 
= getGraphics();//取得图形环境实例
        width = getWidth();
        height 
= getHeight();
        init();
     }

    
void  init()
    
{
          x
=width/2;
        y
=height/2;
        vx
=random.nextInt(2)+1;//nextInt(int i)定义在cldc 1.1中
        vy=random.nextInt(2)+1;
             
    }

    
private void input()
    
{
        
    }

    
private void logic()
    
{
        x
+=vx;
        y
+=vy;
        Font font
=graphics.getFont();
        
if(x<=0||x+font.stringWidth(str)>=width){
            vx
=-vx;
        }

        
if(y<=0||y+20>=height){
            vy
=-vy;
        }

      
    }

    
private void render(Graphics g)
    
{
        g.setColor(BLUE);
        g.fillRect(
00, width, height);
        g.setColor(
0x00ffffff);
        g.drawString(str,x,y,Graphics.LEFT
|Graphics.TOP);
    }

    
public synchronized void start()
    
{
        
if (!runningFlag) {
            runningFlag 
= true;
            Thread th 
= new Thread(this);//启动线程
            th.start();
        }

    }

    
public synchronized void stop()
    
{
        runningFlag
=false;
    }

    
public void run()
    
{

        
while(runningFlag)
        
{
            
long startTime=System.currentTimeMillis();
            input();
            logic();
            render(graphics);
            flushGraphics();
            
long elapsedTime = System.currentTimeMillis() - startTime;
            
if(elapsedTime < TIME_PER_FRAME)
            
{
                
try
                
{
                    Thread.sleep(TIME_PER_FRAME
-elapsedTime);
                }

                
catch(InterruptedException ex)
                
{
                    
                }

            }

        }

    }

}