📄 gameworld.java
字号:
{
e.printStackTrace();
}
keyMenu = false;
}
}
if (keyCode == K_BACK)// 右软件返回
{
gameMenu = false;
if (sound)
{
try
{
soundSFX[0].stop();
soundSFX[0].start();
} catch (MediaException e)
{
e.printStackTrace();
}
keyMenu = false;
}
}
return;
}
/** ***************************主游戏************************************* */
/** 开始序幕 */
if (isStartCaption)
{
// 释放菜单资源
icoImage = null;
mainMenu = null;
System.gc();
return;
}
/** 下一关加载 */
if (this.isLoading)
{
return;
}
/** 游戏结束 */
if (player.playerState == Player.DEAD)
{
return;
}
/** FIRE 键响应开火 */
if (getGameAction(keyCode) == Canvas.FIRE || keyCode == Canvas.KEY_NUM5)
{
if (Player.bulletCount > 0)
{
player.bulletFire();
player.action();
}
return;
}
/** 检测是否按下 * 键 */
if (keyCode == Canvas.KEY_STAR)
{// 使用空袭
if (!player.isAirAttack)
{
player.questAirAttack();
}
return;
}
/** 检测上方向 */
if (getGameAction(keyCode) == Canvas.UP || keyCode == Canvas.KEY_NUM2)
{
keyReset();
player.move(0, -1);
upPress = true;
way = 2;
return;
}
/** 检测下方向 */
if (getGameAction(keyCode) == Canvas.DOWN || keyCode == Canvas.KEY_NUM8)
{
keyReset();
player.move(0, 1);
downPress = true;
way = 8;
return;
}
/** 检测左方向 */
if (getGameAction(keyCode) == Canvas.LEFT || keyCode == Canvas.KEY_NUM4)
{
keyReset();
player.move(-1, 0);
leftPress = true;
way = 4;
return;
}
/** 检测右方向 */
if (getGameAction(keyCode) == Canvas.RIGHT
|| keyCode == Canvas.KEY_NUM6)
{
keyReset();
player.move(1, 0);
rightPress = true;
way = 6;
return;
}
/** 检测上方向和左方向按键 */
if ((getGameAction(keyCode) == Canvas.UP && leftPress)
|| (getGameAction(keyCode) == Canvas.LEFT && upPress))
{
keyReset();
player.move(-1, -1);
upLeftPress = true;
way = 1;
upPress = true;
leftPress = true;
return;
}
/** 检测左上方向 */
if (keyCode == Canvas.KEY_NUM1)
{
player.move(-2, -2);
upLeftPress = true;
way = 1; // 左上
return;
}
/** 检测上方向和右方向 */
if ((getGameAction(keyCode) == Canvas.UP && rightPress)
|| (getGameAction(keyCode) == Canvas.RIGHT && upPress))
{
keyReset();
player.move(1, -1);
upRightPress = true;
way = 3; // 右上
upPress = true;
rightPress = true;
return;
}
/** 检测右上方向 */
if (keyCode == Canvas.KEY_NUM3)
{
player.move(2, -2);
upRightPress = true;
way = 3; // 右上
return;
}
/** 检测下方向和左方向 */
if ((getGameAction(keyCode) == Canvas.DOWN && leftPress)
|| (getGameAction(keyCode) == Canvas.LEFT && downPress))
{
keyReset();
player.move(-1, 1);
downLeftPress = true;
way = 7; // 左下
downPress = true;
leftPress = true;
return;
}
/** 检测左下方向 */
if (keyCode == Canvas.KEY_NUM7)
{
player.move(-2, 2);
downLeftPress = true;
way = 7; // 左下
return;
}
/** 检测下方向和右方向 */
if ((getGameAction(keyCode) == Canvas.DOWN && rightPress)
|| (getGameAction(keyCode) == Canvas.RIGHT && downPress))
{
keyReset();
player.move(1, 1);
downRightPress = true;
way = 9; // 右下
downPress = true;
rightPress = true;
return;
}
/** 检测右下方向 */
if (keyCode == Canvas.KEY_NUM9)
{
player.move(2, 2);
downRightPress = true;
way = 9; // 右下
return;
}
/** 左软键控制暂停 */
if (keyCode == K_OK)
{
gameMenu = true;
return;
}
/** 右软键消除暂停 */
if (keyCode == K_BACK)
{
gameMenu = false;
return;
}
}
// 按键释放事件
public void keyReleased(int keyCode)
{
// 上和左已经被同时按下,并且此次放开的按键是其中之一
if (upPress
&& leftPress
&& (getGameAction(keyCode) == Canvas.UP || getGameAction(keyCode) == Canvas.LEFT))
{
upLeftPress = false;
if (getGameAction(keyCode) == Canvas.UP)
{// 上键被释放
upPress = false; // 向左运动
}
if (getGameAction(keyCode) == Canvas.LEFT)
{// 左键被释放
leftPress = false; // 向上运动
}
inertia = 0;
return;
}
if (upPress
&& rightPress
&& (getGameAction(keyCode) == Canvas.UP || getGameAction(keyCode) == Canvas.RIGHT))
{ // 上和左已经被同时按下了
upRightPress = false;
if (getGameAction(keyCode) == Canvas.UP)
{ // 上键被释放
upPress = false;
}
if (getGameAction(keyCode) == Canvas.RIGHT)
{
rightPress = false;
}
inertia = 0;
return;
}
if (downPress
&& leftPress
&& (getGameAction(keyCode) == Canvas.DOWN || getGameAction(keyCode) == Canvas.LEFT))
{ // 下和左已经被同时按下了
downLeftPress = false;
if (getGameAction(keyCode) == Canvas.DOWN)
{ // 上键被释放
downPress = false;
}
if (getGameAction(keyCode) == Canvas.LEFT)
{
leftPress = false;
}
inertia = 0;
return;
}
if (downPress
&& rightPress
&& (getGameAction(keyCode) == Canvas.DOWN || getGameAction(keyCode) == Canvas.RIGHT))
{ // 上和左已经被同时按下了
downRightPress = false;
if (getGameAction(keyCode) == Canvas.DOWN)
{ // 上键被释放
downPress = false;
}
if (getGameAction(keyCode) == Canvas.RIGHT)
{
rightPress = false;
}
inertia = 0;
return;
}
if (getGameAction(keyCode) == Canvas.UP || keyCode == Canvas.KEY_NUM2
&& upPress)
{
upPress = false;
inertia = 200;
return;
}
if (getGameAction(keyCode) == Canvas.DOWN || keyCode == Canvas.KEY_NUM8
&& downPress)
{
downPress = false;
inertia = 200;
return;
}
if (getGameAction(keyCode) == Canvas.LEFT || keyCode == Canvas.KEY_NUM4
&& leftPress)
{
leftPress = false;
inertia = 200;
return;
}
if (getGameAction(keyCode) == Canvas.RIGHT
|| keyCode == Canvas.KEY_NUM6 && rightPress)
{
rightPress = false;
inertia = 200;
return;
}
// 左上
if (keyCode == Canvas.KEY_NUM1 && upLeftPress)
{
upLeftPress = false;
return;
}
// 右上
if (keyCode == Canvas.KEY_NUM3 && upRightPress)
{
upRightPress = false;
return;
}
// 左下
if (keyCode == Canvas.KEY_NUM7 && downLeftPress)
{
downLeftPress = false;
return;
}
// 右下
if (keyCode == Canvas.KEY_NUM9 && downRightPress)
{
downRightPress = false;
return;
}
}
// 批量读取精灵图片
public Image loadImage(String imagePath)
{
Image image = null;
try
{
image = Image.createImage(imagePath);
return image;
} catch (Exception ex)
{
System.out.println("Gameworld loadImage");
ex.printStackTrace();
return null;
}
}
/**
* 根据指定的参数绘制单独的动画帧
*
* @param source
* 源图片
* @param row
* 绘制第几帧
* @param x
* 精灵在屏幕上左上角X坐标
* @param y
* 精灵在屏幕上左上角Y坐标
* @param width
* 每一帧图片的宽度
* @param height
* 每一帧图片的高度
* @param col
* 裁剪原始图象的第几行
* @param g
* 画笔
*/
public void drawFrame(Image source, int row, int x, int y,
int width, int height, int col, Graphics g)
{
g.setClip(x, y, width, height);
g.drawImage(source, x - row * width, y - col * height, 20);
g.setClip(0, 0, screenWidth, screenHeight);
}
public void run()
{
while (gameState == RUN)
{
try
{
lastTime = System.currentTimeMillis();
if (!isNew && !gameMenu && !isClean && gameStart)
{// 已经进入了主游戏
logic(); // 游戏逻辑
if (player.playerState == Player.DEAD)
{
right += 4;
left -= 2;
if (right > screenWidth || left < 0)
{
right = screenWidth;
left = 0;
}
}
} else if (isNew)
{// 游戏刚刚开始时仅仅显示LOGO页面
logoTime += needSleepTime;
if (logoTime >= 2000 && logoCount != 2)
{// 每个LOGO显示3秒
logoCount++;
logoTime = 0; // 重置计时器
}
if (logoCount == 2)
if (nameStart > 120)
nameStart -= 2;
showAnyKey++;
showAnyKey = showAnyKey % 20;
}
if (isClean)
{
right += 4;
left -= 2;
if (right > screenWidth || left < 0)
{
right = screenWidth;
left = 0;
}
}
repaint();
// 计算休眠时间
needSleepTime = System.currentTimeMillis() - lastTime;
needSleepTime = needSleepTime < speed ? speed - needSleepTime
: 0;
Thread.sleep(needSleepTime);
} catch (Exception e)
{
}
}
}
// 处理连续案键事件
public void keyProcess()
{
inertia = inertia - 40 > 0 ? inertia - 40 : 0;
if (upLeftPress || inertia > 0 && way == 1)
{
if (!upLeftPress)
{
player.move(-1, -1);
} else
{
player.move(-6, -6);
}
return;
}
if (upRightPress || inertia > 0 && way == 3)
{
if (!upRightPress)
{
player.move(1, -1);
} else
{
player.move(6, -6);
}
return;
}
if (downRightPress || inertia > 0 && way == 9)
{
if (!downRightPress)
{
player.move(1, 1);
} else
{
player.move(6, 6);
}
return;
}
if (downLeftPress || inertia > 0 && way == 7)
{
if (!downLeftPress)
{
player.move(-1, 1);
} else
{
player.move(-6, 6);
}
return;
}
if (upPress || inertia > 0 && way == 2)
{
if (!upPress)
{
player.move(0, -1);
} else
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -