ArduEngine:在Arduboy上创建游戏的简单框架

我在2014年至2015年间上大学时认识Arduboy,这是一个Kickstarter项目。 我对那个项目非常感兴趣,因为它是一个像信用卡一样大小的游戏系统,但是由于我没有信用卡,所以我无法支持该项目。 直到2017年,我完全忘记Arduboy时,我参加了新加坡的GameStart Asia。 我发现一个Arduboy站在拐角处,毫不犹豫地买了其中一个,并随TeamARG推出了Sirene游戏。

作为程序员,我试图在Arduboy上创建自己的游戏。 经过几天的学习,修改代码,查找参考资料,我设法创建了我的第一个Arduboy游戏,名为DanceRow,这是一个在线舞蹈游戏的克隆版本,在亚洲很流行,但是没有在线功能。 然后,当谈到Arduboy Game Jam 2时,我又创建了2款游戏,一个是Santa’s Factory,另一个是Prize Frenzy。 而且由于我参加了Jam,感谢Arduboy团队,我得到了免费的Arduboy🙂。

在创建自己的游戏之后,我了解到的是,每次创建一个空项目时,我都必须重写相同的代码,因为在首次创建一个项目时,我们只有两种方法。 而且,我的大部分代码结构都遵循其他人( 例如 TeamARG)所做的工作。


然后我想到了创建ArduEngine的想法,这是一个简单的框架(或引擎,我不知道有什么区别🤔),用于在Arduboy上创建游戏。 目前,它仅具有基本功能,例如,编写文本,绘制矩形,绘制图像,基本场景功能等。 但是我相信在Arduboy上创建许多简单的游戏就足够了。

您可以在GitHub上获得项目

警告:我只能在Mac上尝试此操作。 我不知道如果在其他操作系统上尝试会怎样。

创建您的第一个项目

首先,您需要在计算机上安装python。 转到ArduEngine目录,然后运行以下命令:

./ArduEngine.sh [ProjectName] 

命名游戏时,要记住两件事:

  • 仅字母数字
  • 没有空格字符

之后,ArduEngine将使用您的游戏名称生成一个文件夹。 在该文件夹内,将是您开发游戏的工作场所。 它具有以下结构:

创建第一个项目后,将为您提供一个默认的ArduEngine项目,其中包含ArduEngine文件夹, YourProjectName.inoImages.hSceneID.hSplashScreen.cpp ,它们都位于YourProjectName文件夹中。

ArduEngine文件夹

这是引擎的核心库。 下一部分将说明其上可用的组件。

ArduboyGame.ino

这是主文件。 请注意,文件名是您的游戏名,并且必须与根文件夹名匹配。 该文件将具有3个基本功能: InitializeScenes()setup()loop()

如您所见,您必须在此处初始化所有游戏场景。 创建新场景后,它将自动注册到主机。 在该行的末尾,您必须指定应渲染的场景。

玩家打开Arduboy时,将调用一次。 我为您提供了启动Arduboy游戏的基本设置。

这将在每个帧上调用。 看一下这行代码:

  arduEngine-> Update(arduboy); 

这将使在每一帧上调用Update(arduboy) 。 它将处理所有ArduEngine对象上的所有更新和渲染。

图片.h

您必须将所有图像资源都放在此文件上。

SceneID.h

您可以通过告诉ArduEngine应该渲染哪个场景ID来指定它渲染哪个场景。 您必须将场景ID存储在此文件中,然后可以在需要跳转到其他场景的任何位置添加它。

SplashScreen.cpp

该文件是ArduScene的示例。 如果要创建另一个场景,则可以创建一个新文件,然后从该文件复制并粘贴模板。 创建新场景后,必须在主文件上对其进行初始化,然后为该场景创建一个ID。

在该场景上发生的是,它将创建一个ArduSprite对象,如果我们转到该场景,它将显示图像。

现在, logo对象已附加到全局引擎,因此,无论您在任何场景上的任何地方,都会将其呈现,因为当前我们不存储该对象属于哪个场景的任何信息。 当前,唯一的解决方案是在Load()上创建所有对象,并在Destroy()上删除引擎上的所有对象。 在下一篇关于真实游戏项目的文章中,我将向您展示如何做到这一点。

在上一节中,您了解了ArduSprite和ArduScene。 这些是ArduEngine的组件,将在开发Arduboy游戏时让您轻松生活。

ArduEngine的对象

如果您使用ArduEngine,将获得3个基本的ArduObject:

  • ArduRect :它基本上是一个arduboy.rect(),但是,我包装了它,以便您更轻松地操作该对象。
  • ArduSprite :同样,它基本上是用于绘制图像的arduboy.drawBitmap()。
  • ArduText :它是arduboy.print()的包装。

每次创建这些对象时,它将由ArduEngine自动呈现。

ArduScene

在ArduEngine中,您将研究ArduScene。 您可以通过更改ArduEngine上的活动场景ID在场景之间移动。 现在,您必须手动创建此ArduScene模板(复制并粘贴或手动键入),但是我将继续努力以自动生成它。

在ArduScene上,您将获得从ArduEngine调用的4种基本方法。

  1. 构造函数本身 :游戏开始时将被调用一次。
  2. Load() :进入场景时将被调用一次。
  3. Run() :当我们处于此场景中时,将在每一帧中调用它。
  4. Destroy() :离开场景时将被调用一次。

现在,我仍在完成ArduEngine的定稿工作,我计划使用ArduEngine创建一个简单的游戏,向您展示如何使用该框架。 这篇文章的目的不是提供有关如何使用ArduEngine的文档,而仅仅是为了介绍该框架。

我将提供有关使用ArduEngine的稳定版本的框架,文档和游戏的更新。 有关更多信息,您可以尝试创建自己的ArduEngine项目并进行试用。

玩得开心。