我正在使用使用SDL(Simple DirectMedia Layer)的android NDK和JNI系统的C++游戏。我完成了大部分的部件,但我无法想象如何实现倾斜控制(倾斜控制,如寺庙运行)。我已经搜索了很多没有任何相关信息。 请帮我,我卡住了。SDL for Android中的倾斜控制NDK JNI游戏
Raghuvendra库马尔
我正在使用使用SDL(Simple DirectMedia Layer)的android NDK和JNI系统的C++游戏。我完成了大部分的部件,但我无法想象如何实现倾斜控制(倾斜控制,如寺庙运行)。我已经搜索了很多没有任何相关信息。 请帮我,我卡住了。SDL for Android中的倾斜控制NDK JNI游戏
Raghuvendra库马尔
我能够在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));
}
}
它已经包含在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);
}
}
然后这些值然后可在C++代码通过调用函数Android_JNI_GetAccelerometerValues(浮点值[3])在读sdl_android.c,。
因此,例如,你的代码可能是这样的:
#include "../SDL/src/core/android/SDL_android.h"
float accelValues[3];
Android_JNI_GetAccelerometerValues(accelValues);
之后accelValues将包含可用于控制游戏的加速计值。
这真的很有帮助。你能指出一些代码示例或像懒惰foo的教程。 –
我不能给你一个代码示例,但你不明白什么?创建一个简单的循环就足够了,它可以每秒多次读取加速度计,并使用这些值来控制游戏。 –
http://stackoverflow.com/questions/how-to-ask – Dayan
在NDK目录天然活性例子展示了如何获得陀螺仪值。 – eozgonul