Cocos2d-x系统开发游戏已经变得比較流行,但是用这个开发的游戏。想要加入广告就不是那么理想了。尤其是插屏广告。由于插屏广告通常是要在暂停或者结束游戏的时候展示才比較的合理。但是Cocos2d-x是C++语言,展示广告的代码都是写在Java源码里的。这就使得问题有一些麻烦。由于Android下的Cocos2d-x开发使用的是Jni技术,通过该技术,java代码能够调用c++代码,由此能够想到,c++代码也能够调用java代码的。比方我们想使用有米的插屏广告。能够这样加入代码:
Java代码:
public class TestClass extends Cocos2dxActivity
{
public static TestClass paopao = null; //这个用来存储类的实例
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
paopao = this; //存储类的实例
AdManager.getInstance(this).init(“xxxxxxxxx”,”xxxxxxxxx”, false); //设置有米广告的ID和密钥
SpotManager.getInstance(this).loadSpotAds();
SpotManager.getInstance(this).setSpotTimeout(5000);
SpotManager.getInstance(this).setShowInterval(60);//设置60秒的显示时间间隔
}
static {
System.loadLibrary(“game”);
}
public static Object getJavaActivity() //这个函数是用来返回类的实例的
{
return paopao;
}
public void showAds() //该函数用于展示广告
{
SpotManager.getInstance(this).showSpotAds(this);
}
public void disMissAds()
{
SpotManager.getInstance(this).disMiss();
}
@Override protected void onStop()
{
//假设不调用此方法,则按home键的时候会出现图标无法显示的情况。
SpotManager.getInstance(this).disMiss();
super.onStop(); }
}
C++代码:
在AppDelegate.cpp中加入这样一个函数
void AppDelegate::ShowAds()
{
JniMethodInfo minfo;
//首先通过TestClass类的getJavaActivity静态函数获取TestClass实例
bool isHave = JniHelper::getStaticMethodInfo(minfo, ”org/cocos2dx/testexample/TestClass”, ”getJavaActivity”, ”()Ljava/lang/Object;”);
jobject activityObj;
if(isHave) { activityObj = minfo.env->CallStaticObjectMethod(minfo.classID,minfo.methodID); } //获取TestClass实例
isHave = JniHelper::getMethodInfo(minfo, ”org/cocos2dx/testexample/TestClass”, ”showAds”,”()V”);
if(isHave) { minfo.env->CallVoidMethod(activityObj, minfo.methodID); } //运行TestClass的showAds函数来显示广告
}
这样一来,仅仅要在程序的适当地方调用AppDelegate::ShowAds这个函数就能够了。
AppDelegate类的实例通过AppDelegate * app = (AppDelegate *)(CCApplication::sharedApplication());就能够取得的。