gpt4 book ai didi

c++ - 制作一个包装器 dll 让 gamemaker 处理 C++ 标准库

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:59:03 27 4
gpt4 key购买 nike

Gamemaker 是一款简洁的工具,可以提供一些良好的 RAD。然而,它有相当多的缺点。其中之一就是缺乏一个好的标准库。
的确,您有“ds_*”类型的成员,但这些成员非常缺乏。例如,优先级队列只是一种只读类型(它在进程中被销毁)。列表的排序函数使用了一种非常慢的方法。 (虽然从未正式声明,但我怀疑它使用冒泡排序)。而且根本没有用于链表的内置方法。最重要的是,简单的成员访问比它应该的要慢。

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

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

所有 C++ 库都使用“迭代器”来标识项目。 Gamemaker 只允许将 double (或 C 风格的字符数组)传入和传出 dll。
我将如何避免这种情况?不返回项目的索引是很愚蠢的,所以我必须找到一种方法将这些迭代器映射到 double 。

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

附言为什么还没有 gamemaker 标签?

最佳答案

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

我尝试的方法是将所有指向数据结构的指针及其 ID 存储在哈希表中。然后,您在 GM 和 DLL 之间传递 ID,因为 Game Maker 不需要知道数据结构的状态,除非您提出要求。

关于c++ - 制作一个包装器 dll 让 gamemaker 处理 C++ 标准库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5246249/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com