📄 metalmaxcanvas.java
字号:
for (int k = 0; k < mEvent.length; k++) {
if (mTank.collidesWith(mEvent[k], false)
|| mHero.collidesWith(mEvent[k], false)) {
if (mEvent[k].getEvent() != 0 && mEvent[k].getEvent() < 100) {
eventID = mEvent[k].getEvent();
HeroSprite.mapChanged = true;
break;
}
if (mEvent[k].getEvent() == 110){
mEvent[k].setFrame(1);
isOpen = k;
break;
}
}
}
/*如果坦克精灵跟前景层碰撞,则后退*/
if (mTank.collidesWith(mBoxLayer, false)) {
mTank.moveUp(false);
mHero.moveUp(false);
}
}
/*如果英雄精灵跟前景层碰撞,则后退*/
if (mHero.collidesWith(mBoxLayer, false)) {
mHero.moveUp(false);
}
/*遍历NPC,检测是否触发对话*/
for (int j = 0; j < mNpc.length; j++) {
/*如果跟NPC碰撞,则触发对话*/
if (mTank.collidesWith(mNpc[j], false)
|| mHero.collidesWith(mNpc[j], false)) {
isTalk = true;
/*调整NPC朝向,使之和英雄面对面*/
mNpc[j].setFrame(0);
/*要对话的NPC编号*/
npcNum = j;
/*不可穿越NPC,后退*/
if (isDrive) {
mTank.moveUp(false);
mHero.moveUp(false);
} else {
mHero.moveUp(false);
}
}
}
/*屏幕刷新,调整可视窗口*/
setGameViewWinodow();
mLm.paint(g, 0, 0);
flushGraphics();
}
}
/*如果按下键*/
if ((key & DOWN_PRESSED) != 0) {
MetalMaxCanvas.way = DOWN_PRESSED;
isbattle = Math.abs(battleRandom.nextInt()) % 50;
if(isOpen != -1){
mEvent[isOpen].setFrame(0);
}
if (isbattle <= 1 && mapID == WORLD_MAP) {
backNum = mapMan.getBackg(mHero.pX / 16, mHero.pY / 16);
if (isbattle == 0) {
mMonster = new MonsterSprite(音速车);
}
if (isbattle == 1) {
mMonster = new MonsterSprite(沙漠车);
}
gameState = GAME_FIGHT;
SoundEffects.getInstance().startBattleSound();
} else
for (int i = 0; i < 8; i++) {
mHero.moveDown(true);
for (int k = 0; k < mEvent.length; k++) {
if (mTank.collidesWith(mEvent[k], false)
|| mHero.collidesWith(mEvent[k], false)) {
if (mEvent[k].getEvent() != 0 && mEvent[k].getEvent() < 100) {
eventID = mEvent[k].getEvent();
HeroSprite.mapChanged = true;
break;
}
if (mEvent[k].getEvent() == 110){
mEvent[k].setFrame(1);
isOpen = k;
break;
}
}
}
if (isDrive) {
mTank.moveDown(true);
/*遍历游戏事件,检测是否触发事件*/
for (int k = 0; k < mEvent.length; k++) {
if (mTank.collidesWith(mEvent[k], false)
|| mHero.collidesWith(mEvent[k], false)) {
if (mEvent[k].getEvent() != 0 && mEvent[k].getEvent() < 100) {
eventID = mEvent[k].getEvent();
HeroSprite.mapChanged = true;
break;
}
if (mEvent[k].getEvent() == 110){
mEvent[k].setFrame(1);
isOpen = k;
break;
}
}
}
if (mTank.collidesWith(mBoxLayer, false)) {
mTank.moveDown(false);
mHero.moveDown(false);
}
}
if (mHero.collidesWith(mBoxLayer, false)) {
mHero.moveDown(false);
}
for (int j = 0; j < mNpc.length; j++) {
if (mTank.collidesWith(mNpc[j], false)
|| mHero.collidesWith(mNpc[j], false)) {
isTalk = true;
mNpc[j].setFrame(1);
npcNum = j;
if (isDrive) {
mTank.moveDown(false);
mHero.moveDown(false);
} else {
mHero.moveDown(false);
}
break;
}
}
setGameViewWinodow();
mLm.paint(g, 0, 0);
flushGraphics();
}
}
/*如果按左键*/
if ((key & LEFT_PRESSED) != 0) {
MetalMaxCanvas.way = LEFT_PRESSED;
isbattle = Math.abs(battleRandom.nextInt()) % 50;
if(isOpen != -1){
mEvent[isOpen].setFrame(0);
}
if (isbattle <= 1 && mapID == WORLD_MAP) {
backNum = mapMan.getBackg(mHero.pX / 16, mHero.pY / 16);
if (isbattle == 0) {
mMonster = new MonsterSprite(音速车);
}
if (isbattle == 1) {
mMonster = new MonsterSprite(沙漠车);
}
gameState = GAME_FIGHT;
SoundEffects.getInstance().startBattleSound();
} else
for (int i = 0; i < 8; i++) {
mHero.moveLeft(true);
for (int k = 0; k < mEvent.length; k++) {
if (mTank.collidesWith(mEvent[k], false)
|| mHero.collidesWith(mEvent[k], false)) {
if (mEvent[k].getEvent() != 0 && mEvent[k].getEvent() < 100) {
eventID = mEvent[k].getEvent();
HeroSprite.mapChanged = true;
break;
}
}
}
if (isDrive) {
mTank.moveLeft(true);
/*遍历游戏事件,检测是否触发事件*/
for (int k = 0; k < mEvent.length; k++) {
if (mTank.collidesWith(mEvent[k], false)
|| mHero.collidesWith(mEvent[k], false)) {
if (mEvent[k].getEvent() != 0 && mEvent[k].getEvent() < 100) {
eventID = mEvent[k].getEvent();
HeroSprite.mapChanged = true;
break;
}
}
}
if (mTank.collidesWith(mBoxLayer, false)) {
mTank.moveLeft(false);
mHero.moveLeft(false);
}
}
if (mHero.collidesWith(mBoxLayer, false)) {
mHero.moveLeft(false);
}
for (int j = 0; j < mNpc.length; j++) {
if (mTank.collidesWith(mNpc[j], false)
|| mHero.collidesWith(mNpc[j], false)) {
isTalk = true;
mNpc[j].setFrame(2);
npcNum = j;
if (isDrive) {
mTank.moveLeft(false);
mHero.moveLeft(false);
} else {
mHero.moveLeft(false);
}
break;
}
}
setGameViewWinodow();
mLm.paint(g, 0, 0);
flushGraphics();
}
}
/*如果按右键*/
if ((key & RIGHT_PRESSED) != 0) {
MetalMaxCanvas.way = RIGHT_PRESSED;
isbattle = Math.abs(battleRandom.nextInt()) % 50;
if(isOpen != -1){
mEvent[isOpen].setFrame(0);
}
if (isbattle <= 1 && mapID == WORLD_MAP) {
backNum = mapMan.getBackg(mHero.pX / 16, mHero.pY / 16);
if (isbattle == 0) {
mMonster = new MonsterSprite(音速车);
}
if (isbattle == 1) {
mMonster = new MonsterSprite(沙漠车);
}
gameState = GAME_FIGHT;
SoundEffects.getInstance().startBattleSound();
} else
for (int i = 0; i < 8; i++) {
mHero.moveRight(true);
for (int k = 0; k < mEvent.length; k++) {
if (mTank.collidesWith(mEvent[k], false)
|| mHero.collidesWith(mEvent[k], false)) {
if (mEvent[k].getEvent() != 0 && mEvent[k].getEvent() < 100) {
eventID = mEvent[k].getEvent();
HeroSprite.mapChanged = true;
break;
}
}
}
if (isDrive) {
mTank.moveRight(true);
/*遍历游戏事件,检测是否触发事件*/
for (int k = 0; k < mEvent.length; k++) {
if (mTank.collidesWith(mEvent[k], false)
|| mHero.collidesWith(mEvent[k], false)) {
if (mEvent[k].getEvent() != 0 && mEvent[k].getEvent() < 100) {
eventID = mEvent[k].getEvent();
HeroSprite.mapChanged = true;
break;
}
}
}
if (mTank.collidesWith(mBoxLayer, false)) {
mTank.moveRight(false);
mHero.moveRight(false);
}
}
if (mHero.collidesWith(mBoxLayer, false)) {
mHero.moveRight(false);
}
for (int j = 0; j < mNpc.length; j++) {
if (mTank.collidesWith(mNpc[j], false)
|| mHero.collidesWith(mNpc[j], false)) {
isTalk = true;
mNpc[j].setFrame(3);
npcNum = j;
if (isDrive) {
mTank.moveRight(false);
mHero.moveRight(false);
} else {
mHero.moveRight(false);
}
break;
}
}
setGameViewWinodow();
mLm.paint(g, 0, 0);
flushGraphics();;
}
}
/*如果按下确定键,呼出菜单*/
if ((key & FIRE_PRESSED) != 0) {
gameState = GAME_MENU;
}
/*如果按下1键,取消动作,恢复正常状态*/
if ((key & GAME_A_PRESSED) != 0) {
if (gameState == GAME_MENU) {
gameState = GAME_NORMAL;
}
}
setGameViewWinodow();
}
/**调整游戏可视窗口*/
public void setGameViewWinodow() {
int x, y, herox, heroy;
herox = mHero.getX();
heroy = mHero.getY();
x = herox - getWidth() / 2;
y = heroy - getHeight() / 2;
if (x < 0){
x = 0;
}
else if (x > mBackLayer.getWidth() - getWidth())
x = mBackLayer.getWidth() - getWidth();
if (y < 0){
y = 0;
}
else if (y > mBackLayer.getHeight() - getHeight())
y = mBackLayer.getHeight() - getHeight();
mLm.setViewWindow(x, y, getWidth(), getHeight());
}
/**游戏线程的运行函数,游戏状态机的转换*/
public void run() {
/*如果游戏不是自动运行,则转到正常模式*/
if (gameState != GAME_AUTORUN) {
gameState = GAME_NORMAL;
}
fightState = FIGHT_STANDBY;
menuState = MENU_NORMAL;
Graphics g = getGraphics();
g.setFont(Font.getFont(Font.STYLE_BOLD));
/*如果游戏没有结束,则循环执行*/
if (!isGameOver) {
Thread currentThread = Thread.currentThread();
try {
while (currentThread == animationThread & !isGameOver) {
/*开始绘制的时间*/
start = System.currentTimeMillis();
switch (gameState) { /*游戏状态机的转换*/
case (GAME_AUTORUN): /*自动状态*/
autoRun(g);
break;
case (GAME_NORMAL): /*正常状态*/
try {
/*检测键盘输入*/
handleKey();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
/*地图刷新*/
mLm.paint(g, 0, 0);
flushGraphics();
break;
case (GAME_FIGHT): /*战斗状态*/
repaint();
Fight(g);
break;
case (GAME_MENU): /*菜单状态*/
repaint();
Menu(g);
break;
case(GAME_SHOP): /*商店状态*/
repaint();
/*根据不同的地图和事件来设置不同的商店*/
Shop(g, mapID ,eventID);
break;
}
/*检测是否要进行地图切换*/
doMapChange();
/*绘制结束的时间*/
long timeTaken = System.currentTimeMillis() - start;
/* FPS控制:
使用SPF(每帧所用时间)控制绘制速度,规定一个SPF值:MILLS_PER_TICK
当上一绘制时间未超过设定SPF,则线程休眠SPF-上帧时间,
否则立刻进行下一次绘制*/
if (timeTaken < MILLIS_PER_TICK) {
synchronized (this) {
wait(MILLIS_PER_TICK - timeTaken);
}
} else {
Thread.yield();
}
}
} catch (InterruptedException e) {
}
}
/*如果游戏结束则停止游戏循环,跳回到midlet*/
if (isGameOver) {
stop();
midlet.GameCanvasGameOver(time, 0);
}
}
/**根据地图编号进行游戏初始化*/
public void init(int mapID) {
Graphics g = getGraphics();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -