2011-03-09 68 views
2

Gamemaker是一个很好的工具,它允许一些好的RAD。然而它有很多缺点。其中之一就是缺乏一个好的标准库。
确实,您拥有“ds_ *”类型的成员,但这些成员相当缺乏。例如,优先级队列只是一个只读类型(它在进程中被销毁)。列表的排序功能使用可怕的慢速方法。 (虽然从未正式说过,我怀疑它使用冒泡排序)。并且没有链接列表的构建方法。除此之外,简单的成员访问比应该慢。制作一个封装dll让游戏制作者处理C++标准库

现在人们可以用母语实际创建这些东西。然而它变得很慢(因为解释器很慢)。即在许多情况下编写快速排序/堆排序比内置排序慢。编写我自己的“链表” - 为每个节点使用特殊对象 - 开销太大。 (gamemaker中的每个对象每一步都会做很多事情)。

所以现在我正在为标准库编写一个C++层。我希望添加一些额外的功能(哈希表&链接列表是主要目标),以及允许更好的算法。对于大多数问题,我已经知道如何解决它,除了一个大问题:

所有C++库都使用“迭代器”来标识项目。 Gamemaker只允许双向(或c式字符数组)传入和传出dll。
我会如何绕过这个?不返回项目的索引是非常愚蠢的,所以我必须找到一种方法将这些迭代器映射为双打。

这是什么好主意?我最好简单地重写所有数据结构,以便迭代器保证有1对1的映射来加倍(或实际上是双+数据结构索引)?还是有更好的方法?

P.s.为什么不是那里的游戏制造者标签呢?

回答

2

在Game Maker中将数据结构“存储”到变量中的唯一方法是使用句柄或ID。你会注意到使用内置的数据结构使用整数来做同样的事情。

我会尝试的方法是将所有指向您的数据结构的指针以及它们的ID存储在散列表中。然后,你在GM和DLL之间传递ID,因为除非你要求,否则Game Maker不需要知道数据结构的状态。