我正在使用使用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