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());就可以取得的。