⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gamescreen.java

📁 《j2me开发精解〉(詹健飞)CD-rom附带源码。用netbeans
💻 JAVA
字号:
package com.j2medev.chapter5.game;

import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.util.Random;

final class GameScreen extends GameCanvas implements Runnable {
    
    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游戏世界";
    
    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(0, 0, 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) {
                }
            }
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -