2011年5月22日 星期日

[轉載] 8款開放原始碼的Android遊戲引擎

以下介紹的8款開源的Android遊戲引擎,OSChina 都已收錄。

很多初學Android遊戲開發的朋友,往往會顯得有些無所適從,他們常常不知道該從何處入手,每當遇到自己無法解決的難題時,又往往會一邊羨慕於iPhone下有諸如Cocos2d-iphone之類的免費遊戲引擎可供使用,一邊自暴自棄的抱怨Android平台遊戲開發難度太高,又連個像樣的遊戲引擎也沒有,甚至誤以為使用Java語言開發遊戲是一件費力不討好且沒有出路的事情。

事實上,這種想法完全是沒有必要且不符合實際的,作為能和蘋果iOS分庭抗禮的Android(各種意義上),當然也會有相當數量的遊戲引擎存在。僅僅因為我們處於這個狹小的天地間,與外界接觸不夠,所以對它們的存在茫然不知罷了。

下面我就羅列出八款常見的Android遊戲引擎,以供有需要者參考(收費,下載量過小,不公佈源碼,以及鄙人不知道(-_-)的引擎不在此列)。


1、Angle

Angle是一款專為Android平台設計的,敏捷且適合快速開發的2D遊戲引擎,基於OpenGL ES技術開發。 該引擎全部用Java代碼編寫,並且可以根據自己的需要替換裡面的實現,缺陷在於文檔不足,而且下載的代碼中僅僅包含有少量的示例教程。

最低運行環境要求不詳。


2、Rokon

rokon是一款Android 2D遊戲引擎,基於OpenGL ES技術開發,物理引擎為Box2D,因此能夠實現一些較為複雜的物理效果,該項目最新版本為2.0.3 (09/07/10)。 總體來說,此引擎最大的優點在於其開發文檔相當之完備,並且項目作者對反饋Bug的修正非常之神速,所以該框架的使用在目前也最為廣泛,有人乾脆將它稱為Cocos2d-iPhone引擎的Android版(業務邏輯和編碼風格上也確實很像)。 附帶一提,國內某個需要註冊會員才能下載的Android遊戲框架衍生於此框架,所以大家也不要刻板的認為收費便一定是好的,免費就一定不好。

最低運行環境要求為Android 1.5。


3、LGame

LGame是一款國人開發的Java遊戲引擎,有Android及PC(J2SE)兩個開發版本,目前最高版本同為0.2.6(31/07/10)。 其底層繪圖器LGrpaphics封裝有J2SE以及J2ME提供的全部Graphics API(PC版採用Graphics2D封裝,Android版採用Canvas模擬實現),所以能夠將J2SE或J2ME開發經驗直接套用其中,兩版本間主要代碼能夠相互移植。 Android版內置有Admob接口,可以不必配置XML直接硬編碼Admob廣告信息。

該引擎除了基本的音效、圖形、物理、精靈等常用組件以外,也內置有Ioc、xml、http等常用Java組件的封裝,代價是jar體積較為龐大,PC版已突破1.2MB,Android版有所簡化也在500KB左右。 此外,該引擎還內置有按照1:1實現的J2ME精靈類及相關組件,可以將絕大多數J2ME遊戲平移到Android或PC版中。 唯一遺憾的是,該項目作者是個極其懶惰的傢伙,開發文檔從去年說到今年依舊沒有提供,只有遊戲示例可供下載。

最低運行環境要求為Android 1.1。


4、AndEngine

andengine同樣是一款基於OpenGL ES技術的Android遊戲引擎,物理引擎同樣為Box2D(標配|||)。 該框架性能普通,文檔缺乏,但示例較為豐富。

下載地址(未直接提供jar下載,源碼可通過svn提取):http://code.google.com/p/andengine/

最低運行環境要求不詳。


5、libgdx

libgdx是一款基於OpenGL ES技術開發的Android遊戲引擎,支持Android平台下的2D遊戲開發,物理引擎採用Box2D實現。 單就性能角度來說,堪稱是一款非常強大的Android遊戲引擎,但缺陷在於精靈類等相關組件在使用上不夠簡化,而且文檔也較為匱乏。

最低運行環境要求不詳。


6、jPCT

jPCT是一款基於OpenGL技術開發的3D圖形引擎(PC環境為標準OpenGL,Android為OpenGL ES), 以Java語言為基礎的,擁有功能強大的Java 3D解決方案。 該引擎與LGame(此為2D遊戲引擎)相類似,目前擁有PC(J2SE)以及Android兩個開發版本。

jPCT的最大優勢之一,就在於它驚人的向下兼容性。 在PC環境中,jPCT甚至可以運行在JVM1.1環境之中,因為jPCT內部提供的圖形渲染接口完全符合所有的Java 1.1規範(就連已經消失的Microsoft VM乃至更古老的Netscape 4 VM也不例外)。

最低運行環境要求為Android 1.5。


7、Alien3d

Alien3d是一款體積非常之小的Android 3D遊戲引擎,基於OpenGL ES技術開發。 為了壓縮體積,它根據不同功能採用多jar方式發布(包括alien3d-engine.jar,alien3d- tiled.jar,alien3d-sprites.jar,alien3d-shapes.jar,alien3d- particles2d.jar,),事實上它的核心文件大約只有40KB,所有相關jar的總和也不足150KB。

