AGK之進一步認識AppGameKit2
1,文章相關
在開始“進一步認識AGK2”(這裡的2是第二個版本的含義)之前,先介紹一下這篇文章的內容和出處。這是篇譯文,原文是 標題為“A Closer Look At AppGameKit 2”,文章的出處會在文末給出。文中通過一些簡單的例子和AGK提供的工具資源入手,來對AGK2進行了概括性的講解。通過閱讀本文可以加深你對AGK2的整體把握,是學習App Game Kit2的一個不錯的開端。另外需要說明,這裡作者使用的可能是非試用版本。
2,原文內容
在今天的“細看AGK2”的文章中我們將好好看一下App Game Kit2這個遊戲引擎。App Game Kit 是一個跨平臺的遊戲引擎,可以使用Mac或Windows環境在Windows、Mac、IOS、Android和Blackberry 裝置上開發遊戲(譯:HTML5)。App Game Kit通常售價99美元,不過如果你在釋出日期(2015年12月7日)左右閱讀本文,它現在可以在
AppGameKit是一個跨平臺,移動友好的2D / 3D遊戲引擎,雖然3D正在開發中。AGK主要使用AGK Script程式設計,AGK Script是一種具有一些C ++風格特徵的BASIC方言。如果BASIC這個詞讓你感覺有些意外,不要擔心,AGK也可以使用C++庫來程式設計。如果C++這個詞還是讓你畏縮,嘿嘿……那麼總是還有AGK Script:)。在本篇教程中我們將快速概覽一下兩者。AppGameKit2是 Kickstarter campaign成功的結果,是之前開發過 Dark Basic 和 3D Gamemaker的
這篇文章也有一個高清的配套視訊,可以點選這裡,(譯:Youtub視訊)或者在文章末尾觀看。
2.1,你好!AGK(Hello AGK)
讓我們直接使用一對程式碼的示例,第一個是AGK Script程式碼,第二個是C++程式碼。
AGK Script 示例
// Project: test // Created: 2015-07-10 // Setup the main Window SetWindowTitle( "My Game Is Awesome!" ) SetWindowSize( 640, 480, 0 ) // set display properties SetVirtualResolution( 640, 480 ) SetOrientationAllowed( 1, 1, 1, 1 ) // Create a Cube 100x100x100 at the Origin box = CreateObjectBox(100,100,100) SetObjectPosition(box,0,0,0) // Add a light to the scene CreateLightDirectional(1,-1,-1,-0.5,255,255,255) // Set the position of the camera and aim it back at the origin SetCameraPosition(1,0,100,-150) SetCameraLookAt(1,0,0,0,0) rotationY# = 0 // Gameloop do // Display the current FPS Print( ScreenFPS() ) // Rotate our Object SetObjectRotation(box,0,rotationY#,0) // Display back buffer Sync() // Update Rotation rotationY# = rotationY# + 1 loop
下面是上述程式碼的執行效果:
C++ 示例
// Includes
#include "template.h"
// Namespace
using namespace AGK;
app App;
void app::Begin(void)
{
agk::SetVirtualResolution (640, 480);
agk::SetClearColor( 0,0,0 );
agk::SetSyncRate(60,0);
agk::SetScissor(0,0,0,0);
// Load a Sprite at index 1
agk::LoadSprite(1,"logo.png");
// Scale the sprite to 25% of it's size
agk::SetSpriteScale(1, 0.25, 0.25);
}
void app::Loop(void)
{
agk::Print(agk::ScreenFPS());
// On gamepad press, spacebar hit, touch or left click enable
physics on our sprite
// And make that sucker bouncy, gravity does the rest
if (agk::GetButtonPressed(1) || agk::GetPointerPressed()){
agk::SetSpritePhysicsOn(1, 2);
agk::SetSpritePhysicsRestitution(1, 0.8);
}
agk::Sync();
}
void app::End (void)
{
}
下面是上述程式碼的執行效果: 此處C++的示例程式碼更多一些。AGK作為一個庫被提供給C++使用。作為開始,這裡有許多你能夠拷貝和作為起點的模板。每個模板都有一個bootstrap 類,其中包含啟動AGK所需要的程式碼。例如,Visual Studio專案為您提供WinMain實現。以下是Windows安裝的當前可用模板(MacOS具有適用於iOS和Mac的XCode專案): 當然,如果您願意,您當然可以建立自己的應用程式並簡單地將AGK用作C ++庫。
2.2,工具集(Tools Included)
(1)AGK IDE 如果你使用AGK Script語言來開發,那麼你大部分開發都將在AGK IDE中完成。AGK IDE是一個Code :: Blocks派生的IDE,具有AGK Script的文字編輯,語法高亮,程式碼完成和除錯支援的功能。 我在使用AGK IDE的過程中沒有遇到任何障礙,大多數的特性在當今的很多IDE中都有,包括程式碼摺疊、查詢/替換、智慧感知(譯)和程式碼補全。 幾乎不存在重構工具,不幸的是也沒有本地幫助(很快我們將討論幫助檔案)。
除錯支援: 但實現是準系統,僅限於斷點,執行/跳出過程( step over/out)並顯示呼叫堆疊。 你可以檢查變數的值,但必須在“變數”區域中手動輸入它們。 無法inspect,新增監視或設定條件斷點。 也許是因為這些功能比較新穎,也許之後會擴展出來。
如果你選擇用C++作為開發語言,則根本無法使用AGK IDE,而是使用自己的C++ IDE(如Microsoft visual studio等),像之前所說的那樣,提供了一些模板。
(2)Placement Editor AGK還附帶了Placement Editor,這是一個相當簡潔的瓦片地圖建立程式。 能夠使用這個工具來放置各種大小的圖塊(tiles),執行一些常用的變換,比如:旋轉、映象、向上向下等,並且它也支援使用網格捕捉技術,通過網格使得佈局更加精準。然而有些互動的需求被忽視了,比如,滾動條僅支援通過箭頭來滾動,而螢幕的平移只能藉助螢幕控制器。此外,必須退出應用程式並將圖形複製到媒體目錄以新增新的圖塊。不幸的是,它還缺少一些嚴格要求的功能,例如定義碰撞體或物理屬性。但它可以快速建立平鋪背景。
(3)AGK Player AppGameKit的另一個很酷的功能是AGK Player,可在移動裝置上使用: 通過在AGK IDE中點選Broadcast ,你可以輕鬆檢視裝置上程式碼的執行效果,而無需像平常那樣捆綁/簽署/部署。 它可以在應用程式商店中下載,但iOS必須使用XCode自行構建和部署。 該工具可在開發過程中快速進行裝置測試,並可節省大量時間。
2.3,一些示例(Samples and Demos)
AppGameKit附帶了大量的AGK Script程式碼示例: 包括一些完整的遊戲: 和一些使用者提供的例子: 下面是示例SpaceShooter 的執行效果:
2.4,文件和幫助
我之前提到過,沒有可用的本地文件,這很不幸。似乎也沒有生成的類庫引用,這也是不幸的。 也就是說,可用的AGK文件實際上相當可靠,並且是我的經驗之談。 它完全線上提供,因此您可以自己檢視。 指令碼語言本身非常簡單,並以參考形式記錄在這裡。 雖然這裡提供了更廣泛的語言介紹和概述。 如前所述,還有數十個例子可供學習。 有一系列指南可用於網路,平臺釋出等特定主題。 與類引用最接近的是Commands documentation,您可以在C ++和BASIC程式碼示例之間切換: AGK還有一個非常活躍的開發者論壇。
2.5,AGK庫(The Library)
當然,我們應該討論AGK中可以使用的功能。 儘管3D功能正在積極開發中,並且某些功能顯然缺失或者正在開發當中(例如動畫3D模型支援),但它非常全面。
以下功能列表直接來自AGK網站。
Write once, deploy technology
Code in BASIC or native (C++)
Device independent
Cross Platform IDE
Develop on Windows or Mac and deploy to Windows / Mac / iOS / Android / Blackberry 10
Broadcast test apps to devices over Wifi
Auto Complete
Function Lists
Code Folding
Export to exe/app/apk/ipa
2D Games Engine
Tweening
Blending modes
Spine Support
Box 2D Physics
Particles
Drawing commands
Text support - fixed and variable width
3D Engine
Primitives
Positioning
Rotation
Shaders
Collision
Cameras
Lights
Audio/Visual
Video Playback
Sound
Music
Input Agnostic
Direct Input Control
Touch
Keyboard
Mouse
Accelerometer
Joystick/Controllers
Sensors
Camera Access *
GPS *
Geo-location *
Inclinometer *
Light Sensor
Mobile
Rating an app *
In-App Purchasing *
Adverts *
- Chartboost
- Admob
Networking
Messages
Shared Variables
Misc
File IO
Facebook *
File IO
Extensive help & tutorials
Time & Date
Enhanced image control
QR Codes
HTTP
Edit Boxes
Zip file control
Coming Soon...
Debugger
3D Engine Enhancements
File IO
3D Bullet Physics
Extension System
*Selected platforms only.
(注:由於上面涉及到很多領域術語並且也容易理解,翻譯出來反而不倫不類,故此處不做翻譯。)
2.6,總結
當然,我沒有花足夠多的時間在AGK上面,所以不認為這是一個全面客觀的評論。下面是我用AGK做開發時的初步印象。我個人並不是BASIC語言的忠實粉絲,作為初學者的推薦,AGK Script是值得使用的,並且包含的工具使其成為初學者合適的選擇,特別是包含了大量的例項和可靠的幫助文件。憑直覺我完全可以使用AGK庫,並且完全使用C++編寫程式碼的能力將吸引不少開發人員。C++和BASIC之間的對映非常自然,當然這也需要付出代價。等式的C ++方面在結構上非常“平坦”,不使用OOP和令人不安的“幻數”型別變數。在一個簡單的專案中,AGK是一個堅實而平易近人的選擇。在更復雜的專案中,沒有在頂層編寫組織層,我可以看到很快發展出一堆不可維護的程式碼。 AGK附帶的工具都比較實用,但是都還需要完善。AGK Script的編輯體驗不錯,但偵錯程式還不夠強大,還需要很大的改進,如果有更多的重構支援會很好。整合和上下文敏感的幫助也將是一個巨大的福音。儘管AGK IDE中有繁多的功能,但用AGK Script開發並不會感到苦惱。Placement Editor工具很好,但是功能相當有限並且互動也並非完美。除了最瑣碎的遊戲,我想你會發現自己想要一個更成熟的工具,比如Tiled,雖然有loader,這當然是一個選擇。此外,編輯器僅適用於Windows計算機。 從開發人員的角度來看,對於2D遊戲,AGK提供了您所期望的幾乎所有功能,並且還有些意料之外的功能,例如跨平臺視訊播放。3D正在出現但缺少一些關鍵功能。程式碼體驗具有難以置信的一致性,,一旦你弄清楚如何完成一項任務,你通常可以猜測其他任務將如何執行。你可以在非常短的時間內在AGK取得很大成就,但我確實質疑設計如何擴充套件到更大的專案。 作為C ++庫,AGK也可以被視為SFML或SDL等庫的跨平臺競爭對手。 對於新開發人員來說,AGK似乎是一個很好的解決方案,特別是如果你喜歡BASIC程式語言或者希望使用一個平易近人的C ++庫。 對於更有經驗的開發人員,AGK是一個高效且易於學習的庫,支援相當數量的平臺,可選擇高階和低階開發。 我只是不知道這個產品與專案複雜性的關係如何。
2.7,配套視訊(The Video)
3,引用與參考
(注:由於個人英語水平有限,有些地方可能會有意思上的曲解,需要以原文為標準。也希望有能力者將糾正後的正確含義後放到評論區。)