A. 請解釋一下這些計算機專業是什麼意思。
B. 動漫遊戲設計主要是學什麼的,我想去了解一下
主要學3DMAX、MAYA、AE等高端三維動畫製作、影視合成軟體操作技能,從事三維動畫設計及影視後期合成工作的高技能人才。
畢業生可在動畫公司、影視傳媒公司、企劃公司、圖文設計公司、出版行業、電視台及企業宣傳策劃部門擔任相關設計工作;還可以在動畫,影視和建築行業擔任動畫設計與製作及三維設計人員,面向多領域、多行業進行動畫、視頻及多媒體產品的開發工作。
C. 使用布局管理器與線程概念,實現動畫效果。
動態的動畫介面很難創建,但是核心動畫通過提供如下介面使這些創建起來變得更加簡單:
簡單易用的高性能混合編程模型。
簡單易用的高性能混合編程模型。
類似視圖一樣,你可以通過使用圖層來創建復雜的介面。
輕量級的數據結構,它可以同時顯示並讓上百個圖層產生動畫效果。
一套簡單的動畫介面,可以讓你的動畫運行在獨立的線程裡面,並可以獨立於主線程之外。
一旦動畫配置完成並啟動,核心動畫完全控制並獨立完成相應的動畫幀。
提高應用性能。應用程序只當發生改變的時候才重繪內容。再小的應用程序也需要改變和提供布局服務層。核心動畫還消除了在動畫的幀速率上運行的應用程序代碼。
靈活的布局管理模型。包括允許圖層相對同級圖層的關系來設置相應屬性的位置和大小。
使用核心動畫,開發人員可以為他們的應用創建動態用戶界面,而無需使用低級別的圖形API,如OpenGL來獲取高效的動畫性能。
核心動畫類
核心動畫類有以下分類:
提供顯示內容的圖層類。
動畫和計時類。
布局和約束類。
事務類,在原子更新的時候組合圖層類。
核心動畫的基礎類包含在Quartz核心框架(Quartz Core framework)裡面,雖然它的其他圖層類在其他框架裡面定義。下圖顯示了核心動畫的類層次結構。
圖層類
圖層類是核心動畫的核心基礎,它提供了一套抽象的概念(假如你使用過NSView或者UIView的話,你一定會對它很熟悉)。CALayer是整個圖層類的基礎,它是所有核心動畫圖層類的父類。
和視圖類(NSView或UIView)一樣,CALayer有自己的父圖層類,同時也擁有自己子圖層類的集合,它們構成了一個圖層樹的層次結構。圖層繪制類似視圖一樣自底向上,並指定其幾何形狀相對他們superlayer,創建一個相對的局部坐標系。然而圖層類通過合並變換矩陣允許你旋轉、偏移、拉伸對應的圖層內容。具體內容將會在後面圖層(Layer)的幾何和變換部分介紹。
CALayer從Application Kit和Cocoa Touch的視圖類分離出來,因為沒有必要為了顯示內容而繼承CALayer類。因為CALayer類的內容顯示可以通過以下方法提供:
可以直接或者委託的方式把圖層的內容屬性設置為Core Graphics image。
提供直接繪制到一個Core Graphics image上下文委託。
設置所有圖層所具有的可視化樣式屬性,比如背景顏色、不透明屬性、蒙版等。Mac OS X應用同樣可以通過核心圖像濾鏡來訪問它的可視化樣式屬性。
繼承CALayer並通過封裝方法實現以上任何技術。提供圖層內容描述了提供內容層可用方法。可視化樣式樣式屬性和它們的順序將會在圖層樣式屬性部分詳細介紹。
除了CALayer類,核心動畫類同時提供了顯示其他內容的類。這些類在 Mac OS X和 iOS 上有細微的差別,以下類在 Mac OS X 和 iOS 上都可用:
CAScrollLayer是CALayer的子類,簡化顯示圖層的一部分內容。CAScrollLayer對象的滾動區域的范圍在它的子圖層裡面定義。CAScrollLaye不提供鍵盤或滑鼠事件處理,也不提供可見的滾動條。
CATextLayer可以方便的從字元串或字元串的內容創建一個圖層類的內容。
CATiledLayer允許遞增的顯示大而復雜的圖片。
CALayer同時管理與層關聯的動畫和行為。圖層接受層樹的插入和刪除層動作,修改層的屬性,或者明確的開發請求。這些行為通常會導致動畫發生。見動畫和圖層操作的更多信息。
動畫和計時類
圖層的很多可視化屬性是可以隱式動畫的。通過簡單的改變圖層的可動畫顯示的屬性,可以讓圖層現有屬性從當前值動畫漸變到新的屬性值。例如設置圖層的hidden屬性為YES將會觸發動畫使層逐漸淡出。大多數動畫屬性擁有自己關聯的默認動畫, 你可以輕松地定製和替換。我們將會在後面動畫屬性部分列出一個完整的動畫屬 性列表和它們相應的默認動畫。動畫的屬性也可以顯式動畫。要顯式動畫的屬性,你需要創建核心動畫類的一個實例,並指定所需的視覺效果。顯式動畫不會改變該屬性的值,它只是用於動畫顯示。
核心動畫的動畫類使用基本的動畫和關鍵幀動畫把圖層的內容和選取的屬性動畫的顯示出來。所有核心動畫的動畫類都是從CAAnimation類繼承而來。CAAnimation實現了CAMediaTiming協議,提供了動畫的持續時間、速度、和重復計數。CAAnimation也實現了CAAction協議。該協議為圖層觸發一個動畫動作提供了提供標准化響應。
動畫類同時定義了一個使用貝塞爾曲線來描述動畫改變的時間函數。例如,一個勻速時間函數(linear timing function)在動畫的整個生命周期裡面一直保持速度不變,,而漸緩時間函數(ease-out timing function)則在動畫接近其生命周期的時候減慢速度。
核心動畫額外提供了一系列抽象的和細化的動畫類,比如:CATransition提供了一個圖層變化的過渡效果,它能影響圖層的整個內容。 動畫進行的時候淡入淡出(fade)、推(push)、顯露(reveal)圖層的內容。這些過渡效果可以擴展到你自己定製的Core Image濾鏡。
CAAnimationGroup允許一系列動畫效果組合在一起,並行顯示動畫。
CAPropertyAnimation是一個抽象的子類,它支持動畫的顯示圖層的關鍵路徑中指定的屬性。
CABasicAnimation簡單的為圖層的屬性提供修改。
CAKeyframeAnimation支持關鍵幀動畫,你可以指定的圖層屬性的關鍵路徑動畫,包括動畫的每個階段的價值,以及關鍵幀時間和計時功能的一系列值。在動畫運行時,每個值被特定的插入值替代。
核心動畫和Cocoa Animation同時使用這些動畫類。使用動畫描述,是因為這些類涉及到核心動畫,這些將會在Animation Types and Timing Programming Guide有較深入的討論。
布局管理器類
Application Kit的視圖類相對於superlayer提供了經典的struts and springs定位模型。圖層類兼容這個模型,同時Mac OS X上面的核心動畫提供了一套更加靈活的布局管理機制,它允許開發者自己修改布局管理器。核心動畫的CAConstraint類 是一個布局管理器,它可以指定子圖層類限制於你指定的約束集合。每個約束 (CAConstraint類的實例封裝)描述層的幾何屬性(左、右、頂部或底部的邊緣或水平或垂直中心)的關系,關繫到其同級之一的幾何屬性層或superlayer。
通用的布局管理器和約束性布局管理器將會在布局核心動畫的圖層部分討論。
事務管理類
圖層的動畫屬性的每一個修改必然是事務的一個部分。CATransaction是核心動畫裡面負責協調多個動畫原子更新顯示操作。事務支持嵌套使用。
核心動畫支持兩種事務:隱式事務和顯式事務。在圖層的動畫屬性被一個線程修改,同時該線程下次迭代的時候自動提交該修改的時候隱式事務自動創建。顯式事務發生在程序在修改動畫屬性之前給發CATransaction送了一個開始消息,在動畫屬性修改之後提交該消息。
事務管理將會在後面的事務部分詳細介紹。
D. uiviewanimation 在哪個線程
frame屬性:可以使用該屬性改變尺寸和位置
bounds:改變尺寸
center:改變視圖的位置
alpha:改變視圖的透明度
backgroundColor:改變視圖的背景
contentStretch:改變視圖內容如何拉伸
IOS封裝了Core Animation來是實現動畫,Core Animation的最大好處是可以幫助Mac或者iPhone的開發者減少代碼量。因為如果你想用Core Image或者Open GL實現界面的動畫特效,其實也是可以的,主要是非常麻煩。而用Core Animation可以極大簡化開發難度和減少代碼量,IOS提供的核心動畫編程介面,可以讓編程人員以非常簡單的方式實現炫目流暢的動畫效果
翻轉的動畫
//開始動畫
[UIView beginAnimations:@「wap view」 context:nil];
//設置時常
[UIView setAnimationDuration:1];
//設置動畫淡入淡出
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
//設置代理
[UIView setAnimationDelegate:self];
//設置翻轉方向
[UIView setAnimationTransition: forView:manImageView cache:YES];
//動畫結束
[UIView commitAnimations];
旋轉動畫
創建一個CGAffineTransform transform對象 CGAffineTransform transform;
//設置旋轉度數
transform = CGAffineTransformRotate(manImageView.transform,M_PI/6.0);
//動畫開始
[UIView beginAnimations:@「rotate」 context:nil ];
//動畫時常
[UIView setAnimationDuration:2];
//添加代理
[UIView setAnimationDelegate:self];
//獲取transform的值
[manImageView setTransform:transform];
//關閉動畫
[UIView commitAnimations];
偏移動畫
[UIView beginAnimations:@「move」 context:nil];
[UIView setAnimationDuration:2];
[UIView setAnimationDelegate:self]; //改變它的frame的x,y的值 manImageView.frame=CGRectMake(100,100, 120,100);
[UIView commitAnimations];
翻頁動畫
[UIView beginAnimations:@「curlUp」 context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];//指定動畫曲線類型,該枚舉是默認的,線性的是勻速的
//設置動畫時常 [UIView setAnimationDuration:1];
[UIView setAnimationDelegate:self]; //設置翻頁的方向
[UIView setAnimationTransition: forView:manImageView cache:YES];
//關閉動畫
[UIView commitAnimations];
縮放動畫
CGAffineTransform transform;
transform = CGAffineTransformScale(manImageView.transform,1.2,1.2);
[UIView beginAnimations:@「scale」 context:nil];
[UIView setAnimationDuration:2];
[UIView setAnimationDelegate:self];
[manImageView setTransform:transform];
[UIView commitAnimations];
取反的動畫效果是根據當前的動畫取他的相反的動畫
CGAffineTransform transform;
transform=CGAffineTransformInvert(manImageView.transform);
[UIView beginAnimations:@「Invert」 context:nil];
[UIView setAnimationDuration:2];//動畫時常
[UIView setAnimationDelegate:self];
[manImageView setTransform:transform];//獲取改變後的view的transform [UIView commitAnimations];//關閉動畫
E. 怎樣實現UIView的淡入淡出特效
UIView類的很多屬性都設計為動畫,動畫的屬性是指當屬性從一個值變成另外一個值時可以支持動畫,同時通知UIKit需要執行什麼樣類型的動畫,UIView對象支持動畫的屬性有如下幾個:
frame屬性:可以使用該屬性改變尺寸和位置
bounds:改變尺寸
center:改變視圖的位置
alpha:改變視圖的透明度
backgroundColor:改變視圖的背景
contentStretch:改變視圖內容如何拉伸
IOS封裝了Core Animation來是實現動畫,Core Animation的最大好處是可以幫助Mac或者iPhone的開發者減少代碼量。因為如果你想用Core Image或者Open GL實現界面的動畫特效,其實也是可以的,主要是非常麻煩。而用Core Animation可以極大簡化開發難度和減少代碼量,IOS提供的核心動畫編程介面,可以讓編程人員以非常簡單的方式實現炫目流暢的動畫效果
翻轉的動畫
//開始動畫
[UIView beginAnimations:@"wap view" context:nil];
//設置時常
[UIView setAnimationDuration:1];
//設置動畫淡入淡出
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
//設置代理
[UIView setAnimationDelegate:self];
//設置翻轉方向
[UIView setAnimationTransition: forView:manImageView cache:YES];
//動畫結束
[UIView commitAnimations];
旋轉動畫
創建一個CGAffineTransform transform對象 CGAffineTransform transform;
//設置旋轉度數
transform = CGAffineTransformRotate(manImageView.transform,M_PI/6.0);
//動畫開始
[UIView beginAnimations:@"rotate" context:nil ];
//動畫時常
[UIView setAnimationDuration:2];
//添加代理
[UIView setAnimationDelegate:self];
//獲取transform的值
[manImageView setTransform:transform];
//關閉動畫
[UIView commitAnimations];
偏移動畫
[UIView beginAnimations:@"move" context:nil];
[UIView setAnimationDuration:2];
[UIView setAnimationDelegate:self]; //改變它的frame的x,y的值 manImageView.frame=CGRectMake(100,100, 120,100);
[UIView commitAnimations];
翻頁動畫
[UIView beginAnimations:@"curlUp" context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];//指定動畫曲線類型,該枚舉是默認的,線性的是勻速的
//設置動畫時常 [UIView setAnimationDuration:1];
[UIView setAnimationDelegate:self]; //設置翻頁的方向
[UIView setAnimationTransition: forView:manImageView cache:YES];
//關閉動畫
[UIView commitAnimations];
縮放動畫
CGAffineTransform transform;
transform = CGAffineTransformScale(manImageView.transform,1.2,1.2);
[UIView beginAnimations:@"scale" context:nil];
[UIView setAnimationDuration:2];
[UIView setAnimationDelegate:self];
[manImageView setTransform:transform];
[UIView commitAnimations];
取反的動畫效果是根據當前的動畫取他的相反的動畫
CGAffineTransform transform;
transform=CGAffineTransformInvert(manImageView.transform);
[UIView beginAnimations:@"Invert" context:nil];
[UIView setAnimationDuration:2];//動畫時常
[UIView setAnimationDelegate:self];
[manImageView setTransform:transform];//獲取改變後的view的transform [UIView commitAnimations];//關閉動畫
F. Java游戲高級編程的內容簡介
在第1章「配置開發環境」中,我向讀者介紹了將要在整本書中使用的代碼庫。描述了這個庫的設計,並給出了編譯示例游戲的說明。可能會在游戲開發環境中使用的一些附加代碼、圖形和音頻文件,也在本章確定了下來,還介紹了軟體開發的一些流行工具。以模板的形式給出了一個演示Java游戲編程基礎知識的游戲示例。
在第2章「部署框架」中,我們關注的重點是在可以安裝在多種不同類型的平台上的一個框架中部署游戲。在動畫線程管理技術的相關內容中,介紹了一個被廣泛使用的框架介面以及applet生命周期。在對適合於游戲的不同發布而進行不同部署的選項進行了一個簡要的回顧以後,給出了允許游戲部署在不同開發環境中而不需要任何修改的一個抽象層的源代碼示例。
在第3章「Swing動畫」中,介紹了一個基於Swing的動畫庫,這個動畫庫會在整本書中使用。這一章主要考慮的問題是動畫的性能和靈活性。在介紹核心動畫引擎類的源代碼時簡單介紹了優化權衡。
在第4章「動畫庫」中,介紹了通用動畫任務的一個類集合。這些類提供了很多功能,例如場景管理和Sprite實現。它們也用來介紹怎樣開發與核心動畫引擎類互操作的游戲特定代碼。
在第5章「高級圖形技術」中,介紹了高級圖形技術,包括硬體加速圖形、多緩沖和全屏獨占模式。給出了使這些技術的使用變得更加方便的可重用類和使用這些可重用類的示例游戲。對其中的每一個技術,都介紹了關於它們使用方法的一些限制。
在第6章「持久數據」中,對在各種部署框架中載入和保存游戲數據的機制進行了對比。在這個過程中還介紹了可以用於大多數游戲編程的可重用數據持久性的類庫。對更加高級的持久性需求的其他選擇也進行了考慮。
在第7章「游戲體系結構」中,介紹了適合於Java游戲開發的面向對象的軟體體系結構的優點。使用這種體系結構的一個示例游戲是作為新游戲開發模板進行介紹的。本章還簡單介紹了一下數據驅動的設計。
在第8章「A*演算法」中,介紹了現在在游戲行業中最流行和最常用的一個人工智慧(AI)演算法的實現。本章還介紹了使用A*演算法繞過障礙物尋找路徑的示例。
在第9章「HTTP隧道技術」中,介紹一個可以在大部分Java游戲部署環境里常見的安全限制以內進行操作的一個聯網庫。本章還給出了一個示例,在這個示例中,數據在伺服器和客戶機之間進行傳遞。
在第10章「HTTP輪詢機制」中,將聯網庫擴展以支持在線多玩家游戲。使用輪詢來同步客戶機和伺服器上的游戲狀態。在由單玩家游戲向多玩家聯網游戲的轉換中,介紹了我所推薦的軟體體系結構的靈活性。
在第11章「HTTP Pulling機制」中,事件驅動的消息是作為輪詢的另一個選擇而推薦使用的。使用在前面兩章中介紹的這些類,演示了這是怎樣在無符號applet的安全限制以內實現的。使用這些技術進行進一步開發的一些建議已經超出了本書的范圍,這里只進行簡單的介紹。
本書合作站點
本書應該保持其「高級性」。為此,我專門為這本書建立了一個Web站點。從這個站點上,您能夠訂閱與本書相關的電子郵件列表,包括補充的指南和勘誤表。您將能夠測試和運行本書所介紹的示例游戲,並下載開放源代碼庫和用來創建這些游戲的公共領域的多媒體文件。針對老師,我已經在Creative Commons Attribution License下發布了我在講授游戲開發課程中使用的課程提綱、幻燈片和布置給學生的作業。我也提供了我的聯系方式,這樣您可以將您的建議和意見反饋給我,以便我以後進行更正。
在開始閱讀第1章以前,請先訪問網站,並訂閱Advanced Java Game Programming通知郵件列表。
IV
Java游戲高級編程
G. 動漫遊戲設計都有什麼課程啊
動漫設計與製作專業核心課程:
美術基礎模塊:設計素描、設計色彩、速寫、透視
軟體應用模塊:Photoshop、Illustrator、Flash、3DMAX、Premiere、AfterEffect
專業基礎模塊:原畫設計、動畫劇本創作、視聽語言、動畫編程基礎、角色、場景繪制,主要學習動漫的角色、場景的手繪和CG繪制技巧,從而能夠掌握良好的動漫繪制功底。
專業核心模塊:Flash二維動畫設計與製作、3dmax動畫設計與製作、影視後期的編輯與合成,從人物設定、建模、動畫、材質等模塊入手。
H. 動漫設計和製作專業主要學什麼
你可以先去【繪學霸】網站找「動漫設計」板塊的【免費】視頻教程-【點擊進入】完整入門到精通視頻教程列表: www.huixueba.net/web/AppWebClient/AllCourseAndResourcePage?type=1&tagid=304&zdhhr-3y1r-416395155
想要系統的學習可以考慮報一個網路直播課,推薦CGWANG的網路課。老師講得細,上完還可以回看,還有同類型錄播課可以免費學(贈送終身VIP)。
自製能力相對較弱的話,建議還是去好點的培訓機構,實力和規模在國內排名前幾的大機構,推薦行業龍頭:王氏教育。
王氏教育全國直營校區面授課程試聽【復制後面鏈接在瀏覽器也可打開】: www.huixueba.com.cn/school/manhua?type=3&zdhhr-3y1r-416395155
在「動漫設計」領域的培訓機構里,【王氏教育】是國內的老大,且沒有加盟分校,都是總部直營的連鎖校區。跟很多其它同類型大機構不一樣的是:王氏教育每個校區都是實體面授,老師是手把手教,而且有專門的班主任從早盯到晚,爆肝式的學習模式,提升會很快,特別適合基礎差的學生。
大家可以先把【繪學霸】APP下載到自己手機,方便碎片時間學習——繪學霸APP下載: www.huixueba.com.cn/Scripts/download.html
I. 簡述Flash動畫的原理
原始動畫原理,你可能看到過幻燈片吧,就是這個原理,就是把每一張畫按每秒24幀的速度放出,就能看到連續的動畫.
也就是FLASH中的逐幀動畫.
同樣電影也是這樣的原理.
19世紀20年代,英國科學家發現了人眼的「視覺暫留」現象(物體被移動後其形象在人眼視網膜上還可有約1秒的停留),揭示了連續分解的動作在快速閃現時產生活動影像的原理。
說到Flash,大家一定都很熟悉,它是macromedia公司推出的基於矢量圖形的流媒體動畫軟體,現在Flash的應用方向已經是越來越廣泛,從網路,媒體到手機彩信,它已經逐漸進入了我們的生活。學習Flash,不光可以滿足你製作專業級動畫的慾望,也可以對個人的發展起到很大的作用。在網頁三劍客中,Flash可以說是一個非常有個性,非常獨立但又和網路結合很緊密的流媒體動畫製作軟體。簡單的操作就可以製作動感十足的動畫,支持多種格式的多媒體文件置入,強大的交互功能,都是我們不可不學Flash的理由。
Flash中的動畫製作方式總的分為兩種,一種是類似於Fireworks中的幀動畫的製作,還有就是補間動畫。使用幀動畫可以製作一些真實的,專業的動畫效果。使用補間動畫的製作方式則可以輕松創建平滑過渡的動畫效果。到底哪種方式才是我們最終的選擇?
知識點:Flash動畫原理,幀動畫的製作,補間動畫的製作。Flash動畫原理,幀動畫的製作,補間動畫的製作。如果你知道動畫片是怎麼回事就行了,FLASH就是利用動畫片的原理.
但他把每個畫面分成幀,將這些幀也就是畫面快速的播放出來就成的動畫.
但FLASH動畫由於是高壓縮的,所以文件很小,即被現在廣泛使用.它還可以通過編程來控制動畫的播放,使得動畫的文件變小,切更容易的控制動畫.
這就是FLASH動
J. 有什麼關於介紹java advanced image的書
介紹你看這本書【Java游戲高級編程】網上業有下載!
Java游戲高級編程——游戲開發經典叢書
圖書作者: [美]David Wallace Croft 著 彭暉 譯
出版社: 清華大學出版社
ISBN: 7302110832
出版時間: 2005-8第1版
印刷時間: 2005-8第1次印刷
開 本: 16
價 格(元): 58
本書通過豐富的示例游戲,詳細講述了Java游戲高級編程方面的知識。包括部署框架、Swing動畫、動畫庫、高級圖形技術、持久性機制、游戲體系結構以及一些通信和同步技術等。
本書針對那些具有一定編程經驗、渴望將自己獨特的游戲設計思想變成部署實體的Java高級開發人員。
前 言
花代價所換來的一點才智,抵過別人傳授的數倍不止。
—— 本傑明?富蘭克林
本書針對的是那些想使用最新的高性能技術,創建面向Web和桌面的復雜2D計算機游戲的Java程序員。本書循序漸進地介紹了一個可重用的動畫庫,每一章都依賴於前面的一些章節。在需要說明這些主題的地方,都詳細地介紹了每一個新庫類的源代碼,並且給出了實際使用這些類的示例游戲。免費許可使您可以直接修改和調整庫代碼和示例游戲,開發自己的游戲程序。
目的
本書也可取名為《現代Java游戲編程》。在以前出版的Java游戲編程的書籍中介紹的很多技術和主題,已被Java編程語言和它的高級類庫所淘汰。這包括像線程管理、事件管理、圖形用戶界面、網路通信、持久性和部署等方面。在本書中,我對這些變更作了適當的注釋,並簡要地對這些技術作了一些對比。
雖然通過將每一幀中需要重繪像素的數量最小化就可以在Java中創建高速的動畫,但是在最近發布的Java編程語言的1.4版中引入的新類,又提供了通過可移植方式直接訪問視頻硬體的方法。正如在本書中介紹的一樣,即使每一幀中需要更新的像素很多,也可以實現高速的幀速率。在這里介紹了一個示常式序,用來演示在真彩色高解析度模式中,成功地將全屏動畫和顯示器75Hz的刷新率同步。
盡管本書最初的設計是面向游戲,但是讀者應該知道這里介紹的技術也可以用在其他應用方面,包括廣告和模擬。嵌在Web頁面中的動畫調幅廣告applet會立即閃現在您的大腦中。調幅廣告可以使用強大的通用編程語言(例如Java)編寫的這個事實,充分發掘它們超越動畫的輔助功能的潛能,包括活動數據連接。在模擬領域,學生和科學家都可以從可視化上獲益。當這些模型使用Java表示的時候,用戶就可以與它們進行交互、更改參數並觀察新的結果。
讀者對象
本書專門針對具有豐富經驗、正准備和渴望將他們獨特的游戲設計思想轉換為部署實體的Java開發人員。對這些讀者而言,從想了解有趣的游戲特定邏輯以來,一直在學習Java編程語言和實現基本的基礎結構代碼。
同時,這些Java高級開發人員希望詳細地了解可能會影響游戲性能的可重用庫中的優化選項。在介紹游戲庫和本書示例游戲中的這些源代碼時,我假定讀者已經掌握了一些基本的主題,例如Java編程語言、面向對象的編程(Object Oriented Programming,OOP)技術、圖形用戶界面(Graphical User Interface,GUI)組件庫,以及一些設計模式等。
范圍
本書簡要(沒有深入地)介紹了那些雖然必需但又不是專門用於Java游戲編程的技術。這包括通用的開放源代碼開發工具和通用的標准以及應用編程介面(API),這些都是很多經驗豐富的Java游戲程序員已經使用過的技術。在書中,還提供了在這些方面需要進一步閱讀的參考書目。
本書介紹的很多可重用庫都利用了在核心Java平台里可用的最新API、當前的J2SE 1.4版。本書沒有介紹那些過時的API,例如AWT(Abstract Window Toolkit)。相反,深入地研究了應用現代API的具體技術,包括Java游戲編程用於動畫設計的Swing。
除了Java 2D和Image I/O API以外,Java Media API中絕大部分API都沒有在本書中介紹,因為我考慮到它們在游戲開發中會有一些限制。在游戲中使用Java 3D、JMF(Java Media Framework)或者Java Speech API,就強制玩家下載安裝一個可選包和它的本地代碼實現。我相信這種附加的步驟將會使很多潛在的玩家退縮,尤其是那些遇到安裝問題和下載延遲問題的玩家。盡管已經對J2SE內核庫的一部分進行了安裝,但是Java Sound API仍然需要一個soundbank文件,這個文件對有些操作系統而言是默認包含在Java運行庫環境(JRE)發布中的,而對Windows而言則不是。Java共享數據工具包(Java Shared Data Toolkit,JSDT)API,盡管也可以在網路游戲中使用,但是它們好像已經被廢止了。我在游戲編程里,還沒有發現確實需要使用Java高級圖像(Java Advanced Imaging,JAI)的地方。
本書並沒有迴避將Java與平台專用代碼混合的Java本地介面(JNI)API的使用,但是也不鼓勵這樣使用。本書中給出的所有代碼都是用純粹、可移植的Java語言編寫的,它們能夠在所有安裝有Java虛擬機的平台上運行。作為一個開發人員,我發現不使用定製的本地庫也可以實現高性能。作為一個玩家,我更加喜歡用純Java編寫的游戲,因為我不必因為安全風險而煩惱,並且我知道游戲將會運行在我喜歡的平台上,而不管這是個什麼平台。
本書沒有介紹使用Java 2 Micro Edition(J2ME)平台進行Java游戲開發。我希望像摩爾定律中描述的那樣,硬體性能的快速發展能使J2ME很快過時。如今的手持PDA使用的微處理器的性能已經與3年以前使用的最好計算機的處理器性能一樣強大了。現在在PDA上安裝J2SE和運行Swing應用程序已經成為可能。如果在近幾年內看到J2EE運行在手錶上,我將不會感到驚奇。
在學習後面的關於多玩家聯網模式的相關章節時,確實需要讀者具有一些J2EE的知識。然而,這也限制使用Servlet API進行開發。更為復雜的J2EE API(例如Enterprise Java Beans(EJBs))的使用方法,本書並沒有進行介紹。所有示例的網路游戲都會運行在一個簡單的servlet容器以內,並且也不需要安裝一個完全的應用伺服器。
內容簡介
在第1章「配置開發環境」中,我向讀者介紹了將要在整本書中使用的代碼庫。描述了這個庫的設計,並給出了編譯示例游戲的說明。可能會在游戲開發環境中使用的一些附加代碼、圖形和音頻文件,也在本章確定了下來,還介紹了軟體開發的一些流行工具。以模板的形式給出了一個演示Java游戲編程基礎知識的游戲示例。
在第2章「部署框架」中,我們關注的重點是在可以安裝在多種不同類型的平台上的一個框架中部署游戲。在動畫線程管理技術的相關內容中,介紹了一個被廣泛使用的框架介面以及applet生命周期。在對適合於游戲的不同發布而進行不同部署的選項進行了一個簡要的回顧以後,給出了允許游戲部署在不同開發環境中而不需要任何修改的一個抽象層的源代碼示例。
在第3章「Swing動畫」中,介紹了一個基於Swing的動畫庫,這個動畫庫會在整本書中使用。這一章主要考慮的問題是動畫的性能和靈活性。在介紹核心動畫引擎類的源代碼時簡單介紹了優化權衡。
在第4章「動畫庫」中,介紹了通用動畫任務的一個類集合。這些類提供了很多功能,例如場景管理和Sprite實現。它們也用來介紹怎樣開發與核心動畫引擎類互操作的游戲特定代碼。
在第5章「高級圖形技術」中,介紹了高級圖形技術,包括硬體加速圖形、多緩沖和全屏獨占模式。給出了使這些技術的使用變得更加方便的可重用類和使用這些可重用類的示例游戲。對其中的每一個技術,都介紹了關於它們使用方法的一些限制。
在第6章「持久數據」中,對在各種部署框架中載入和保存游戲數據的機制進行了對比。在這個過程中還介紹了可以用於大多數游戲編程的可重用數據持久性的類庫。對更加高級的持久性需求的其他選擇也進行了考慮。
在第7章「游戲體系結構」中,介紹了適合於Java游戲開發的面向對象的軟體體系結構的優點。使用這種體系結構的一個示例游戲是作為新游戲開發模板進行介紹的。本章還簡單介紹了一下數據驅動的設計。
在第8章「A*演算法」中,介紹了現在在游戲行業中最流行和最常用的一個人工智慧(AI)演算法的實現。本章還介紹了使用A*演算法繞過障礙物尋找路徑的示例。
在第9章「HTTP隧道技術」中,介紹一個可以在大部分Java游戲部署環境里常見的安全限制以內進行操作的一個聯網庫。本章還給出了一個示例,在這個示例中,數據在伺服器和客戶機之間進行傳遞。
在第10章「HTTP輪詢機制」中,將聯網庫擴展以支持在線多玩家游戲。使用輪詢來同步客戶機和伺服器上的游戲狀態。在由單玩家游戲向多玩家聯網游戲的轉換中,介紹了我所推薦的軟體體系結構的靈活性。
在第11章「HTTP Pulling機制」中,事件驅動的消息是作為輪詢的另一個選擇而推薦使用的。使用在前面兩章中介紹的這些類,演示了這是怎樣在無符號applet的安全限制以內實現的。使用這些技術進行進一步開發的一些建議已經超出了本書的范圍,這里只進行簡單的介紹。