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

📄 drawmanage.java

📁 经典FC游戏《超惑星战记》的J2ME版本!!功能基本上都实现了
💻 JAVA
字号:
/**
 * <p>Title: Transpanzer</p>
 * <p>Description:
 * You cannot remove this copyright and notice.
 * You cannot use this file any part without the express permission of the author.
 * All Rights Reserved</p>
 * @author Jjyo
 * @email jjyo@163.com
 * @version 1.0.0
 */

import javax.microedition.lcdui.Graphics;

public class DrawManage {

	private int width;
	private int height;
	private int currentWidth;	//屏幕的宽度
	private int currentHeight;	//屏幕的高度
	private int nX;
	private int nY;
	private int beginX;
	private int beginY;
	private int tempX;
	private int tempY;
	private int arrayNum;
	
	
	public DrawManage(int width,int height){
		System.out.println("DrawManage Successful...");
		this.width=width;
		this.height=height;
	}
	/**
	 * 根据 Stirng 索引创建图片字符
	 * @param g
	 * @param im	图片
	 * @param str  String 字符窜
	 * @param x	 初始化X坐标
	 * @param y  初始化Y坐标
	 */
	public void drawString(Graphics g,ImageManage im,String str,int x,int y){
		for(int i=0;i<str.length();i++){
			int index=(int)str.charAt(i);
			g.setClip(x+i*im.frameSize, y, im.frameSize, im.frameSize);
			g.drawImage(im.image, x-index*im.frameSize+i*im.frameSize, y, g.LEFT|g.TOP);
			g.setClip(0, 0, width, height);
		}
	}
	
	/**
	 * 
	 * @param g
	 * @param maps
	 */
	public void drawMaps(Graphics g, Maps maps) {
		currentHeight = 0;
		currentWidth = 0;
		nX = 0;
		nY = 0;
		beginX = 0;			//地图比屏幕大,需要重新绘制的开始点
		beginY = 0;
		arrayNum = 0;
		if (Maps.x < 0) {	//循环绘制屏幕,如果到达地图的头部,折回重画
			Maps.x += Maps.w * Maps.tileSize;
		}
		if (Maps.y < 0) {	//循环绘制屏幕,如果到达地图的头部,折回重画
			Maps.y += Maps.h * Maps.tileSize;
		}
		nX = (Maps.x) % Maps.tileSize;	//当前地图在当前屏幕中地图块的索引位置
		nY = (Maps.y) % Maps.tileSize;
		while (true) {
			while (true) {
				tempY = ((beginX + Maps.x) / Maps.tileSize) % Maps.w;	//重新计算机地图块的位置,
				tempX = ((beginY + Maps.y) / Maps.tileSize) % Maps.h;
				if (tempY < 0 || tempX < 0) {
					beginY += Maps.tileSize;	//超出屏幕,重新计算机偏移
					continue;
				}
				arrayNum = (char) (Maps.mapArray[tempX][tempY] & (0x00FF));	//计算当前地图矩阵的图片编号,高8位为地图的属性,地8位为地图的索引号
				if (arrayNum != 0xFF) {		//0xFF表示此处地图不画
					currentWidth = beginX - nX - (arrayNum * Maps.tileSize);//计算当前剪切位置
					currentHeight = beginY - nY ;	
					g.setClip(beginX - nX, currentHeight , Maps.tileSize,	//设置图片的剪切位置和大小
							Maps.tileSize);
					g.drawImage(maps.imageManage.image, currentWidth, currentHeight
							, Graphics.LEFT | Graphics.TOP);
					// g.setClip(0, 0, width, height);	//恢复原来的剪切位置
				}
				if (beginY < height) {		//如果小于屏幕高度,继续画
					beginY += Maps.tileSize;
				} else {
					break;		//到达屏幕的高度,画下一列
				}
			}
			if (beginX < width) {		//如果小于屏幕宽度,继续
				beginX += Maps.tileSize;
				beginY = 0;
			} else {
				break;		//绘制完成
			}
		}
	}
	
