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

📄 simpletiledlayercanvas.java

📁 一个JAVA手机游戏分块图层的演示程序
💻 JAVA
字号:
package SimpleTiledLayer;

import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
public class SimpleTiledLayerCanvas extends GameCanvas implements Runnable {
	private boolean isPlay;		// 值为true时游戏线程反复执行            
	private long delay;			// 线程执行时的延时,控制游戏每帧的时间  
	private int width, height;		// 保存屏幕的宽度和高度
	private int currentX = -128, currentY = 32;	// 当前绘图位置
	private int counter = 0;
	private int aniIndex1, aniIndex2;
	private TiledLayer background;			// 定义背景为分块图层
	private Image backImage;				// 生成背景所用图像
	// 构造方法
	public SimpleTiledLayerCanvas() {
		super(true);
		width = getWidth();
		height = getHeight();
		delay = 20;
		background = createBackground();
	}
	// 启动线程体
	public void start() {
		isPlay = true;
		Thread t = new Thread(this);
		t.start();
	}
	// 停止线程执行
	public void stop() { isPlay = false; }
	// 线程体,游戏主体
	public void run() {
		Graphics g = getGraphics();		// 获取脱机屏幕缓冲区中图形对象
		long beginTime = 0, endTime = 0;
		while (isPlay == true) {
			beginTime = System.currentTimeMillis();	// 游戏每一帧开始时间
			queryKey();				// 查询按键状态
			drawScreen(g);			// 绘制屏幕     
			endTime = System.currentTimeMillis();	// 游戏每一帧结束时间
			if (endTime - beginTime < delay) {	// 判断运行时间是否超过规定时间
				try {
					Thread.sleep(delay - (endTime - beginTime));
				} catch (InterruptedException ie) {	}
			}
		}
	}
	// 主动查询按键状态,进行处理
	private void queryKey() {
		int keyStates = getKeyStates();		// 查询游戏按键状态
		// 游戏按键被按下时,TiledLayer的绘图位置相应的进行改变
		// 如果未超过TiledLayer左侧范围,图层X坐标向右移动
		if ((keyStates & LEFT_PRESSED) != 0)
				currentX = Math.min(0, currentX + 2);
		// 如果未超过TiledLayer右侧范围,图层X坐标向左移动
		if ((keyStates & RIGHT_PRESSED) !=0 )
				currentX = Math.max(currentX - 2, width - background.getWidth());
		// 如果未超过TiledLayer上侧范围,图层Y坐标向下移动
		if ((keyStates & UP_PRESSED) != 0)
				currentY = Math.min(32, currentY + 2);
		// 如果未超过TiledLayer下侧范围,图层Y坐标向上移动
		if ((keyStates & DOWN_PRESSED) !=0)
				currentY = Math.max(currentY - 2, height - background.getHeight());
	}
	// 在屏幕上显示游戏画面
	private void drawScreen(Graphics g) {
		g.setColor(0x99ccff);
		g.fillRect(0, 0, getWidth(), getHeight());
		background.setPosition(currentX, currentY);
		background.paint(g);
		flushGraphics();
	}
	// 建立分块图层
	private TiledLayer createBackground() {
		try {
			 backImage = Image.createImage("/SimpleTiledLayer/bgtiles.png");
		} catch (Exception e) {}
		TiledLayer tiledLayer = new TiledLayer(16,10,backImage,32,32);
		// 建立动态分块
		aniIndex1 = tiledLayer.createAnimatedTile(6);
		aniIndex2 = tiledLayer.createAnimatedTile(2);
		// 数组中存放单元格中需要填充的分块号
		int[] map = {
			 7, 0, 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, 0, 0, 7, 0,  
			 0, 0, 0, 7, 0, 0, 8, 0, 7, 0, 0, 7, 0, 7, 0, 0, 	
			 0, 7, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 	
			 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 	
			 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 0,-1, 0, 	
			 0, 0, 0,-1, 0, 0, 0,-1,-1,-1, 0, 1, 2, 2, 2, 3, 	
			 0, 0, 1, 2, 3,-1, 1, 2, 2, 2, 3, 1, 2, 2, 2, 3, 	
			 0,-1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,  	
			 1, 2, 2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,  	
			 1,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,  	
		};
		// 将分块填充进相应的单元格
		for (int i=0; i < map.length; i++) {
			int column = i % 16;
			int row = (i - column) / 16;
			tiledLayer.setCell(column,row,map[i]);
		}
		return tiledLayer;
	}
	// 实现分块图层上的动画效果
	public void act() {
		// 直接改变单元格中的分块
		background.setCell(6, 1, counter%2+7);
		// 改变动态分块中存放的静态分块号
		if (counter%2 == 0) {
			background.setAnimatedTile(aniIndex1, 5);
			background.setAnimatedTile(aniIndex2, 4);
		}
		else {
			background.setAnimatedTile(aniIndex1, 6);
			background.setAnimatedTile(aniIndex2, 2);
		}
		counter ++;
	}
}

⌨️ 快捷键说明

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