最低運行環境要求為Android 1.5。


8、Catcake

Catcake是一款跨平台的Java 3D圖形引擎,目前支持PC(J2SE)及Android環境運行(已有iPhone版規劃)。 該引擎在易用性和運行性能上皆有出色的表現,支持常見的遊戲開發功能,諸如精靈動畫,音頻處理和視頻播放等。

最低運行環境要求為Android 1.6。



轉載自:http://waineko.blogspot.com/2010/09/8android.html

2011年5月11日 星期三

網路核心程式設計-Week11-Homework

1.在blog 說明 Class InetAddress 的用法,以程式舉例

此類別表示網際網路協議 (IP) 位址。IP 位址是 IP 使用的 32 位或 128 位無符號數字,

它是一種低層級協議,UDP 和 TCP 協議都是在它的基礎上建構的。

InetAddress 的實例包含 IP 位址,還可能包含相應的主機名(取決於它是否用主機名建構或者是否已執行反向主機名解析)。

import java.net.*;
class GetIP {
public static void main(String[] args)
{

try{
InetAddress IP_Address = InetAddress.getByName("www.kimo.com.tw");
System.out.println(IP_Address);
}catch (UnknownHostException e){
System.out.println("找不到 www.kimo.com.tw 位址");
}
}
}
編譯與執行

javac GetIP.java

java GetIP

資料參考:

1.http://www.138vipbbs.com/vipccb/ccb/topic_view.cgi?forum=7&article_id=0107051121211619&publishtime_id=0107051121211619&class=1&new_window=1


2.說明FTP client/server 程式與FTP通訊協定

==============================================================
//Ftp Client
import java.io.*;
import java.net.*;
public class Client13_4 {
int i;
static String iaddr;
static int port;
static String infilename;

public Client13_4() {
try{
Socket socket=new Socket(InetAddress.getByName(iaddr),port);
DataOutputStream outstream = new DataOutputStream(socket.getOutputStream());

FileInputStream fis = new FileInputStream(infilename);
while((i=fis.read()) !=-1)
outstream.writeInt(i);
outstream.writeInt(i);
System.out.println("Data sent to internet successfully!");
socket.close();
}
catch(IOException e){
System.out.println(e.getMessage());
}
}
public static void main(String args[]) {
if (args.length < 3){
System.out.println("USAGE: java Client13_4 [iaddr] [port] [infilename]");
System.exit(1);
}
iaddr = args[0];
port=Integer.parseInt(args[1]);
infilename = args[2];
Client13_4 ClientStart=new Client13_4();
}
}
==============================================================
//FTP server
import java.net.*;
import java.io.*;
public class Server13_4 {
int messagein;
static int port;
static String outfilename;
public Server13_4() {
try{
ServerSocket SS = new ServerSocket(port);
System.out.println("Server is created and waiting Client to connect...");
Socket socket = SS.accept();
System.out.println("Client IP = " +
socket.getInetAddress().getHostAddress());
DataInputStream instream = new DataInputStream(socket.getInputStream());
FileOutputStream fos = new FileOutputStream(outfilename);
while(messagein != -1){
messagein = instream.readInt();
fos.write(messagein);
}
System.out.println("Data written to File successfully!");
}
catch(IOException e){
System.out.println(e.getMessage());
}
}
public static void main(String args[]){
if(args.length < 2){
System.out.println("Usage: java Server13_4 [port] [outfilename]");
System.exit(1);
}
port=Integer.parseInt(args[0]);
outfilename = args[1];
Server13_4 ServerStart=new Server13_4();
}
}
==============================================================


檔案傳輸協定英文File Transfer Protocol,簡稱為FTP)是用於在網路上進行檔案傳輸的一套標準協議。它屬於網路傳輸協定應用層

FTP是一個8位元的用戶端-伺服器協定,能操作任何型別的檔案而不需要進一步處理,就像MIME或Unicode一樣。但是,FTP有著極高的延時,這意味著,從開始請求到第一次接收需求資料之間的時間,會非常長;並且不時的必須執行一些冗長的登陸行程。


3. 何為 url, 什麼是 Domain Name System

統一資源定位符(URL,英語 Uniform / Universal Resource Locator 的縮寫)也被稱為網頁位址,是網際網路上標準的資源的位址(Address)。它最初是由蒂姆·伯納斯-李發明用來作為全球資訊網的位址的。現在它已經被全球資訊網協會編製為網際網路標準RFC1738了。

網域名稱系統英語Domain Name System,縮寫DNS)是網際網路的一項核心服務,它作為可以將域名IP位址相互對映的一個分散式資料庫,能夠使人更方便的存取網際網路,而不用去記住能夠被機器直接讀取的IP數串。

DNS 使用TCPUDP53。


資料來源:維基百科

4. window 之 localhost 如何設定

建議修改C:\windows\system32\drivers\etc\hosts 檔案,加上自訂的伺服器名稱跟127.0.0.1的對應,這樣你在網址列輸入自訂的伺服器名稱時,它就會到127.0.0.1,也就是localhost,然後apache的虛擬伺服器就會接手處理。

利用這個方法,就可以在本地模擬多個網址。

舉例來說,hosts裡面有一條localhost1 127.0.0.1,然後虛擬伺服器設定裡面的ServerName有localhost1,打在瀏覽器網址列打http://localhost1,應該就可以連到你設定的虛擬伺服器。