1. 程式人生 > >AGK之進一步認識AppGameKit2

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日)左右閱讀本文,它現在可以在

Humble Gamedev Bundle中使用其他幾種工具。 AGK_logo

AppGameKit是一個跨平臺,移動友好的2D / 3D遊戲引擎,雖然3D正在開發中。AGK主要使用AGK Script程式設計,AGK Script是一種具有一些C ++風格特徵的BASIC方言。如果BASIC這個詞讓你感覺有些意外,不要擔心,AGK也可以使用C++庫來程式設計。如果C++這個詞還是讓你畏縮,嘿嘿……那麼總是還有AGK Script:)。在本篇教程中我們將快速概覽一下兩者。AppGameKit2是 Kickstarter campaign成功的結果,是之前開發過 Dark Basic 和 3D Gamemaker的

The Game Creators公司的產品。

這篇文章也有一個高清的配套視訊,可以點選這裡,(譯: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

下面是上述程式碼的執行效果: running

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)
{

}

下面是上述程式碼的執行效果: running2 此處C++的示例程式碼更多一些。AGK作為一個庫被提供給C++使用。作為開始,這裡有許多你能夠拷貝和作為起點的模板。每個模板都有一個bootstrap 類,其中包含啟動AGK所需要的程式碼。例如,Visual Studio專案為您提供WinMain實現。以下是Windows安裝的當前可用模板(MacOS具有適用於iOS和Mac的XCode專案): project 當然,如果您願意,您當然可以建立自己的應用程式並簡單地將AGK用作C ++庫。

2.2,工具集(Tools Included)

(1)AGK IDE 如果你使用AGK Script語言來開發,那麼你大部分開發都將在AGK IDE中完成。AGK IDE是一個Code :: Blocks派生的IDE,具有AGK Script的文字編輯,語法高亮,程式碼完成和除錯支援的功能。 AGKIDE 我在使用AGK IDE的過程中沒有遇到任何障礙,大多數的特性在當今的很多IDE中都有,包括程式碼摺疊、查詢/替換、智慧感知(譯)和程式碼補全。 code1 幾乎不存在重構工具,不幸的是也沒有本地幫助(很快我們將討論幫助檔案)。

除錯支援: debug 但實現是準系統,僅限於斷點,執行/跳出過程( step over/out)並顯示呼叫堆疊。 你可以檢查變數的值,但必須在“變數”區域中手動輸入它們。 無法inspect,新增監視或設定條件斷點。 也許是因為這些功能比較新穎,也許之後會擴展出來。

如果你選擇用C++作為開發語言,則根本無法使用AGK IDE,而是使用自己的C++ IDE(如Microsoft visual studio等),像之前所說的那樣,提供了一些模板。

(2)Placement Editor AGK還附帶了Placement Editor,這是一個相當簡潔的瓦片地圖建立程式。 Placement Editor 能夠使用這個工具來放置各種大小的圖塊(tiles),執行一些常用的變換,比如:旋轉、映象、向上向下等,並且它也支援使用網格捕捉技術,通過網格使得佈局更加精準。然而有些互動的需求被忽視了,比如,滾動條僅支援通過箭頭來滾動,而螢幕的平移只能藉助螢幕控制器。此外,必須退出應用程式並將圖形複製到媒體目錄以新增新的圖塊。不幸的是,它還缺少一些嚴格要求的功能,例如定義碰撞體或物理屬性。但它可以快速建立平鋪背景。

(3)AGK Player AppGameKit的另一個很酷的功能是AGK Player,可在移動裝置上使用: AGKPLAYER 通過在AGK IDE中點選Broadcast ,你可以輕鬆檢視裝置上程式碼的執行效果,而無需像平常那樣捆綁/簽署/部署。 它可以在應用程式商店中下載,但iOS必須使用XCode自行構建和部署。 該工具可在開發過程中快速進行裝置測試,並可節省大量時間。

2.3,一些示例(Samples and Demos)

AppGameKit附帶了大量的AGK Script程式碼示例: demo 包括一些完整的遊戲: demogames 和一些使用者提供的例子: userdemo 下面是示例SpaceShooter 的執行效果: gameeffect

2.4,文件和幫助

我之前提到過,沒有可用的本地文件,這很不幸。似乎也沒有生成的類庫引用,這也是不幸的。 也就是說,可用的AGK文件實際上相當可靠,並且是我的經驗之談。 它完全線上提供,因此您可以自己檢視。 指令碼語言本身非常簡單,並以參考形式記錄在這裡。 雖然這裡提供了更廣泛的語言介紹和概述。 如前所述,還有數十個例子可供學習。 有一系列指南可用於網路,平臺釋出等特定主題。 與類引用最接近的是Commands documentation,您可以在C ++和BASIC程式碼示例之間切換: display 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)

video

3,引用與參考

(注:由於個人英語水平有限,有些地方可能會有意思上的曲解,需要以原文為標準。也希望有能力者將糾正後的正確含義後放到評論區。)