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之进一步认识AppGameKit2_第1张图片

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

下面是上述代码的运行效果:
AGK之进一步认识AppGameKit2_第2张图片

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

}

下面是上述代码的运行效果:
AGK之进一步认识AppGameKit2_第3张图片
此处C++的示例代码更多一些。AGK作为一个库被提供给C++使用。作为开始,这里有许多你能够拷贝和作为起点的模板。每个模板都有一个bootstrap 类,其中包含启动AGK所需要的代码。例如,Visual Studio项目为您提供WinMain实现。以下是Windows安装的当前可用模板(MacOS具有适用于iOS和Mac的XCode项目):
AGK之进一步认识AppGameKit2_第4张图片
当然,如果您愿意,您当然可以创建自己的应用程序并简单地将AGK用作C ++库。

2.2,工具集(Tools Included)

(1)AGK IDE
如果你使用AGK Script语言来开发,那么你大部分开发都将在AGK IDE中完成。AGK IDE是一个Code :: Blocks派生的IDE,具有AGK Script的文本编辑,语法高亮,代码完成和调试支持的功能。
AGK之进一步认识AppGameKit2_第5张图片
我在使用AGK IDE的过程中没有遇到任何障碍,大多数的特性在当今的很多IDE中都有,包括代码折叠、查找/替换、智能感知(译)和代码补全。
code1
几乎不存在重构工具,不幸的是也没有本地帮助(很快我们将讨论帮助文件)。

调试支持:
AGK之进一步认识AppGameKit2_第6张图片
但实现是准系统,仅限于断点,执行/跳出过程( step over/out)并显示调用堆栈。 你可以检查变量的值,但必须在“变量”区域中手动输入它们。 无法inspect,添加监视或设置条件断点。 也许是因为这些功能比较新颖,也许之后会扩展出来。

如果你选择用C++作为开发语言,则根本无法使用AGK IDE,而是使用自己的C++ IDE(如Microsoft visual studio等),像之前所说的那样,提供了一些模板。

(2)Placement Editor
AGK还附带了Placement Editor,这是一个相当简洁的瓦片地图创建程序。
AGK之进一步认识AppGameKit2_第7张图片
能够使用这个工具来放置各种大小的图块(tiles),执行一些常用的变换,比如:旋转、镜像、向上向下等,并且它也支持使用网格捕捉技术,通过网格使得布局更加精准。然而有些交互的需求被忽视了,比如,滚动条仅支持通过箭头来滚动,而屏幕的平移只能借助屏幕控制器。此外,必须退出应用程序并将图形复制到媒体目录以添加新的图块。不幸的是,它还缺少一些严格要求的功能,例如定义碰撞体或物理属性。但它可以快速创建平铺背景。

(3)AGK Player
AppGameKit的另一个很酷的功能是AGK Player,可在移动设备上使用:
AGK之进一步认识AppGameKit2_第8张图片
通过在AGK IDE中点击Broadcast ,你可以轻松查看设备上代码的运行效果,而无需像平常那样捆绑/签署/部署。 它可以在应用程序商店中下载,但iOS必须使用XCode自行构建和部署。 该工具可在开发过程中快速进行设备测试,并可节省大量时间。

2.3,一些示例(Samples and Demos)

AppGameKit附带了大量的AGK Script代码示例:
AGK之进一步认识AppGameKit2_第9张图片
包括一些完整的游戏:
AGK之进一步认识AppGameKit2_第10张图片
和一些用户提供的例子:
AGK之进一步认识AppGameKit2_第11张图片
下面是示例SpaceShooter 的运行效果:

2.4,文档和帮助

我之前提到过,没有可用的本地文档,这很不幸。似乎也没有生成的类库引用,这也是不幸的。 也就是说,可用的AGK文档实际上相当可靠,并且是我的经验之谈。 它完全在线提供,因此您可以自己查看。
脚本语言本身非常简单,并以参考形式记录在这里。 虽然这里提供了更广泛的语言介绍和概述。 如前所述,还有数十个例子可供学习。 有一系列指南可用于网络,平台发布等特定主题。 与类引用最接近的是Commands documentation,您可以在C ++和BASIC代码示例之间切换:
AGK之进一步认识AppGameKit2_第12张图片
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)

AGK之进一步认识AppGameKit2_第13张图片

3,引用与参考

原文链接:https://www.gamefromscratch.com/post/2015/07/12/A-Closer-Look-At-AppGameKit-2.aspx

(注:由于个人英语水平有限,有些地方可能会有意思上的曲解,需要以原文为标准。也希望有能力者将纠正后的正确含义后放到评论区。)

你可能感兴趣的:(C++游戏编程)