FNA環境搭建
簡介
FNA是微軟的XNA的重新實現,其與MonoGame較為類似,基本程式碼可通用.但是FNA更多的精確地重新實現,所以可能與XNA相容,但MonoGame則有所擴充,並非100%相容.
相比MonoGame,FNA資料較少(中文則是更少了),這篇文章主要介紹是入門開發的攔路虎:環境搭建.
為什麼選擇XNA
如果你喜歡C#的介面、封裝、抽象,不喜歡龐大的IDE,不喜歡龐大的引擎有一堆永遠贅餘的功能,如果你喜歡傳統寫程式碼方式自己控制流程而不是在引擎中寫指令碼來開發遊戲,那麼你可能會喜歡這個遊戲框架。
我最大的感受是它在大包大攬的引擎和底層的API中達到一種平衡.你擁有很大程度的控制權,並且不必與底層系統糾纏。
下載
在官方Github可以下載,這裡下載FNA-2008,不要下載FNA-2009(新版本用到了FNA3D渲染,對應DLL需要自己編譯我們暫時也用不到),下載並解壓
同時下載一些依賴的本地庫,比如SDL2,FAudio等等,目前下載地址在這裡:http://fna.flibitijibibo.com/archive/fnalibs.tar.bz2 ,或者在官網的這裡下載:
HelloWorld
準備好之後可以在Visual Studio 中新建一個控制檯工程:
然後選擇你的專案名字(比如HelloFNA),等待工程建立完成,再選擇解決方案->新增->現有專案
選擇之前解壓的FNA.csproj工程,之後的專案結構如下
之後在HelloFNA專案中引用FNA專案:
選擇FNA專案點確定
然後再HelloFNA的專案下新建一個類:
再取個名字,比如AwasomeGame,然後這個類繼承自Microsoft.Xna.Framework.Game:
using Microsoft.Xna.Framework;
namespace HelloFNA
{
class AwasomeGame : Game
{
private GraphicsDeviceManager graphicsMgr;
public AwasomeGame()
{
graphicsMgr = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}
}
}
之後在Program.cs中呼叫如下程式碼:
namespace HelloFNA
{
class Program
{
static void Main(string[] args)
{
var game = new AwasomeGame();
game.Run();
}
}
}
然後按下F5執行,不出意料你會遇到如下錯誤
該提示為沒有找到本地庫(dll檔案),所以需要在專案的輸出檔案(HelloFNA/bin/Debug)中把之前下載的本地庫拷貝進去,選擇x86資料夾下的全部dll檔案(不要拷貝資料夾,只拷貝檔案),拷貝到Debug資料夾
此時再執行就能看到視窗了!
載入和顯示圖片
只顯示一個視窗很無聊,下面的程式碼將會顯示一張圖片.假設我們要顯示這麼一張圖片(來源自:https://kenney.nl/assets/animal-pac):
我們先在專案中新建一個Content資料夾,並把這個圖片放進
然後在Visual Studio中當前專案中新建資料夾->新增項->選擇全部檔案->選擇圖片,這裡注意檔案格式要選擇所有檔案
下面是最重要也是一開始最容易忽略的一點,我們要在工程中設定圖片屬性為複製到輸出目錄,點選圖片右鍵選擇屬性
在XNA中的Game類中有幾個方法需要注意
- LoadContent:載入資源
- Initialize:初始化
- Update:更新邏輯
- Draw:遊戲的繪製
所以我們想要顯示圖片,第一件事就是載入圖片,然後再Draw方法裡面繪製出來即可。這裡繪製圖片需要有一個SpriteBatch物件,所以接著在AwasomeGame.cs中宣告Texture2D物件和SpriteBatch物件
private Texture2D texture2D;
private SpriteBatch spriteBatch;
之後所需要的的就是載入,初始化和繪製的邏輯
protected override void Initialize()
{
base.Initialize();
spriteBatch = new SpriteBatch(GraphicsDevice);
}
protected override void LoadContent()
{
base.LoadContent();
texture2D = Content.Load<Texture2D>("penguin");
}
protected override void Draw(GameTime gameTime)
{
base.Draw(gameTime);
spriteBatch.Begin();
Vector2 screenPos = new Vector2(0, 0);
spriteBatch.Draw(texture2D, screenPos, Color.White);
spriteBatch.End();
}
這個時候按下F5執行即可看到我們的圖片顯示出來了。
如果你對MonoGame有所瞭解可能會了解MGCB軟體,使用這個軟體可以將資源匯出給MonoGame使用,同時FNA也可以使用。一般比較簡單的資源是不需要使用這個軟體匯出給FNA使用(一般也不推薦用,感覺多了一個步驟,本來修改匯出就很簡單),只要你遇到比較複雜比如SpriteFont和3d模型時候可能需要,不然一般自己讀取即可。
至此這篇文章的任務就達成了,我們搭建成了FNA的環境,有了這個基礎,你可以繼續看其他XNA/Monogame/FNA書籍教程來學習並繼續探索。
對第三方庫保持謹慎態度
在XNA也有一些框架可供使用,比如NEZ和MonoGameExtend,但是我個人並不推薦在你不熟悉的時候就拿這些框架來用。
我比較喜歡的方式是先看程式碼,覺得合適的再把那一部分過來(有些時候只需要精簡版)。在符合自己需求下用程式碼會比較符合程式碼複用。你會發現這些框架很多互相借鑑。
程式碼複用應該儘量保持程式碼量小而精,一下子加一堆可能永遠也用不上的程式碼也沒什麼用處。
最後,希望本文對你有幫助,也希望你能享受寫程式碼做遊戲的樂趣。
Sadi
2020年9月25日
參考
相關文章
- FNA 環境搭建
- 環境搭建
- windows環境下Django環境搭建WindowsDjango
- react環境搭建React
- LNMP 環境搭建LNMP
- 搭建Java環境Java
- Vagrant 環境搭建
- Flutter環境搭建Flutter
- swoft 環境搭建
- OpenGL 環境搭建
- 搭建gym環境
- 搭建lnmp環境LNMP
- Angular環境搭建Angular
- JDK環境搭建JDK
- keil環境搭建
- Dubbo環境搭建
- mac搭建環境Mac
- Maven 環境搭建Maven
- spark環境搭建Spark
- Hive環境搭建Hive
- centosLAMP環境搭建CentOSSLAMLAMP
- lnmp環境搭建LNMP
- ZooKeeper環境搭建
- lnamp環境搭建
- java 環境 搭建Java
- MAVEN環境搭建Maven
- App環境搭建APP
- gogs環境搭建Go
- Windows環境下的Nginx環境搭建WindowsNginx
- window環境下testlink環境搭建(xammp)
- 以太坊-Win環境下remix環境搭建REM
- 【環境搭建】RocketMQ叢集搭建MQ
- Flutter Engine環境搭建Flutter
- iOS逆向環境搭建iOS
- docker搭建php環境DockerPHP
- Supervisor 環境搭建
- Mac 新環境搭建Mac
- Flutter 環境搭建 For MacFlutterMac