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

📄 mycanvas.java

📁 简单的RPG框架 有狠人请留言 教教俺咋弄
💻 JAVA
字号:
package src;

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

public class myCanvas extends Canvas implements Runnable, Static {
	MyMidlet mid;

	int SystemStead; // 当前系统状态

	int i_canvasW, i_canvasH; // 屏幕宽高

	Image huan3Chong1; // 定义一个双缓冲屏幕

	Graphics g; // 定义一个缓冲区画笔

	boolean is_gameRun; // 游戏是否运行

	long systemTime;// 刷新频率时间

	boolean is_up, is_down, is_left, is_right, is_fire;// 连续按键开关
	
	Loading loading;//读取资源
	
//----------LOADING--------------------------------------------------
	String loding[] = {"请","等","待",".",".",".","."};
	int i_loading[] = new int[loding.length];
	int i_loadSpeed = 2;
//----------logo------------------------------------------------------
	String name_logo[] = {"res/cmcc_60","res/sp"};
	long nowTime,oldTime;
	Image img_logo;
	int nowloge;	//logo计数器
	
//-----------game-----------------------------------------------------
	map nowMap;
	man hero;
//--------------------------------------------------------------------
	myCanvas(MyMidlet mid) {
		this.mid = mid;
		setFullScreenMode(true); // 设置全屏

		i_canvasW = 240; // 屏幕宽
		i_canvasH = 320; // 屏幕高
		// 建立缓冲
		huan3Chong1 = Image.createImage(i_canvasW, i_canvasH);
		// 取得缓冲区画笔
		g = huan3Chong1.getGraphics();
		is_gameRun = true;
		is_up = is_down = is_left = is_right = is_fire = false;
		SystemNext(LOGO);
		new Thread(this).start();
	}
	/**
	 * 切换系统状态
	 * @param nextStead	下一个系统状态
	 */
	public void SystemNext(int nextStead){
		SystemStead = LOADING;
		loading = new Loading(this, nextStead);
	}
	/**
	 * 资源释放
	 * @param nowStead
	 */
	public void DataOut(int nowStead){
		switch(nowStead){
		case LOGO:
			img_logo = null;
			break;
		case TITLE:
			break;
		case MENU:
			break;
		case GAME:
			break;
		case END:
			break;
		case OVER:
			break;
		}
	}
	
	/**
	 *连续按键
	 */
	public void keyLian2(){
		
		if(is_up){
			switch(SystemStead){
			case GAME:
				
				break;
			}
		}
		if(is_down){
			switch(SystemStead){
			case GAME:
			
				break;
			}
		}
		if(is_left){
			switch(SystemStead){
			case GAME:
				
				break;
			}
		}
		if(is_right){
			switch(SystemStead){
			case GAME:
				
				break;
			}
		}
		if(is_fire){
			switch(SystemStead){
			case GAME:
				break;
			}
		}

	}
	
	private void upkey() {
		switch(SystemStead){
		case MENU:
			break;
		case GAME:
			break;
		case END:
			break;
		case OVER:
			break;
		}
	}
	private void downkey() {
		switch(SystemStead){
		case MENU:
			break;
		case GAME:
			break;
		case END:
			break;
		case OVER:
			break;
		}
	}
	private void leftkey() {
		switch(SystemStead){
		case MENU:
			break;
		case GAME:
			break;
		case END:
			break;
		case OVER:
			break;
		}
		
	}
	private void rightkey() {
		switch(SystemStead){
		case MENU:
			break;
		case GAME:
			break;
		case END:
			break;
		case OVER:
			break;
		}
		
	}
	private void firekey() {
		switch(SystemStead){
		case TITLE:
			break;
		case MENU:
			DataOut(SystemStead);
			SystemNext(GAME);
			System.gc();
			break;
		case GAME:
			break;
		case END:
			break;
		case OVER:
			break;
		}
	}
	/**
	 * 计算方法
	 * 
	 */
	public void upData() {
		if(loading != null && !loading.is_loading){
			loading = null;
		}
		
		switch(SystemStead){
		case LOGO:
			nowTime = System.currentTimeMillis();
			if( nowTime - oldTime >LogeTime){
				oldTime = nowTime;
				if(nowloge < name_logo.length-1){
					nowloge++;
					img_logo = Loading.getImage(name_logo[nowloge]);
				}else{
					DataOut(SystemStead);
					SystemNext(MENU);
					System.gc();
				}
			}
			break;
		case TITLE:
			break;
		case MENU:
			
			break;
		case GAME:
			nowMap.mapMov(hero.x, hero.y);
			hero.reficeMan(nowMap.mapX, nowMap.mapY);
			break;
		case END:
			break;
		case OVER:
			break;
		case LOADING:
			if (i_loading[0] > i_canvasH >> 1){
				i_loadSpeed = -5;
			}
			else if (i_loading[0] < (i_canvasH >> 1) - 20){
				i_loadSpeed = 5;
			}
			for (int i = i_loading.length - 1; i > 0; i--) {
				i_loading[i] = i_loading[i-1];
			}
			i_loading[0] += i_loadSpeed;
			break;
		}
	}

	/**
	 * 绘制方法
	 * 
	 */
	public void myPaint() {
		switch(SystemStead){
		case LOGO:
			g.setColor(-1);
			g.fillRect(0,0,i_canvasW,i_canvasH);
			g.setColor(0);
			g.drawImage(img_logo,i_canvasW>>1,i_canvasH>>1,3);
			break;
		case TITLE:
			break;
		case MENU:
			g.setColor(-1);
			g.fillRect(0,0,i_canvasW,i_canvasH);
			g.setColor(0);
			g.drawString("菜单", 50, 50, 20);
			break;
		case GAME:
			g.setColor(0);
			g.fillRect(0,0,i_canvasW,i_canvasH);
			nowMap.showMap(g);
			hero.showMan(g);
			break;
		case END:
			break;
		case OVER:
			break;
		case LOADING:
			g.setColor(-1);
			g.fillRect(0,0,i_canvasW,i_canvasH);
			g.setColor(0);
			for(int i = 0 ; i < loding.length ; i ++){
				g.drawString(loding[i], i*20+40, i_loading[i], 20);
			}
			break;
		}
	}

	public void run() {
		while (is_gameRun) {
			systemTime = System.currentTimeMillis();
			keyLian2();
			upData();
			myPaint();// 绘制缓冲区
			repaint();// 绘制到屏幕
			long tempTime = System.currentTimeMillis()- systemTime;
			try {
				if(tempTime >= 40){
					Thread.sleep(1);
				}else{
					Thread.sleep(40-tempTime);
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
	protected void keyPressed(int key) {

		switch (getGameAction(key)) {
		case UP:
			is_up = true;
			upkey();
			break;
		case DOWN:
			is_down = true;
			downkey();
			break;
		case LEFT:
			is_left = true;
			leftkey();
			break;
		case RIGHT:
			is_right = true;
			rightkey();
			break;
		case FIRE:
			is_fire = true;
			firekey();
			break;
		}

	}
	protected void keyReleased(int key) {
		switch (getGameAction(key)) {
		case UP:
			is_up = false;
			break;
		case DOWN:
			is_down = false;
			break;
		case LEFT:
			is_left = false;
			break;
		case RIGHT:
			is_right = false;
			break;
		case FIRE:
			is_fire = false;
			break;
		}
	}
	protected void paint(Graphics arg0) {
		arg0.drawImage(huan3Chong1, 0, 0, 20);
	}

}

⌨️ 快捷键说明

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