?? mypanel.java
字號:
package org.loon.chair.example1;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
/**
* Example1中自定義面板,用于描繪底層地圖。
*
* @author chenpeng
*
* Loon Framework in Game
*
*/
public class MyPanel extends JPanel{
/**
*
*/
private static final long serialVersionUID = 1L;
//窗體的寬與高
private static final int WIDTH = 480;
private static final int HEIGHT = 480;
//設定背景方格默認行數
private static final int ROW = 15;
//設定背景方格默認列數
private static final int COL = 15;
//單個圖像大小,我默認采用32x32圖形,可根據需要調整比例。
//當時,始終應和窗體大小比例協調;比如32x32的圖片,如何
//一行設置15個,那么就是480,也就是本例子默認的窗體大小,
//當然,我們也可以根據ROW*CS,COl*CS在初始化時自動調整
//窗體大小,以后的例子中會用到類似情況。總之一句話,編程
//是[為目的而存在的],所有的方法,大家都可任意嘗試和使用。
private static final int CS = 32;
//設定地圖,通常在rpg類型游戲開發中,以[二維數組]對象為
//基礎進行地圖處理,用以描繪出X坐標和Y坐標。實際上,即令
//再華麗的RPG類游戲,都是從這些簡單的X,Y坐標開始的。
//PS:所謂[數組],大家可以簡單的理解為即數據的集合,一維數組
//僅包含X軸,而二維是由X,Y兩個軸組成的,X與Y的交織點,即為
//一條數據。
private int[][] map = {
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,1,1,1,1,1,0,0,0,0,1},
{1,0,0,0,0,1,0,0,0,1,0,0,0,0,1},
{1,0,0,0,0,1,0,0,0,1,0,0,0,0,1},
{1,0,0,0,0,1,0,0,0,1,0,0,0,0,1},
{1,0,0,0,0,1,1,0,1,1,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};
//設定顯示圖像對象
private Image floorImage;
private Image wallImage;
//角色
private Image roleImage;
public MyPanel() {
//設定初始構造時面板大小
setPreferredSize(new Dimension(WIDTH, HEIGHT));
//于初始化時載入圖形
loadImage();
}
//描繪窗體,此處在默認JPanel基礎上構建底層地圖.
public void paintComponent(Graphics g) {
super.paintComponent(g);
//畫出地圖
drawMap(g);
}
/**
* 載入圖像
*
*/
private void loadImage() {
//獲得當前類對應的相對位置image文件夾下的地板圖像
ImageIcon icon = new ImageIcon(getClass().getResource("image/floor.gif"));
//將地板圖像實例付與floorImage
floorImage = icon.getImage();
//獲得當前類對應的相對位置image文件夾下的墻體圖像
icon = new ImageIcon(getClass().getResource("image/wall.gif"));
//將墻體圖像實例付與wallImage
wallImage = icon.getImage();
icon = new ImageIcon(getClass().getResource("image/hero.gif"));
roleImage = icon.getImage();
}
private void drawMap(Graphics g) {
//在Java或任何游戲開發中,算法都是最重要的一步,本例盡使用
//簡單的雙層for循環進行地圖描繪,
for (int x = 0; x < ROW; x++) {
for (int j = 0; j < COL; j++) {
// switch作為java中的轉換器,用于執行和()中數值相等
// 的case操作。請注意,在case操作中如果不以break退出
// 執行;switch函數將持續運算到最后一個case為止。
switch (map[x][j]) {
case 0 : //map的標記為0時畫出地板
//在指定位置[描繪]出我們所加載的圖形,以下同
g.drawImage(floorImage, j * CS, x * CS, this);
break;
case 1 : //map的標記為1時畫出城墻
g.drawImage(wallImage, j * CS, x * CS, this);
break;
//我們可以依次類推出無數的背景組合,如定義椅子為2、寶座為3等
//很容易即可勾勒出一張背景地圖。
default: //當所有case值皆不匹配時,將執行此操作。
break;
}
}
}
//我們加上這么一句
g.drawImage(roleImage, 240, 240, this);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -