📄 drawmanage.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 + -