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

📄 gameworld.java

📁 实现了 移动 碰撞检测
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
					{
						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 + -