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

📄 canvas_menu.java

📁 05年游戏学院一个学生写的项目
💻 JAVA
字号:
import java.io.IOException;

import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.GameCanvas;
// Download by http://www.codefans.net
public class Canvas_Menu extends GameCanvas
{
	//背景图片
	private Image imgMenu;
	private MIDlet_Main mainMIDlet;
	private Graphics g;
	//绘画模式
	private byte drawMode;
	//选择框的Y
	private short selRectY;
	//选择框变化记数
	private byte rectChangeCount;
	//对话框的Y
	private short dialogBoxY;
	//对话框高度
	private short dialogBoxH;
	//是否显示对话框,是否关闭对话框,是否显示对话框中文字
	private boolean isShowDB,isCloseDB,isShowString;
	private Thread t;
	//线程是否退出
	static boolean isThreadCancel;
	
	public Canvas_Menu(MIDlet_Main mid)
	{
		super(false);
		setFullScreenMode(true);
		mainMIDlet=mid;
		g=getGraphics();
		try {
			imgMenu=Image.createImage("/imgMenu.png");
		} catch (IOException e) {
			e.printStackTrace();
		}
		init();
		t=new Thread()
		{
			public void run()
			{
				if(!isThreadCancel)
				{
					long start=System.currentTimeMillis();
					render();
					long end=System.currentTimeMillis();
					short time=(short)(end-start);
					try {
						if(time<100)
							Thread.sleep(100-time);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					mainMIDlet.dis.callSerially(this);
				}
			}
		};
		t.start();
	}

	//初始化菜单界面
	public void init()
	{
		drawMode=0;
		selRectY=67;
		dialogBoxY=100;
		dialogBoxH=0;
		isShowDB=false;
		isCloseDB=false;
		isShowString=false;
		g.drawImage(imgMenu,0,0,0);
		g.setFont(Font.getFont(0,0,16));
		g.setColor(0,0,255);
		g.drawRoundRect(93,67,77,27,15,15);
		g.setColor(0,255,255);
		g.drawRoundRect(94,68,75,25,15,15);
		System.gc();
	}
	
	//处理显示对话框
	public void showDialogBox()
	{
		if(isShowDB)
		{
			dialogBoxY-=10;
			dialogBoxH+=20;
			//当对话框Y变化到10,停止变化,显示文字
			if(dialogBoxY==10)
			{
				isShowDB=false;
				isShowString=true;
			}
		}
		
		if(isCloseDB)
		{
			dialogBoxY+=10;
			dialogBoxH-=20;
			//当对话框Y变化到100,停止变化,进入菜单选择模式
			if(dialogBoxY==100)
			{
				isCloseDB=false;
				drawMode=0;
			}
		}
		
		//画对话框
		g.setColor(0,0,255);
		g.drawRoundRect(11,dialogBoxY,150,dialogBoxH,20,20);
		g.setColor(0,255,255);
		g.drawRoundRect(12,dialogBoxY+1,148,dialogBoxH-2,20,20);
		g.setColor(50,125,255);
		g.fillRoundRect(13,dialogBoxY+2,146,dialogBoxH-4,20,20);
		
		if(isShowString)
		{
			g.setColor(130,245,255);
			switch(drawMode)
			{
				case 3:
				{
					g.drawString("帮  助",70,20,0);
					g.drawString("4键或左键:向左",20,40,0);
					g.drawString("6键或右键:向右",20,60,0);
					g.drawString("2键或上键:炮口正转",20,80,0);
					g.drawString("8键或下键:炮口反转",20,100,0);
					g.drawString("5键或选择键:开火",20,118,0);
					g.drawString("1键:切换观察模式",20,140,0);
					g.drawString("3键:切换道具模式",20,160,0);
					break;
				}
				case 4:
				{
					g.drawString("关  于",70,20,0);
					g.drawString("项目指导:马金明",25,40,0);
					g.drawString("开发人员:刘飞 ",25,60,0);
					g.drawString("梅横翔 ",85,80,0);
					g.drawString("卢组海",85,100,0);
					g.drawString("章毅",85,120,0);
					g.drawString("版权:martin工作室",25,140,0);
					g.drawString("     杭州润力科技",25,160,0);
					break;
				}
			}
		}
	}
	
	//处理选择框
	public void showSelRect()
	{
		if(rectChangeCount%2==0)
		{
			g.setColor(0,0,255);
			g.drawRoundRect(93,selRectY,77,27,15,15);
			g.setColor(0,255,255);
			g.drawRoundRect(94,selRectY+1,75,25,15,15);
		}
	}
	
	//处理渲染
	public void render()
	{
		rectChangeCount++;
		g.setColor(255,255,255);
		g.fillRect(0,0,Class_Camera.width,Class_Camera.height);
		g.drawImage(imgMenu,0,0,0);
		switch(drawMode)
		{
			//出现选择框
			case 0:showSelRect();break;
			//进入游戏界面
			case 1:
				Canvas_Main.isThreadCancel=false;
				mainMIDlet.dis.setCurrent(new Canvas_Main(mainMIDlet));
				isThreadCancel=true;
				System.gc();
				break;
			//出现对话框
			case 2:
				Canvas_StageSelect.isThreadCancel=false;
				Canvas_Main.isThreadCancel=true;
				mainMIDlet.dis.setCurrent(new Canvas_Main(mainMIDlet));
				mainMIDlet.dis.setCurrent(new Canvas_StageSelect(mainMIDlet));
				isThreadCancel=true;
				System.gc();
				break;
			case 3:
			case 4:showDialogBox();break;
			//退出
			case 5:mainMIDlet.exit();break;
		}
		flushGraphics();
	}
	
	protected void keyPressed(int keyCode)
	{
		switch(keyCode)
		{
			case -1:
			case 50:
			{
				//当对话框没变化时才能控制选择框的向上移动
				if(!isShowDB&&!isCloseDB)
				{
					if(selRectY==67)
						selRectY=171;
					else 
						selRectY-=26;
				}
				break;
			}
			case -2:
			case 56:
			{
				//当对话框没变化时才能控制选择框的向下移动
				if(!isShowDB&&!isCloseDB)
				{
					if(selRectY==171)
						selRectY=67;
					else 
						selRectY+=26;
				}
				break;
			}
			
			case -5:
			case -6:
			case 53:
			{
				//当对话框完全关闭才能再次打开对话框
				if(!isCloseDB&&dialogBoxY==100)
					isShowDB=true;
				//设置选择框响应模式
				switch(selRectY)
				{
					case 67:drawMode=1;break;
					case 93:drawMode=2;break;
					case 119:drawMode=3;break;
					case 145:drawMode=4;break;
					case 171:drawMode=5;break;
				}
				break;
			}
			
			default:
			{
				//当对话框完全打开才能再次关闭对话框
				if(!isShowDB&&dialogBoxY==10)
				{
					isCloseDB=true;
					isShowString=false;
				}
				break;
			}
		}
	}
}

⌨️ 快捷键说明

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