在开始“进一步认识AGK2”(这里的2是第二个版本的含义)之前,先介绍一下这篇文章的内容和出处。这是篇译文,原文是 标题为“A Closer Look At AppGameKit 2”,文章的出处会在文末给出。文中通过一些简单的例子和AGK提供的工具资源入手,来对AGK2进行了概括性的讲解。通过阅读本文可以加深你对AGK2的整体把握,是学习App Game Kit2的一个不错的开端。另外需要说明,这里作者使用的可能是非试用版本。
在今天的“细看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中使用其他几种工具。
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视频)或者在文章末尾观看。
让我们直接使用一对代码的示例,第一个是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 ++库。
(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自行构建和部署。 该工具可在开发过程中快速进行设备测试,并可节省大量时间。
AppGameKit附带了大量的AGK Script代码示例:
包括一些完整的游戏:
和一些用户提供的例子:
下面是示例SpaceShooter 的运行效果:
我之前提到过,没有可用的本地文档,这很不幸。似乎也没有生成的类库引用,这也是不幸的。 也就是说,可用的AGK文档实际上相当可靠,并且是我的经验之谈。 它完全在线提供,因此您可以自己查看。
脚本语言本身非常简单,并以参考形式记录在这里。 虽然这里提供了更广泛的语言介绍和概述。 如前所述,还有数十个例子可供学习。 有一系列指南可用于网络,平台发布等特定主题。 与类引用最接近的是Commands documentation,您可以在C ++和BASIC代码示例之间切换:
AGK还有一个非常活跃的开发者论坛。
当然,我们应该讨论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.
(注:由于上面涉及到很多领域术语并且也容易理解,翻译出来反而不伦不类,故此处不做翻译。)
当然,我没有花足够多的时间在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是一个高效且易于学习的库,支持相当数量的平台,可选择高级和低级开发。 我只是不知道这个产品与项目复杂性的关系如何。
原文链接:https://www.gamefromscratch.com/post/2015/07/12/A-Closer-Look-At-AppGameKit-2.aspx
(注:由于个人英语水平有限,有些地方可能会有意思上的曲解,需要以原文为标准。也希望有能力者将纠正后的正确含义后放到评论区。)