	/**
	 * 画传 坐标 精灵
	 * @param g
	 * @param im
	 * @param sprite
	 * @param x
	 * @param y
	 */
	public void drawSprite(Graphics g,ImageManage im,FSprite sprite,int x,int y){
		g.setClip(x, y, im.frameSize, im.frameSize);
		g.drawImage(im.image, x-sprite.frameCnt*im.frameSize, y, g.LEFT | g.TOP);
		// g.setClip(0, 0, width, height);
	}
	
	/** 画精灵
	 * @param g		画笔
	 * @param im	图片
	 * @param sprites 动作
	 */
	public void drawSprite(Graphics g, ImageManage im, FSprite sprite) {
		if (!sprite.isHidden) {
			g.setClip(sprite.x, sprite.y, im.frameSize, im.frameSize);
			g.drawImage(im.image, sprite.x - sprite.frameCnt
					* im.frameSize, sprite.y, g.LEFT | g.TOP);
			// g.setClip(0, 0, width, height);
		}
	}
	
	/**
	 * @param g		画笔
	 * @param im	图片
	 * @param sprites 数组动作
	 */
	public void drawSprite(Graphics g, ImageManage im, FSprite[] sprites) {
		if (sprites == null)
			return;
		for (int i = sprites.length - 1; i >= 0; --i) {
			if (sprites[i].isHidden) {
				continue;
			}
			if (sprites[i].x < -im.frameSize || sprites[i].x > width
					|| sprites[i].y < -im.frameSize
					|| sprites[i].y > height + im.frameSize) {
				continue;
			}
			g.setClip(sprites[i].x, sprites[i].y, im.frameSize, im.frameSize);
			g.drawImage(im.image, sprites[i].x - sprites[i].frameCnt * im.frameSize, sprites[i].y, g.LEFT | g.TOP);
			// g.setClip(0, 0, width, height);
		}
	}
	
	/**
	 * 画坦克
	 * @param g
	 * @param imTank	坦克身体图片
	 * @param imWheel	坦克轮子图片
	 * @param sprite	坦克动作
	 * @param wheelY	坦克轮子高度
	 */
	public void drawSprite(Graphics g, ImageManage imTank,ImageManage imWheel, StaticTankSprite sprite,int wheelY) {
		if (!sprite.isHidden) {
			g.setClip(sprite.x, sprite.y+wheelY, imTank.frameSize, imTank.frameSize);
			g.drawImage(imTank.image, sprite.x- sprite.frameCnt
					* imTank.frameSize, sprite.y+wheelY , g.LEFT | g.TOP);
			g.setClip(sprite.x+sprite.wheelRise+3, sprite.y+24, imWheel.frameSize, imWheel.frameSize);
			g.drawImage(imWheel.image, sprite.x+sprite.wheelRise+3-sprite.leftFrameCnt*imWheel.frameSize, sprite.y+24, g.LEFT | g.TOP);
			g.setClip(sprite.x-sprite.wheelRise+21, sprite.y+24, imWheel.frameSize, imWheel.frameSize);
			g.drawImage(imWheel.image, sprite.x-sprite.wheelRise+21-sprite.rightFrameCnt*imWheel.frameSize, sprite.y+24, g.LEFT | g.TOP);
		}
	}

	/**
	 * @param g		画笔
	 * @param im	图片
	 * @param x		x坐标
	 * @param y		y坐标
	 * @param frameCnt	剪接帧
	 */
	public void  drawImage(Graphics g,ImageManage im,int x,int y){
		g.setClip(x, y, im.width, im.height);
		g.drawImage(im.image, x, y, g.TOP|g.LEFT);
		g.setClip(0, 0, width, height);
	}
	
	public void drawImage(Graphics g,ImageManage im,int x,int y,int frameCnt,int frameHeight){
		g.setClip(x, y, im.width, frameHeight);
		g.drawImage(im.image, x, y-frameCnt*frameHeight, g.TOP|g.LEFT);
	}
}

⌨️ 快捷键说明

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