SDL 中的倾斜控制,适用于 Android NDK JNI 游戏
Tilt Control in SDL for Android NDK JNI Games
我正在使用android NDK和JNI系统使用SDL(Simple DirectMedia Layer)开发C++游戏。我已经完成了大部分部分,但我无法弄清楚如何实现倾斜控制(像寺庙运行中的倾斜控制)。我在没有任何相关信息的情况下用谷歌搜索了很多。请帮助我,我被困住了。
拉古文德拉·库马尔
它已经包含在 SDL2 的示例 android 项目中。在SDLActivity中.java onSensorChanged方法记录所有倾斜运动:
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
SDLActivity.onNativeAccel(event.values[0] / SensorManager.GRAVITY_EARTH,
event.values[1] / SensorManager.GRAVITY_EARTH,
event.values[2] / SensorManager.GRAVITY_EARTH);
}
}
然后,可以通过调用 sdl_android.c 中的函数 Android_JNI_GetAccelerometerValues(float values[3]) 在 C++ 代码中读取这些值。
例如,您的代码可能如下所示:
#include "../SDL/src/core/android/SDL_android.h"
float accelValues[3];
Android_JNI_GetAccelerometerValues(accelValues);
之后,accelValues 将包含可用于控制游戏的加速计值。
我能够在 SDL 中使用倾斜控制,尽管我仍然不明白如何将 x,y,z 值与屏幕像素位置相关联。但至少可以使用 x,y,z 值执行基本操作。感谢aeror_正确的指针。这很简单。示例测试代码如下:-
#include "../SDL/src/core/android/SDL_android.h"
//Get Tilt values though SDL implementation
void InputHandler::HandleTitltEvt()
{
float accelValues[3];
Android_JNI_GetAccelerometerValues(accelValues);
stTileValues_.x = accelValues[0];
stTileValues_.y = accelValues[1];
stTileValues_.z = accelValues[2];
return ;
}
//Handle TiltValues to Move your player across the screen
void Player::HandleInput_()
{
InputHandler::Instance()->HandleTitltEvt();
Axis_t tiltValues = InputHandler::Instance()->getTiltValue();
if( (tiltValues.y > 0) && ((vPosition_.getY() + iHeight_) < (Game::Instance()->getGameHeight() - 15)))
{
vVelocity_.setY(iMoveSpeed + 5);
if (tiltValues.x > 0)
{
vVelocity_.setX(iMoveSpeed+5);
}
else if (tiltValues.x < 0)
{
vVelocity_.setX(-(iMoveSpeed+5));
}
}
else if ((tiltValues.y < 0) && ((vPosition_.getY() + iHeight_) > 0))
{
vVelocity_.setY(-(iMoveSpeed+5));
if (tiltValues.x > 0)
{
vVelocity_.setX(iMoveSpeed+5);
}
else if (tiltValues.x < 0)
{
vVelocity_.setX(-(iMoveSpeed+5));
}
}
else if (tiltValues.x > 0)
{
vVelocity_.setX(iMoveSpeed+5);
}
else if (tiltValues.x < 0)
{
vVelocity_.setX(-(iMoveSpeed+5));
}
}
相关文章:
- Android NDK传感器向事件队列报告奇怪的间隔
- Android NDK 编译 LAME HAVE_MPGLIB > 'interface.h' 文件未找到
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- 在 constexpr 构造函数 (c++17) 中赋值到 const char * 在使用 Android NDK 时
- 如何在 android ndk 上链接 C 和 C++ 代码,以及 C 和 C++ 运行时库(包括 STL)?
- Android NDK 未定义对ASensorEventQueue_registerSensor的引用
- 如何将 libjpeg-turbo Android NDK 添加为静态库
- 在 Flutter 应用程序中使用 Android NDK 中的 AssetManager 类
- Android NDK - 无法在 Visual Studio 2017 中调试
- 不再支持Android NDK APP_STL gnustl_shared
- Android NDK:用于第三方Java库的静态或共享C++运行时
- 为 Android NDK 编译库
- 从文件问题加载纹理 Android NDK 和 OpenGL
- Android NDK - C++ 异常会导致第三方原生库崩溃
- 如何在 Android/NDK 上将命令行参数从 gradlew.bat 传递到 Clang
- [android ndk]如何获取资产文件夹中文件的绝对路径?
- Android NDK.Build命令失败.未定义的引用.clang++:错误:链接器命令失败,退出代码为1
- 如何在Android(NDK)中使用CPR库
- 使用 Android NDK 使用 clang++ 编译C++代码时对"_Unwind_Resume"的未定义引用
- 如何在 C/Android NDK 中将字符串日期转换为毫秒