gpt4 book ai didi

Java 和 SDL_GetKeyState()

转载 作者:太空宇宙 更新时间:2023-11-04 08:58:33 30 4
gpt4 key购买 nike

我正在尝试将一些使用 SDL 的代码转换为 Java。我正在使用 sdljava 绑定(bind)。

sdljava 使用 SWIG 作为 C 数据类型和 Java 之间的桥梁。为了获得与 SDL_GetKeyState() 等效的功能,sdljava 提供了 SWIG_SDLEvent.SDL_GetKeyState() 方法,该方法返回名为 SWIGTYPE_p_unsigned_char 的内容。

当然,Java 没有 unsigned char 类型,我不知道编译器认为这个 SWIG 类型实际上对 Java 代表什么。在 C/C++ 中正常使用 SDL_GetKeyState() 类似于:

Uint8 *ks = SDL_GetKeyState(NULL);
if ( ks[SDLK_UP] ) { /* handle Up key */ }

...其中 SDL keystate 值(例如 SDLK_UP)索引到数组中。

但是,下面的Java代码:

SWIGTYPE_p_unsigned_char ks = SWIG_SDLEvent.SDL_GetKeyState(null);
if ( ks[SDLKeyValues.SDLK_UP] != 0) { /* handle Up key */ }

导致编译器错误,“表达式的类型必须是数组类型,但它解析为 SWIGTYPE_p_unsigned_char。”

我想知道的是,调用 SWIG_SDLEvent.SDL_GetKeyState() 后,如何使用它返回的内容来检查各个按键的状态?

最佳答案

是的,这是与您的 other question 相同问题的特殊情况。起初我以为 carrays.iarrays_java.i 可以帮助你,但他们不能; SWIG 和 Java 都不知道 SDL_GetKeyState() 返回的数组有多大,因此它们无法为您生成 Java 数组。

在这种特殊情况下,SWIG 有一个名为 FillMeInAsSizeCannotBeDeterminedAutomatically 的东西可以解决您的问题。一般来说,它的用途有限,但假设 SDL_GetKeyState() 返回值指向的数组具有恒定大小,那么它就足够了。搜索它的文档和邮件列表,思考 Java SWIG 文档的数组部分,前进的方向应该会变得清晰。

关于Java 和 SDL_GetKeyState(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1522660/

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