❶ 紅色警戒3如何用編輯器製作塔防地圖
0000000
用java寫一個地圖編輯器
記得媒體在采訪c++之父的時候,他說作為程序員,要相信自己能夠解決已經理解的任何事情.
換句話說:您可以解決任何問題,只要想得明白
現實問題:開發一個基於地磚的二維游戲的地圖編輯器,要求生成兩個binary文件,各包含一個二維數組,*.map存放地磚,花花草草什麼的.*.item放道具,比如某個點可能會觸發一個事件.很簡單,隨便寫.看到這里您已經大致明白程序的整體結構.
計算機語言:java.
要理解事件必須分析
初步來看,地圖編輯器:生成某種形式的若干數組,無論是哪種形式的數組,你的目的:
生成數組.地圖是實際是一個(x,y)的二維坐標系,這很容易讓人聯繫到:亦無論
我准備把設置兩個程序界面(主界面/map界面),java的布局管理器不好擺弄,不如分開兩個class,主界面用jbuilder自動創建的application模塊(帶菜單).map界面自己寫,也是jframe,類之間相互傳遞消息,map界面將在程序開始時被初始化,也可以在程序從主界面中初始化(有問題)
構建程序
以下內容為程序代碼:
basepanel.setlayout(new gridlayout(5, 5));
for (byte i = 0; i < 9; i++) {
basemapbutton[i] = new
((icon) pic.getimageicon(i, 0));
basemapbutton[i].setbuttontitle(i);
basemapbutton[i].addactionlistener(buttonlistener);
basepanel.add(basemapbutton[i]);
}
itempanel.setlayout(new gridlayout(5, 5));
for (byte i = 0; i < 3; i++) {
itemmapbutton[i] = new mapbutton((icon) pic.getimageicon(i, 1));
itemmapbutton[i].setbuttontitle(i);
itemmapbutton[i].addactionlistener(buttonlistener1);
itempanel.add(itemmapbutton[i]);
}
tabbedpane.addtab("bases", basepanel);
tabbedpane.addtab("items", itempanel);
contentpane.add(tabbedpane, borderlayout.center);
有兩個地方要解釋:
mapbutton:自己寫的一個類
以下內容為程序代碼:
import javax.swing.icon;
import javax.swing.jbutton;
public class mapbutton extends jbutton {
public mapbutton() {
super();
}
public mapbutton(string arg0) {
super(arg0);
}
public mapbutton(action arg0) {
super(arg0);
}
public mapbutton(icon arg0) {
super(arg0);
}
public mapbutton(string arg0, icon arg1) {
super(arg0, arg1);
}
public byte width, height;
//public pic_w, pic_y;
public void setbuttontitle(byte w, byte h) {
width = w;
height = h;
}
public void setbuttontitle(byte w){
width =w;
}
public byte getbuttonwidth() {
return width;
}
public byte getbuttonheight() {
return height;
}
}
pic:自己寫的mappic類的intance:
以下內容為程序代碼:
package com.nenghe.mapeditor;
import javax.swing.imageicon;
public class mappic {
imageicon[] baseimages;
imageicon[] itemimages;
imageicon image1;
public mappic() {
init();
}
public void init() {
baseimages = new imageicon[9];
baseimages[0] = new imageicon(mappic.class.getresource("m1.png"[img]/images/wink.gif[/img]);
baseimages[1] = new imageicon(mappic.class.getresource("m2.png"[img]/images/wink.gif[/img]);
baseimages[2] = new imageicon(mappic.class.getresource("m3.png"[img]/images/wink.gif[/img]);
baseimages[3] = new imageicon(mappic.class.getresource("m4.png"[img]/images/wink.gif[/img]);
baseimages[4] = new imageicon(mappic.class.getresource("m5.png"[img]/images/wink.gif[/img]);
baseimages[5] = new imageicon(mappic.class.getresource("m6.png"[img]/images/wink.gif[/img]);
baseimages[6] = new imageicon(mappic.class.getresource("m7.png"[img]/images/wink.gif[/img]);
baseimages[7] = new imageicon(mappic.class.getresource("m8.png"[img]/images/wink.gif[/img]);
baseimages[8] = new imageicon(mappic.class.getresource("m9.png"[img]/images/wink.gif[/img]);
itemimages = new imageicon[3];
itemimages[0] = new imageicon(mappic.class.getresource("error.png"[img]/images/wink.gif[/img]);
itemimages[1] = new imageicon(mappic.class.getresource("i1.png"[img]/images/wink.gif[/img]);
itemimages[2] = new imageicon(mappic.class.getresource("i2.png"[img]/images/wink.gif[/img]);
}
public imageicon getimageicon(int x, int flags) {
if (flags == 0) {
return baseimages[x];
} else if (flags == 1) {
return itemimages[x];
}
return null;
}
}
寫mapbutton在於處理事件的時候可以准確的獲得按鈕的坐標,忘了說了,map界面中我是用按鈕代替地圖方格的.這是很容易想到的,最笨也是最省力的辦法
pic單獨寫好改,什麼時候內容改變了,很容易改,硬要合寫沒有也隨便.
下面就是事件了
有兩個事件要處理,第一個是按鈕事件,第二個菜單事件
按鈕事件我套用這樣的結構
以下內容為程序代碼:
actionlistener buttonlistener = new actionlistener() {
public void actionperformed(actionevent e) {
//system.out.println(e.tostring());
mapbutton pressedbutton = (mapbutton) e.getsource();
mapdraw.temp_x = pressedbutton.getbuttonwidth();
mapdraw.temp_y = 0;
//system.out.println(mapdraw.temp_x+" "+mapdraw.temp_y);
}
};
....
basemapbutton[i].addactionlistener(buttonlistener);
jbuilder中把按鈕事件事件單獨生成一個類,我不明白,看不懂.真的很高深.
菜單事件模型jbuilder自己加的.overwrite
以下內容為程序代碼:
public void *_actionperformed(actionevent e) {...}
用兩個中間值從主界面向map界面傳遞按了什麼:
這里是map界面中的按鈕的事件處理程序
以下內容為程序代碼:
actionlistener buttonlistener = new actionlistener() {
public void actionperformed(actionevent e) {
mapbutton pressedbutton = (mapbutton) e.getsource();
pressedwidth = pressedbutton.getbuttonwidth();
pressedheight = pressedbutton.getbuttonheight();
if (temp_y == 0) {
if (item[pressedwidth][pressedheight] != 0) {
item[pressedwidth][pressedheight] = 0;
jfm.showmessage("這里的道具已被置空!\nthe item has been null!"[img]/images/wink.gif[/img];
}
map[pressedwidth][pressedheight] = temp_x;
pressedbutton.seticon((icon) pic.getimageicon(temp_x,
temp_y));
} else {
if (map[pressedwidth][pressedheight] == 0) {
jfm.showmessage("道具不能放在這!\nnot put item at this point!"[img]/images/wink.gif[/img];
} else {
if (temp_x == 0) {
byte value = map[pressedwidth][pressedheight];
item[pressedwidth][pressedheight] = 0;
pressedbutton.seticon((icon) pic.getimageicon(
value, 0));
} else {
pressedbutton.seticon((icon) pic.getimageicon(
temp_x, temp_y));
item[pressedwidth][pressedheight] = temp_x;
}
}
}
}
};
請問兩個中間值是什麼呢?一目瞭然哦
最後是生成map
以下內容為程序代碼:
public void createmap() throws ioexception {
try {
dataoutputstream mapbinaryfile = new dataoutputstream(
new fileoutputstream(mapeditor.filename + "map"[img]/images/wink.gif[/img]);
dataoutputstream itembinaryfile = new dataoutputstream(
new fileoutputstream(mapeditor.filename + "item"[img]/images/wink.gif[/img]);
mapbinaryfile.writebyte(width);
mapbinaryfile.writebyte(height);
for (byte i = 0; i < height; i++)
for (byte j = 0; j < width; j++) {
//system.out.println(i+" "+j);
byte mapvalue = map[i][j];
byte itemvalue = item[i][j];
if (mapvalue != 0) {
system.out.println(i+" "+j+" "+ mapvalue);
mapbinaryfile.writebyte(j);
mapbinaryfile.writebyte(i);
mapbinaryfile.writebyte(mapvalue);
}
if (itemvalue != 0) {
itembinaryfile.writebyte(j);//x
itembinaryfile.writebyte(i);//y
itembinaryfile.writebyte(itemvalue);
}
}
mapbinaryfile.close();
itembinaryfile.close();
} catch (eofexception e) {
system.err.println("error"[img]/images/wink.gif[/img];
}
}
❸ 非計算機專業畢業怎樣轉行進來
希望我的經驗能影響他,影響徘徊在計算機行業外想進來的人。
先做個自我介紹,讓這篇博文比較有參考價值:
大學: 2004 ~ 2008 西安工業大學 包裝工程
現在公司: 中科大洋 -上海研發部
職位: Java軟體工程
工作年限:4年
工作內容: B/S 架構的企業軟體開發, 技術涉及Java、Javscript、 iOS
已掌握的語言: Java、Javascript、SQL、 C、 Objective C、Ruby
1. 程序員這個職業並不是為計算機專業學生專設的
我現在所在的公司,上海這邊就有3個大學非計算機專業的同事。除了我之外,一個是09年畢業學建築的,一個是11年畢業學法律的。如果你想,這條路可行。
2. 興趣是最大的老師
2002年高一暑假,暴雪推出了war3(魔獸爭霸3)。我想學編程的想法就從這個游戲開始。
由於暴雪的關系,當時讓我覺得做游戲是一件非常酷的事情。03年的一期大眾軟體,介紹了如何使用war3中的地圖編輯器做RPG游戲,從此便迷上了地圖編輯器,開始泡各種地圖編輯器的論壇。
在當時我只知道照著論壇的帖子改地形,寫觸發器,寫判斷語句,後來才知道地圖編輯器中使用的語言Jass(war3中的腳本語言)。
從那時起就立下一個目標,「學編程,做游戲。酷!」。
後來高考我並沒有考上計算機專業,志願被調劑西安工業大學的包裝工程。不過依然堅定自己的目標:「上了大學自學編程, C語言->C++-> VC -> 做游戲」。
現在想想當時的想法非常天真,就是這個天真的想法讓我一頭扎進了計算機的世界。
如果你對編程世界充滿好奇,恭喜你,他將會是你最好的老師。在整個過程中請牢記:「一切為了興趣」。在學習過程中碰到不感興趣的東西,可以先放放,讓興趣指引你去學你想學的東西,那些讓你感覺很頭疼的東西(比如編譯原理,演算法等),以後你會因為興趣將他們拾起來。
3. 學習是一個循環的過程
發現 -> 感興趣 -> 學習 -> 實踐 -> 成就感 -> 發現 -> … 請時刻記住這個循環過程。當然你可以總結出自己的一套循環理論。
4. 如何開始?
如果你現在很幸運的只知道一門編程語言,恭喜你,直接上手學吧。現在就開始是最好的開始。程序 語言的邏輯都很像,只要學會一個其他的都很容易。我在學編程的時候只知道C語言->C++->VC這條路,進入大學後整天泡在圖書館,在沒有 電腦的情況下手寫代碼。這段學習經歷讓我意識到,即刻開始是最好的開始。
如果你不幸知道了很多編程語言,並且不知道如何選擇,這里我可以給你一些建議:
C語言永遠是值得學習的一門語言。在猶豫不決的時候不妨先學C語言。如果你能很輕松寫出冒泡排序,寫出函數的遞歸調用。恭喜你,程序邏輯方面你已經很優秀了。
如果你對做網站感興趣,PHP是一個不錯的開始。當然還有Ruby、 Python。
如果你希望按照傳統套路來,Java是個不錯的選擇,之後可以選擇企業開發,Android開發等。
如果你對移動感興趣並且資金充足,Objective C 覺得很好的選擇。iOS開發難點在Mac, iPhone等設備購買上(貴,你懂得)。
最後不要忘了身邊的有當程序員的人,他們的意見很值得參考,如果按照他們的路子入門,你將得到一個很好的導師。這將會是一件非常棒的事情。
如何選擇書:
選書之前先在豆瓣讀書看看書評。
首選圖靈出版社的書。
書越薄越好,快速入門是目的。那種跟磚一樣厚的書,請忽略掉,除非你有自虐傾向。
一些值得推薦的網站:
編程中國: www.bccn.cn 很適合初學者的網站。我剛開是學編程的是時候,在這里得到很多幫助。
CSDN: www.csdn.net 大而全。
ITEye: www.iteye.net 前身JavaEye,我常年混跡的網站。建議工作後來這里混。
❹ mappy編寫java游戲地圖
游戲地圖是一小塊一小塊組成的,而游戲地圖就是一個數組,通過數組來繪制地圖。比如說:數組里0是草地,1是磚頭,只需遍歷數組來繪制即可。也就是說,地圖編輯器只是給你數組,但是具體遍歷數組來繪制地圖的方法是要自己實現的。
我網路博客里講了NeatBeans開發手機游戲地圖的。不過做游戲地圖,其實用mapwin也行。
地圖編輯器不會給你小的圖片單元的,那是要自己用方法來拆圖片,並繪制的。不過在手機游戲開發的game包里有相應的類和方法,用來幫助開發手機游戲。
❺ Java游戲編程的圖書信息(一)
ISBN: 7030129423
印刷時間: 2004-6第1次印刷
開 本: 16
價 格(元): 68 第一部分 Java游戲基礎
第1章 Java線程 1. 1 什麼是線程 1. 2 在Java中生成與運行線程 1. 2. 1 擴展Thread類 1. 2. 2 實現Runnable介面 1. 2. 3 使用匿名內類 1. 2. 4 等待線程完成 1. 2. 5 休眠線程 1. 3 同步 1. 3. 1 為什麼要同步 1. 3. 2 如何同步 1. 3. 3 同步是什麼 1. 3. 4 不同步是什麼 1. 3. 5 避免死鎖 1. 4 使用wait 與notify 1. 5 Java事件模型 1. 6 何時使用線程 1. 7 何時不使用線程 1. 8 線程池 1. 9 小結
第2章 二維圖形與動畫 2. 1 全屏圖形 2. 1. 1 屏幕布局 2. 1. 2 像素顏色與位深度 2. 1. 3 刷新率 2. 1. 4 將顯示切換到全屏方式 2. 1. 5 抗齒邊 2. 1. 6 選用顯示方式 2. 2 圖像 2. 2. 1 透明度 2. 2. 2 文件格式2. 2. 3 讀取圖像 2. 2. 4 硬體加速圖像 2. 2. 5 圖形繪制基準程序 2. 2. 6 動畫 2. 2. 7 活動繪制 2. 2. 8 動畫循環 2. 3 避免閃爍與裂開 2. 3. 1 雙緩存 2. 3. 2 翻頁2. 3. 3 監視刷新與裂開 2. 3. 4 BufferStrategy類 2. 3. 5 生成屏幕管理器 2. 3. 6 幽靈 2. 4 簡單效果 2. 5 小結
第3章 交互性與用戶界面 3. 1 AWT事件模型 3. 2 鍵盤輸入 3. 3 滑鼠輸入 3. 4 通過滑鼠移動的觀看模式 3. 5 創建輸入管理器 3. 6 使用輸入管理器 3. 6. 1 暫停游戲 3. 6. 2 增加重力 3. 7 設計直觀用戶界面 3. 8 使用Swing組件 3. 8. 1 Swing基礎 3. 8. 2 在全屏方式中使用Swing 3. 9 創建簡單菜單 3. 10 游戲者配置鍵盤 3. 11 小結
第4章 聲效與音樂 4. 1 聲音基礎 4. 2 JavaSoundAPl 4. 2. 1 打開聲音文件 4. 2. 2 使用Line 4. 3 播放聲音 4. 4 創建實時聲音過濾體系結構 4. 5 創建實時回響過濾 4. 6 模擬三維聲音 4. 6. 1 生成三維過濾器的思路 4. 6. 2 實現三維過濾器 4. 6. 4 測試三維過濾器 4. 7 創建聲音管理器 4. 7. 1 Sound類 4. 7. 2 SoundManager類 4. 7. 3 線程局部變數4. 8 播放音樂 4. 8. 1 播放光碟聲頻 4. 8. 2 播放MP3與OggVorbis 4. 8. 3 播放MIDI音樂4. 8. 4 生成適配音樂 4. 9 小結
第5章 創建二維平台游戲 5. 1 生成基於地磚的地圖 5. 1. 1 實現Tile地圖 5. 1. 2 讀取Tile地圖 5. 1. 3 繪制Tile地圖 5. 1. 4 繪制幽靈 5. 1. 5 視差滾動 5. 1. 6 充電器 5. 1. 7 簡單壞人 5. 2 碰撞探測 5. 2. 1 探測碰撞 5. 2. 2 處理碰撞 5. 2. 3 幽靈碰撞 5. 3 完成與加速 5. 4 生成可執行的.jar文件 5. 5 擴展游戲 5. 6 小結
第6章 多人游戲 6. 1 Java I/O庫的變革 6. 1. 1 JDK 1. 4NIO庫的概述 6. 1. 2 信道 6. 1. 3 緩存 6. 1. 4 選擇器與SelectionKeys 6. 2 基本多方游戲應用程序6. 2. 1 伺服器端 6. 2. 2 建立與運行伺服器 6. 2. 3 客戶端6. 2. 4 建立與運行客戶機 6. 3 多方游戲伺服器框架 6. 3. 1 設計目標與戰術 6. 3. 2 設計 6. 3. 3 共用類與介面 6. 3. 4 伺服器實現 6. 3. 5 客戶機 6. 4 RPS游戲 石頭. 布. 剪刀 6. 4. 1 類 6. 4. 2 運行RPS游戲 6. 5 建立框架 6. 5. 1 客戶機GUI 6. 5. 2 持久性 6. 5. 3 夥伴名單. 門廳與閑聊 6. 6 伺服器管理 6. 6. 1 登記 6. 6. 2 啟動/關閉 6. 6. 3 伺服器管理控制台 6. 6. 4 游戲監查 6. 7 高級課題 6. 7. 1 切斷與重接 6. 7. 2 HTTP隧道 6. 7. 3 量化測試 6. 7. 4 Modem連接 6. 7. 5 性能剖析與統計 6. 7. 6 性能調整 6. 8 小結
第二部分 三維圖形與高級技術
第7章 三維圖形 7. 1 三維繪制的類型 7. 2 回顧曾經學過的數學 7. 2. 1 三角學和直角三角形 7. 2. 2 向量數學 7. 3 3D的基礎 7. 4 3D的數學 7. 5 多邊形 7. 6 三維變換 7. 6. 1 旋轉 7. 6. 2 包裝旋轉和平移變換 7. 6. 3 採用變換 7. 6. 4 旋轉順序 7. 7 3D的簡單管道 7. 8 鏡頭移動 7. 9 實體和背面刪除 7. 9. 1 點積 7. 9. 2 交積 7. 9. 3 再談點積和交積 7. 10 掃描轉換多邊形 7. 11 三維剪取 7. 12 最後繪制管道 7. 13 小結
第8章 紋理貼圖與照明 8. 1 透視正確紋理貼圖的基礎 8. 2 簡單紋理貼圖器 8. 3 優化紋理貼圖 8. 3. 1 紋理的存儲格式 8. 3. 2 原始優化 8. 3. 3 內聯方法 8. 3. 4 快速紋理貼圖演示程序 8. 4 簡單燈光 8. 4. 1 擴散反射 8. 4. 2 環境光 8. 4. 3 光源強度 8. 4. 4 距離減弱 8. 4. 5 實現點光源 8. 5 實現紋理照明 8. 6 使用陰影圖的高級照明 8. 6. 1 求出邊界矩形 8. 6. 2 採用色檔圖 8. 6. 3 建立色檔圖 8. 6. 4 建立表面 8. 6. 5 緩存表面 8. 6. 6 陰影表面演示程序 8. 7 其他概念 8. 7. 1 深度提示 8. 7. 2 偽陰影 8. 7. 3 MIP貼圖 8. 7. 4 雙線性插值 8. 7. 5 三線性插值 8. 7. 6 法線圖與深度 8. 7. 7 其他類型的光 8. 8 小結
第9章 三維對象 9. 1 表面消隱 9. 1. 1 油畫演算法 9. 1. 2 反油畫演算法 9. 1. 3 Z緩存 9. 1. 4 使用1/Z的Z緩存 9. 1. 5 計算Z深度 9. 2 三維動畫 9. 2. 1 空間運動 9. 2. 2 角度運動 9. 3 多邊形組 9. 4 從OBJ文件裝入多邊形組 9. 4. 1 0BJ文件格式 9. 4. 2 MTL文件格式 9. 5 游戲實體 9. 6 管理游戲實體 9. 7 綜合起來 9. 8 改進 9. 9 小結
第10章 用BSP樹管理三維視景 10. 1 BSP樹簡介 10. 2 二叉樹基礎 10. 3 一維BSP樹 10. 4 二維BSP樹 10. 4. 1 建立BSP樹 10. 4. 2 BSP樹遍歷實例 10. 5 實現二維BSP樹 10. 5. 1 BSPLine 10. 5. 2 確定點相對於直線的邊 10. 5. 3 BSP多邊形 10. 5. 4 遍歷BSP樹 10. 5. 5 中序遍歷 10. 5. 6 由前到後遍歷 10. 5. 7 樹的建立 10. 5. 8 兩條線求交 10. 5. 9 用直線剪取多邊形 10. 5. 10 刪除T形接頭 10. 5. 11 測試BSP樹 10. 6 從前到後畫多邊形 10. 7
第一個BSP樹例子 10. 8 在視景中畫實體 10. 9 從文中裝入貼圖 10. 10 綜合起來 10. 11 改進 10. 12 小結
第11章 碰撞探測 11. 1 碰撞基礎 11. 2 實體間碰撞 11. 2. 1 減少測試 11. 2. 2 邊框球 11. 2. 3 邊框圓柱 11. 2. 4 離散時間問題 11. 3 實體與世界碰撞 11. 3. 1 測試地板的邊框 11. 3. 2 尋找特定位置的BSP葉 11. 3. 3 實現地板和天花板高度測試 11. 3. 4 測試牆的邊框 11. 3. 5 BSP樹的線段交點 11. 3. 6 角問題 11. 3. 7 實現實體/世界碰撞探測 11. 4 基本碰撞探測演示程序 11. 5 滑動與碰撞處理 11. 5. 1 實體間滑動 11. 5. 2 實體沿牆的滑動 11. 5. 3 重力與爬樓梯 實體沿地 面滑動 11. 5. 4 實現跳動 11. 6 碰撞探測與滑動演示程序 11. 7 改進 11. 8 小結
第12章 路徑搜索 12. 1 路徑尋找基礎 12. 2 初步路徑尋找方法 12. 3 A*演算法基礎 12. 4 採用A*演算法 12. 5 BSP樹與A*演算法 12. 5. 1 門戶 12. 5. 2 實現門戶 12. 6 一般性路徑尋找 12. 7 建立PathBot 12. 8 改進A*搜索 12. 9 小結
第13章 人工智慧 13. 1 人工智慧基礎13. 2 減少Bot的神力 13. 2. 1 視覺 13. 2. 2 聽覺 13. 3 狀態機與響應 13. 4 概率機 13. 5 決策 13. 6 模式 13. 6. 1 躲避 13. 6. 2 攻擊 13. 6. 3 跑開 13. 6. 4 瞄準 13. 6. 5 射擊 13. 7 實體派生 13. 8 綜合起來 13. 8. 1 大腦 13. 8. 2 健康與死亡 13. 9 進化 13. 9. 1 再生 13. 9. 2 進化Bot 13. 9. 3 演示改進 13. 10 進化 13. 11 小結
第14章 游戲腳本14. 1 關於腳本 14. 2 實現接觸與釋放通知 14. 3 游戲實體監聽器 14. 4 腳本 14. 4. 1 設計腳本 14. 4. 2 嵌入BeanShell解釋器14. 5 延遲事件 14. 6 綜合起來 14. 7 改進 14. 8 小結
第15章 保存游戲 15. 1 游戲保存基礎 15. 2 對游戲狀態保存使用Java序列化 API 15. 2. 1 序列化簡介 15. 2. 2 序列化基礎 15. 2. 3 序列化規則 15. 2. 4 序列化問題 15. 2. 5 覆蓋預設行為 15. 3 生成游戲屏幕圖形 15. 3. 1 生成屏幕略圖圖形 15. 3. 2 保存圖形 15. 4 將游戲保存到正確目的地 15. 5 小結
第三部分 調整與完成游戲
第16章 優化技術 16. 1 優化規則 16. 2 剖析 16. 2. 1 基準測試 16. 2. 2 使用HotSpot剖析器 16. 3 HotSpot 16. 3. 1 Java特定優化 16. 3. 2 死亡代碼消除 16. 3. 3 循環不變項提升 16. 3. 4 公共子表達式消除 16. 3. 5 常量傳遞 16. 3. 6 內聯方法 16. 4 優化技巧 16. 4. 1 演算法 16. 4. 2 移位 16. 4. 3 求模 16. 4. 4 乘法 16. 4. 5 指數 16. 4. 6 更多循環不變項提升 16. 4. 7 查找表 16. 4. 8 定點算術 16. 4. 9 異常 16. 4. 10 輸入/輸出 16. 4. 11 內存貼圖文件 16. 5 內存使用與回收 16. 5. 1 Java堆與內存回收 16. 5. 2 監視內存回收 16. 5. 3 監視內存使用 16. 5. 4 調整堆 16. 5. 5 調用內存回收單元 16. 5. 6 減少對象生成 16. 5. 7 對象復用 16. 5. 8 對象池 16. 6 感覺性能 16. 7 小結
第17章 生成游戲圖形與聲音 17. 1 選擇外觀 17. 1. 1 尋找靈感 17. 1. 2 保持一致 17. 2 取得自由版權游戲媒體 17. 3 與藝術家和聲效工程師合作 17. 4 工具 17. 5 生成聲音 17. 6 生成紋理與幽靈 17. 6. 1 圖形文件格式 17. 6. 2 生成無縫紋理 17. 6. 3 生成替換紋理 17. 6. 4 生成過渡紋理 17. 6. 5 生成多層紋理 17. 7 生成漂亮屏幕與HUD圖形 17. 8 生成UI圖形 17. 9 生成字體17. 10 小結
第18章 游戲設計與最後10% 18. 1 最後10% 18. 1. 1 效果 18. 1. 2 游戲狀態機 18. 2 游戲設計要素 18. 2. 1 環境 18. 2. 2 故事要素 18. 2. 3 玩游戲 18. 2. 4 告訴用戶怎麼玩 18. 3 生成貼圖編輯器18. 4 調試 18. 4. 1 調試Java2D問題 18. 4. 2 日誌 18. 5 保護代碼 18. 6 游戲部署 18. 7 JavaWebStart游戲部署 18. 7. 1 從jar文件取得資源 18. 7. 2 簽名jar文件 18. 7. 3 生成JNLP文件 18. 7. 4 設置Web伺服器 18. 8 自然編譯游戲部署 18. 9 更新與補丁18. 10 帶寬問題 18. 11 反饋與Beta測試18. 12 賺錢 18. 13 綜合起來 18. 14 小結
第19章 未來 19. 1 Java的演變 19. 1. 1 Java社團 19. 1. 2 缺陷天堂 BugParade 19. 2 Java 1. 5 Tiger 19. 2. 1 一般 JSRl4 19. 2. 2 枚舉 JSR201 19. 2. 3 靜態導入口 JR201 19. 2. 4 改進for循環 JSR201 19. 2. 5 編譯器API JSRl99 19. 2. 6 網路傳輸格式 JSR200 19. 2. 7 共享虛擬機JSR121 19. 3 Java平台需要什麼 19. 3. 1 更多滑鼠與鍵盤輸入選項 19. 3. 2 游戲桿輸入 19. 3. 3 硬體加速半透明圖像 19. 3. 4 高精度定時器19. 3. 5 Linux中的硬體加速圖形和全屏 方式 19. 3. 6 運行環境中的硬體加速三維 特性 19. 3. 7 HotSpotSIMD優化 19. 3. 8 更多字體光順選項 19. 3. 9 其他情況 19. 4 新設備與Java Games Profile JSR134 19. 5 小結
Java 是一個由 Sun 公司開發而成的新一代編程語言。使用它可在各式各樣不同機器、不同操作平台的網路環境中開發軟體。
游戲編程屬於軟體開發。用編程製作軟體屬於編程,但是指在進行中,而一但編制完整就屬於軟體開發了。
❻ Java Eclipse來開發地圖,用什麼插件
1. Log4E
Log4E支持Java項目使用日誌,不依賴於任何Log框架,可以通過配置支持各種日誌框架,例如Log4J、JDK 1.4日誌記錄和SLF4J。Log4E高級版本提供了擴展功能,如可編輯模板、在常用日誌框架中使用Jakarta字元串生成器,預覽向導,首選范圍等。總體來說,Log4E是一款實用且受歡迎的插件。
2. Mylyn
Mylyn可以將任務管理和上下文管理無縫集成到Eclipse中,是一款強大的任務和應用程序生命周期管理(ALM)框架。Mylyn基於Eclipse,提供以任務為重點的界面、工具和API,幫助開發人員執行多任務,避免信息過載。另外,Mylyn還集成了很多有用的工具,如Jira,Bugzilla和Trac,這些工具可以提供任務管理和離線編輯功能
3 Spring IDE
Spring IDE是一個Eclipse插件套件,主要用於開發基於Spring的應用,支持Spring AOP(面向方面的編程),Spring Web Flow和Spring JavaConfig。除此之外,開發人員還可以使用向導、文本和圖形編輯器來創建Spring配置文件和新的Spring項目。
4. FindBugs
FindBugs是一個免費的開源軟體應用程序,主要作用是幫助開發人員發現Java代碼中的錯誤,它能夠分析Java1.0到1.8所有版本編譯的代碼。FindBugs可以作為流行IDE的可用插件,如Eclipse,Netbeans和IntelliJ等。另外,它還為開發人員提供雲存儲功能,幫助他們查找和共享某些問題的評估信息。
5. Eclipse Checkstyle
Checkstyle是一種廣泛使用的Java源代碼檢查工具,它能夠自動化檢查Java代碼是否符合規范。Eclipse Checkstyle集成了多個Eclipse工作區插件的Checkstyle代碼分析器,允許開發人員配置自定義編碼標准和規則,一旦出現任何違反標准和規則的代碼就會及時反饋和警告,發現的違例或偏差可作為代碼編輯器注釋、Eclipse問題視圖和Checkstyle違例視圖。
6. Eclim
Eclim是一款用於將Eclipse IDE的代碼編輯功能與Vim(一種支持多種編程語言的流行文本編輯器)集成的插件。通過這一插件Java開發人員可以訪問幾個重要功能,如代碼完成提示、代碼驗證、Java文檔和源代碼搜索,支持Checkstyle和正則表達式測試。程序員還可以利用Eclim編輯HTML,Python,Ruby,JavaScript等代碼。此外,第三方Eclim客戶端還支持其他文本編輯器,例如Sublime Text 2,TextMate和Emacs。
7. Apache IvyDE
Apache IvyDE是一個用於將Eclipse Ivy(一個依賴項管理器)與Eclipse IDE集成的插件。 Apache Ivy是Apache Ant的一個子項目,是一個基於Java的軟體工具,用於自動化構建過程。 Apache IvyDE提供了強大的功能,如Java依賴關系管理,支持傳遞依賴,Ivy XML文件編輯器,託管類路徑容器和反向依賴關系瀏覽器。
8. EGit
Git是一款流行的免費開源分布式版本控制軟體,EGit集成了Eclipse Team Framework與GIT,它能夠保存用戶創建的任何新提交的更新,並且實現了對於代碼每次修改的整個歷史的跟蹤。 EGit項目是在「The JGit Project」(GIT的Java實現)之上實現Eclipse工具。
9. P4Eclipse
P4Eclipse是一個強大的解決方案,用於集成Eclipse IDE與Perforce Helix版本控制引擎。 P4Eclipse是Eclipse IDE的Helix插件,它為Eclipse提供基本的Helix操作,支持Eclipse Team Framework中的敏捷和傳統開發工作流程, P4Eclipse為Eclipse IDE用戶提供了一些有用的功能,如代碼審查,協作,調試,復雜重構等等。
10. Hibernate Tools
Hibernate Tools是一套用於Eclipse IDE的插件,允許Java開發人員利用Hibernate3的強大功能。Hibernate是一個用於Java平台的對象關系映射工具,它是JBoss Tools的重要組成部分。Hibernate工具為Eclipse IDE提供了一系列的功能,如映射編輯器,Hibernate控制台,統一Ant任務和資料庫逆向工程。
❼ 如何做一個簡單的java地圖編輯器
地圖編輯器思路如下:
❽ 幾個關於魔獸爭霸3的問題~~[高手進]
本文主要介紹目前開發游戲比較流行的兩款工具mappy(mapwin)和tiled,分別介紹工具的安裝、使用、優缺點分析,雖然不能面面俱到,但使用要點之處都已說明。作為開發游戲的fans們必不可少的入門指南。
一、何所謂「地圖編輯器」
地圖編輯器,顧名思義,就是用來編輯地圖的工具,如果玩過《魔獸爭霸》或是《帝國時代 2 》、《英雄無敵》的話,應該會知道這幾款游戲都附有地圖編輯工具,可提供玩家自行編輯地圖關卡,地圖編輯器就具有類似的功能。
二、mappy(mapwin)入門指南:
1.預備知識:
tile:中文名字-瓷磚,呵呵,也就是平鋪在某個物體表面上的單元。使用過j2me的Tile或者vc開發游戲的都知道。
playback library:回放庫,支持裝載和顯示mapwin的FMP地圖文件的庫。
2.mapwin簡介:
軟體名稱:mapwin
版本:1.4.11
運行環境:windows
依賴庫文件:libpng12.dll、zlib.dll
用途:靈活的建立2d、3d游戲的tile。
強大的回放庫支持:DirectX、Allegro、OpenGL、Java、CDX、SDL、Delphi、Blitz Basic、Dark Basic、GBAMappy、Combined、GameMaker等
3.快速安裝導航:
首先就是下載mapwin,作者下載的是mapwin1.4.11版。
如果需要支持PNG圖片,那麼就要到下載兩個dll文件:
zlib.dll-用於文件壓縮,下載地址:zlib.net
libpng12.dll-libpng的window版,png圖像壓縮庫,下載地址:gnuwin32
安裝這兩個dll文件很簡單,方法就是直接復制到mapwin目錄下。
4.快速使用導航:
(1)第一步就是啟動程序。然後File->new map,新建一個map,設置每個tile的長寬和map包含的tile的行數和列數。
(2)根據提示進入File->Import...,選擇作為tile的圖片,這樣右側會出現以前面設置的按照每個tile的長寬劃分的圖片tile。
(3)此時就可以使用滑鼠選取tile,在map中的適當位置點擊便會將此tile畫在map上。使用右鍵可以刪除map上的title。
(4)mapwin默認只有一個layer,如果要新建layer的話,可以通過Layer->add layer實現,map上方的狀態條會顯示滑鼠當前的位置和當前Layer的層數。
(5)map完成後,按ctrl+s保存,選擇File->export as text,將map導出為用map數組表示的文本。其中「Map Array(s) Prefix with」選項可以修改為java語言表示數組的形式:new int[][]。這樣就會生成j2me中可用的代碼片斷,可以直接用到程序中。
5.優缺點:
優點:與tiled相比,支持2d、3d游戲,具有很多的游戲開發介面和語言;使用相應的回放庫可以設置碰撞檢測等擴展功能。
缺點:缺少快捷工具欄,操作速度慢。
三、tiled入門指南:
1.預備知識:
Tileset:tile的集合,這是tiled管理tile的一種分組方式。每個tile有一個name來代表。
Tile的存在方式:tiled軟體管理tile的方法與眾不同。tile默認只保存在map中,也可以導出為.tsx文件供多個map共用。
2.tiled簡介:
軟體名稱:Tiled
版本:0.5.1
運行環境:支持java的os
依賴庫文件:無
用途:tiled地圖編輯器是一種用於通用目的的編輯器。特點是比較好用,風格類似mini版的photoshop。它可以用於製作多種類型的游戲引擎需要,而且支持使用插件讀寫map、增加用於引擎的map格式。
3.快速安裝導航:
下載tiled,然後解壓縮,可以發現tiled.jar文件,使用java -jar tiled.jar命令來運行之。
4.快速使用導航:
(1)使用File->new,進入New Map Dialog對話框,其中可以選擇Map的類型,設置Map size和Tile size,這和mapwin很類似。
(2)建立map之後,系統會默認分配一個layer,但是並沒有Tileset,所以選擇Tilesets->New tileset...建立tileset。輸入Tileset名字後,選取「Reference tileset image」選項,瀏覽Tile image所使用的圖片。其中的「Tile spacing」為設置Tile四邊的邊框,因為不常用,所以經常被設置為0。
(3)在增加了tileset後,點擊左下角的按鈕可以看到tile的調色板,這時便可以在調色板中選擇合適的tile在map上構圖了。
tile左側的工具欄提供了快捷工具:move layer、paint、erase、fill、eye dropper(取色器)、select、縮放。而在右側是類似photoshop的layer manger,用來新建layer、復制layer、鎖定layer、隱藏layer。
eye dropper的使用方法有兩種:一種是選擇eye dropper工具,然後在map中選擇tile;另一種方法更快捷-直接在map中的tile上點擊滑鼠右鍵。
(4)當map畫好後,按ctrl+s可以將map保存為tmx文件。
(5)對map文件內容的解釋:
<?xml version="1.0" ?>
<map orientation="orthogonal" width="32" height="32" tilewidth="24" tileheight="24">
<tileset firstgid="1" name="Sewers" tilewidth="24" tileheight="24">
<image source="tiledweb/files/tiles_pipes.png"/>
</tileset>
<layer name="Layer 0">
<data encoding="base64" compression="gzip">
+s6l0jolNJiif18tt/Fj8AAMC9ARtYg28AEAAA </data>
</layer>
</map>
此文件表示了這個map只有一個tileset和一個layer,注意一下前面建立map和tileset時輸入的數據不是所有都在這個文件中,因為使用默認的屬性(如tile spacing)是不會保存在這個文件中的。
由於一個tile可以被多個map引用,所以layer的data屬性值使用base64編碼、使用gzip壓縮的一個32位整數的數組,它代表了tile的全局id--firstgid。每個tile內部使用自己的local id,而firstgid作為在多個map中區分tile的標識。
注意此軟體沒有導出為map數組的功能,只能使用View->Show Coordinates顯示坐標。
5.優缺點:
優點:易用。使用xml規范作為map文件的書寫規范有利於用戶自定義修改和功能的擴展。
缺點:缺少與游戲開發語言的介面,還需要進一步的開發擴展。
❾ 怎樣製作一款游戲
不是隨便那一個軟體就可以做游戲的,需要很多軟體搭配使用,編程、美工、等工序。
游戲製作(The Games Factory) ,是指一個電子游戲的製作過程。由於游戲的類型、大小和要求,游戲製作需要的人員和時間也不一樣。游戲製作一般主要分為兩大塊,即程序開發、美術設計。程序開發主要包括伺服器端開發、客戶端開發。而美術設計包括場景、角色、次時代、特效、動畫等部分,要完成一個優秀的游戲作品,每一部分都需有專業人才負責。
游戲程序開發主要負責游戲程序開發,這一塊是人才缺口相對比較少的,因為各高校都開設有c/c++、java等專業,如今國內從事軟體開發的人才需求比較大,人才輸出也同樣比較大。
對於大型的游戲,一般需要幾十個人的團隊製作幾年;而小游戲則可能只需一個人製作幾天。一般的大型游戲製作都會由游戲開發公司來完成,小型的游戲則有可能由業余團隊或者個人完成,如RPG製作大師此類軟體就可以讓不懂技術的人做出電腦游戲。
❿ 手游開發j2me需要安裝哪些軟體,如何安裝
在進行J2ME程序需要開發的時候,使用的開發工具分為兩類:l 通用開發工具——適合所有手機的通用工具l 專用開發工具——適合某種型號的手機的開發工具,例如Nokia下面介紹一下通用開發工具J2ME Wireless Toolkit(J2WTK),最近SUN公司將這個名字更改為Java Wireless Tookit,其最新版本為2.3beta。該工具完全免費,其官方主頁為: http://java.sun.com/procts/sjwtoolkit/index.html 下面以J2WTK2.2版本為例,來介紹該工具的安裝和使用。首先SUN公司發布的J2WTK2.2分為四種語言的版本:英語、日語、簡體中文、繁體中文。其中簡體中文版本的安裝程序下載地址為: http://java.sun.com/procts/sjwtoolkit/zh_download-2_2.html 下載完成以後,下面介紹一下該軟體的安裝。在該軟體安裝以前,必須保證系統中已經正確安裝了JDK1.4.2版本,不能安裝JDK1.5版本,該軟體不支持高版本的JDK。安裝好了JDK1.4.2以後,就可以安裝該軟體了。該軟體的安裝過程比較簡單,就不做詳細的說明了。安裝好該軟體以後,該軟體的詳細使用使用說明,可以參看該軟體附帶的中文使用說明文件,該文件位於安裝目錄下的\docs\zh\docs目錄中,文件名稱為:UserGuide.pdf。該文件包含所有J2WTK的使用說明。