近日正好要在手游中添加手机震动功能。没搞过啊,上网找了下,结果相关文章还是不少的,讲得也挺详细的,但我找到的都要去改cocos2dx的底层代码。我看了下,完全没必要啊。在自己的Java文件中定义一个静态方法就行了。
Java需添加内容:
随便找个自己的Java类(游戏主入口类也行),在类中定义如下静态方法:
public static void vibrate(int vibrateTime) {
Vibrator vib =
(Vibrator)MainClass.returnContent().getSystemService(Service.VIBRATOR_SERVICE);
vib.vibrate(vibrateTime);
}
MainClass:是你游戏的主入口Java文件名
需要在主入口Java类中定义和添加如下内容:
private static Activity mActivity;
MainClass.mActivity = this;
public static Activity returnContent()
{
return mActivity;
}
C++需添加的内容:
找个C++类,添加这个方法
//参数是毫秒数
VibratorJNI(int vibratorTime)
{
JniMethodInfo t;
const char * jniClass = "用vibrate方法所在Java类名填冲这个字符串";
if (JniHelper::getStaticMethodInfo(t, jniClass, "vibrate", "(I)V"))
{
t.env->CallStaticVoidMethod(t.classID, t.methodID, vibratorTime);
t.env->DeleteLocalRef(t.classID);
}
}
调用方法:
1.在C++中调用
C++ClassName::VibratorJNI(500);
C++ClassName:是VibratorJNI方法所在的类名;
2.在lua中调用
先把C++方法注入到lua堆栈中
// 震动手机
int LUA_VibratorJNI(lua_State * L)
{
int time;
time = (int)lua_tonumber(L, 1);
JniUtil::VibratorJNI(time);
return 1;
}
void LUA_SetupAPI(lua_State * L)
{
luaL_Reg lib[] =
{
{"shakephone", LUA_VibratorJNI},//震动手机
{ NULL, NULL },
};
luaL_register(L, "ctolua", lib);
}
LUA_SetupAPI这个函数要在进入Lua主入口前调用。一般在AppDelegate.cpp中调用
lua代码中直接调用
ctolua.shakephone(500);