import java.io.DataInputStream;
import java.util.Vector;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.media.*;
//import com.nokia.mid.ui.DirectGraphics;
/**
* <p>
* Title: abstract GameUtil Class
* </p>
* <p>
* Description: 本游戏适用于MIDP1.0版本的手机
* </p>
* <p>
* Copyright: 本游戏由<<QN|刹那>>制作,不可用于商业.QQ173214905
* </p>
* <p>
* Company:
* </p>
*
* @author QN
* @version 2.0
*/
public class Util extends Canvas implements Runnable {
public Util(){
setFullScreenMode(true) ;
loadScreen(0,0);
}
// public abstract void draw(Graphics g);
// public abstract void ini(byte i);
public static final int SCREEN_W = 176,SCREEN_H = 208;
/** ******************************************************Nokia*SE K700 TODO:<按键定义> */
public static final byte KEY_UP = 1;
public static final byte KEY_DOWN = 2;
public static final byte KEY_LEFT = 3;
public static final byte KEY_RIGHT = 4;
public static final byte KEY_SOFT_RETURN = 7;
public static final byte KEY_SOFT_FIRE = 6;
public static final byte KEY_FIRE = 5;
// public static DirectGraphics dg;// 非NOKIA机型,此将被删除
public static final boolean isDebug = false;
public static final int TheradFps = 65 ;// 刷新率
/** 设定字体 */
public static Font font =Font.getFont(0,0,0);
public static final int FONT_W = font.charWidth('中') <= 0 ? font.stringWidth("qn") : font.charWidth('中'); // 中文字体宽
public static final int FONT_H = font.getHeight() <= 0 ? FONT_W + 2 : font.getHeight();
/** ***************************************************** */
public int poiVaule;
public int keyCode;
public boolean disableKey;
public boolean disablePlayerKey;
public int douKeyCode;// 双击按键值
public int pressedKeyCode;
public void key_clear(){
keyCode = 0;
douKeyCode = 0;
pressedKeyCode = 0;
}
/**
* 使用双线程加载资源
*/
public void setGameState(byte iniState,boolean isHide){
// new Loading(iniState, iniState,isHide);
if(gameState != gameState_old)gameState_old = iniState;
// wobble_reset();
}
public void setGameState(byte newState){
if(gameState != gameState_old)
gameState_old = gameState;
// ini(newState);
gameState = newState;
// wobble_reset();
}
public static byte gameState ;
public static byte gameState_old = gameState;
public static byte tempPauseGameState = gameState ;
public static final byte GAME_LOGO = 0;
public static final void println(String s){
}
public static final void Error(Exception e,String s){
}
/***************************************************************************
* TODO:本游戏
*
*
*
*/
// 主角
public Sprite player;
static StringBuffer errorString = new StringBuffer();
public void keyPre(int key0, int maxSize, int offset) {
switch (key0) {
case KEY_NUM2:
case KEY_UP:
poiVaule = select(poiVaule, maxSize, -offset);
break;
case KEY_NUM8:
case KEY_DOWN:
poiVaule = select(poiVaule, maxSize, offset);
break;
case KEY_NUM4:
case KEY_LEFT:
break;
case KEY_NUM6:
case KEY_RIGHT:
break;
}
}
public static int select(int poiVaule,int max,int offset) {
poiVaule+=offset ;
if (offset < 0) {
if (poiVaule < 0)
poiVaule = max ;
}else{
if (poiVaule > max)
poiVaule = 0 ;
}
return poiVaule;
}
//
public void paint(Graphics g) {
{
// wobble_draw(g);//进行画面控制(抖动)
// dg = com.nokia.mid.ui.DirectUtils.getDirectGraphics(g);
draw(g);
}
pressedKeyCode = 0;
}
public void run() {
while (true) {
try {
long startTime = System.currentTimeMillis();
repaint();
serviceRepaints();
Thread.yield();
// System.gc();
long endTime = System.currentTimeMillis();
if (endTime - startTime < TheradFps) {
Thread.sleep(TheradFps - (endTime - startTime ));
}
} catch (Exception e) {
Error(e,"");
Util.println("maniRun");
}
}
}
/** ************************************************************TODO:<绘制图片支持翻转,支持描点> */
public static void drawImage(Graphics g, Image image, int x, int y, int flipFlag, int anc) {
drawRegion(g,image,0,0,image.getWidth(),image.getHeight(),flipFlag,x,y,anc);
}
/** ******************************************************************TODO:<从大图绘制指定平分的区域ID> */
public void drawFrame(int ID, Image image, int x, int y,int flip, int anchor, Graphics g, int clipW,
int clipH) {
if (ID == - 1) {
return;
}
int imgCol = image.getWidth() / clipW;//
int clipX = (ID % imgCol ) * clipW;
int cilpY = (ID / imgCol ) * clipH;
drawRegion(g,image,clipX,cilpY,clipW,clipH,flip,x,y,anchor);
}
/** *******************************************************************TODO:<切图绘制> */
public static void drawRegion(Graphics g, Image image, int clipX, int clipY, int clipW,
int clipH, int flipFlag, int x, int y, int anchor) {
if (image == null) return;
int[] offsetXY = getAnchorOffset(anchor,clipW,clipH);
g.setClip(x + offsetXY[0],y + offsetXY[1],clipW,clipH);
g.drawImage(image,x - clipX + offsetXY[0],y - clipY + offsetXY[1],0);
g.setClip(0,0,SCREEN_W + 20,SCREEN_H + 20);
}
public static int[] getAnchorOffset(int anchor, int w, int h) {
int offX = 0;
int offY = 0;
switch (anchor) {
case Graphics.HCENTER | Graphics.TOP:
offX = w >> 1;
break;
case Graphics.RIGHT | Graphics.TOP:
offX = w;
break;
case Graphics.LEFT | Graphics.VCENTER:
offY = h >> 1;
break;
case Graphics.HCENTER | Graphics.VCENTER:
offX = w >> 1;
offY = h >> 1;
break;
}
return new int[] { - offX, - offY };
}// :~QN
/** *******************************************************************TODO:<切图绘制Nokia> */
/** ******************************************************************TODO:<绘制通用文本> */
/** ******************************************************************TODO:<绘制描边文字> */
/** ******************************************************************TODO:<中英文自然分行分页> */
/** ******************************************************************TODO:<绘制左右下角标记> */
/** ******************************************************************TODO:<产生随机数> */
/** ******************************************************************TODO:<自定义按键> */
/** ******************************************************************TODO:<保存用户按键设置> */
/** ******************************************************************TODO:<加载用户按键设置> */
/** ******************************************************************TODO:<保存数据类> */
/** ******************************************************************TODO:<按键双击> */
// 绘制指定区域,双缓冲提升速度.
Image MAP_BUFIMG ;
Graphics MAP_BUFG ;
public void map_drawBg(Graphics g,int colBen, int rowBen, int colEnd, int rowEnd) {
int count = 0;
int j, i;
MAP_BUFG.setColor(0);
MAP_BUFG.fillRect(0,0,SCREEN_W,SCREEN_H);
for (i = rowBen; i <= rowEnd && i < map_data.length; i ++) {
for (j = colBen; j <= colEnd && j < map_data[0].length; j ++) {
int idShort = map_data[i][j];
int x = (j % ((SCREEN_W / map_tileW ) + 1) ) << 3;
int y = (i % ((SCREEN_H / map_tileH ) + 1) ) << 3;
int id = (byte)(idShort & 0xff );
int flipFlag = (byte)((idShort >> 12 ) & 0xff );
int clipX = (id % map_imgCol ) << 3;
int clipY = (id / map_imgCol ) << 3;
drawRegion(MAP_BUFG,res_getImage(RES_TILE),clipX,clipY,map_tileW,map_tileH,0,x,y,0);
}
}
g.drawImage(MAP_BUFIMG,0,0,Graphics.LEFT | Graphics.TOP);
}
// map
public short[][] map_data;
// public byte[][] map_physicsData;
int map_tileW,
map_tileH,
map_imgCo
Tank_J2ME.rar_j2me
版权申诉
134 浏览量
2022-09-23
07:50:08
上传
评论
收藏 31KB RAR 举报
邓凌佳
- 粉丝: 65
- 资源: 1万+
最新资源
- 细胞的奇迹:吃出来的免疫力(美亚畅销书!作者的TED演讲播放量超300万次!《谷物大脑》作者、《三联生活周刊》推荐!吃下对的食物,改善你的... (Z-Library).azw3
- 智能手机产品拆解,使用mindmaster打开
- 11111111111111
- 统信系统ARM64依赖openssl-1.0.2版本的libssl.so.10和libcrypto.so.10文件
- 奥比中光python sdk
- 冯超楠17.py
- OCR识别-基于视觉注意力机制Attention实现的OCR识别算法-附项目源码-优质项目实战.zip
- Java 使用蒙特卡洛方法估算PI的近似值(源代码)
- main.cpp
- 电子木鱼小程序源码电子木鱼小程序源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