- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试将一些使用 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.i
或 arrays_java.i
可以帮助你,但他们不能; SWIG 和 Java 都不知道 SDL_GetKeyState() 返回的数组有多大,因此它们无法为您生成 Java 数组。
在这种特殊情况下,SWIG 有一个名为 FillMeInAsSizeCannotBeDeterminedAutomatically
的东西可以解决您的问题。一般来说,它的用途有限,但假设 SDL_GetKeyState() 返回值指向的数组具有恒定大小,那么它就足够了。搜索它的文档和邮件列表,思考 Java SWIG 文档的数组部分,前进的方向应该会变得清晰。
关于Java 和 SDL_GetKeyState(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1522660/
我正在尝试将一些使用 SDL 的代码转换为 Java。我正在使用 sdljava 绑定(bind)。 sdljava 使用 SWIG 作为 C 数据类型和 Java 之间的桥梁。为了获得与 SDL_G
我是一名优秀的程序员,十分优秀!