打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【cocos2d-x入门实战】微信飞机大战之十五:跨平台移植和广告植入

原创作品,转载请标明http://blog.csdn.net/jackystudio/article/details/12150907

整个游戏是出炉了,但是只在PC上玩很不过瘾,触屏的体验是鼠标没办法达到的。所以这节我们把它移植到Android平台上。当然这个游戏太微不足道了,所以我也不指望它能为我赚什么钱,现在考虑些就图样图森破了。这里的广告只是纯技术上的研究。做游戏,浮躁不得。


1.移植到Android平台

其实这些我在http://blog.csdn.net/jackystudio/article/details/11516435一文中就有讲过了,这里就再重复一遍吧。Cygwin和Eclipse自行准备好吧。


1.1.配置Android项目

(1)点击已配置好的create-android-project.bat,创建JackyAirplane的安卓项目。配置方式创建请看上文。

(2)Win32项目下的Classes里面的所有源文件和头文件都放进Android项目中的Classes。如果你写的源文件和头文件是放在proj.win32中的,也把它们拷出来到Classes。

(3)进入proj.android,把音效,字体,图片这些资源拷入asset文件夹中。

(4)进入proj.android,res下各目录存放有游戏的图标,你可以进行修改。

(5)进入proj.android,jni→helloworld目录下有main.cpp,这是跨平台的入口,也就是jni层相关。找到这个函数Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit,修改如下内容。

  1. if (!CCDirector::sharedDirector()->getOpenGLView())  
  2. {  
  3.     CCEGLView *view = &CCEGLView::sharedOpenGLView();  
  4.     view->setFrameSize(w, h);  
  5.     // set the design resolution screen size, if you want to use Design Resoulution scaled to current screen, please uncomment next line.  
  6.      view->setDesignResolutionSize(480, 800);//加入这一句,目的就是为了适配屏幕  
  7.   
  8.     AppDelegate *pAppDelegate = new AppDelegate();  
  9.     CCApplication::sharedApplication().run();  
  10. }  
(6)进入proj.android,jni。打开android.mk,修改LOCAL_SRC_FILES字段为下面内容,这就是所有的源码。

  1. LOCAL_SRC_FILES := helloworld/main.cpp \  
  2.                    ../../Classes/AppDelegate.cpp \  
  3.            ../../Classes/BulletLayer.cpp \  
  4.            ../../Classes/ControlLayer.cpp \  
  5.            ../../Classes/Enemy1Layer.cpp \  
  6.            ../../Classes/Enemy2Layer.cpp \  
  7.            ../../Classes/Enemy3Layer.cpp \  
  8.            ../../Classes/GameLayer.cpp \  
  9.            ../../Classes/GameScene.cpp \  
  10.            ../../Classes/PlaneLayer.cpp \  
  11.            ../../Classes/WelcomeLayer.cpp \  
  12.            ../../Classes/WelcomeScene.cpp \  
  13.            ../../Classes/Enemy1Sprite.cpp \  
  14.            ../../Classes/Enemy2Sprite.cpp \  
  15.            ../../Classes/Enemy3Sprite.cpp \  
  16.            ../../Classes/UFOLayer.cpp \  
  17.            ../../Classes/GameOverLayer.cpp \  
  18.            ../../Classes/GameOverScene.cpp \  
  19.            ../../Classes/MutiBulletsLayer.cpp   


1.2.交叉编译

打开Cygwin,把proj.android中的build-native.sh拖到Cygwin中,执行编译。正常编译成功后,你可以在\proj.android\libs\armeabi目录下找到libgame.so。这就是整个游戏的内容被打包进去了。.so是linux下的动态链接库,相当于windows下的.dll。


1.3.导入android项目,生成apk

打开Eclipse,File-Import-Android-Existing Android code to workspace。选择刚才的proj.android。导入。Eclipse工作区就可以看到这个游戏的android项目了。啥都不用改了,直接编译成.apk就可以了。

注意:AVD不支持openGLES2.0,所以必须用真机调试。


2.广告植入

现在这类广告多如牛毛。选择哪家我也就不多说了,免得有广告嫌疑。如何植入广告这里我也只能简单的说下。因为实际植入还是很麻烦的,毕竟广告商的SDK不一样,还涉及到jni技术,java基础,Android开发基础,这些都要有了解。

这里我把广告分为两类,这部分我也算初学,如果有什么错误,烦请指出。。。


2.1.Android广告和cocos2d-x游戏无交互

这类比如开场插屏广告之类的。

这里广告和游戏没有交互,也就是说它和游戏的相对独立的,大体步骤是:

(1)单独的做出一个带有广告LoadingActivity和对应布局,然后在AndroidManifest.xml中把启动Activity指向它。

(2)我们看一下JackyActivityActivity(cocos2d-x自动帮你生成的):

  1. public class JackyAirplane extends Cocos2dxActivity  
  1. public class Cocos2dxActivity extends Activity  
是的,cocos2d-x游戏也是一个Activity,所以可以在LoadingActivity中实现Runnable接口,开启一个线程调用它。

  1. Runnable runnable=new Runnable() {  
  2.       
  3.     @Override  
  4.     public void run() {  
  5.         // TODO Auto-generated method stub  
  6.         Intent intent = new Intent(LoadActivity.this, JackyAirplane.class);  
  7.         LoadActivity.this.startActivity(intent);//切换Activity  
  8.         LoadActivity.this.finish();  
  9.     }  
  10. };  


2.2.Android广告和cocos2d-x游戏有交互

这类比如过场广告,暂停广告之类的。

这里处理起来就比无交互的麻烦多了。其实也就是要在C++代码中调用JavaAPI,所以采用了Jni技术。

(1)Java代码:给JackyAirplane添加一个静态广告成员变量。

  1. public class JackyAirplane extends Cocos2dxActivity{  
  2. ...  
  3. public static AdView adView;    // 第3方广告  
  4.   
  5. }  

(2)Java代码:添加静态成员方法,用来显示广告。

  1. public static void showAD() {   
  2.   new Thread(new Runnable(){  
  3.    
  4.   @Override  
  5.   public void run() {  
  6.   adView.setVisibility( adView.VISIBLE );  
  7.   }  
  8.    
  9.   }).start();  
  10. }  

(3)C++代码:通过jni调用showAD()。

  1. #include <jni/JniHelper.h>  
  2.   
  3. JniMethodInfo minfo;    
  4. jobject jobj;    
  5.    
  6. bool b = JniHelper::getStaticMethodInfo(minfo,     
  7. "com/jacky/jackyAirplane/JackyAirplane",  //类路径  
  8. "showAD",   //静态方法名    
  9. "()V");   //括号里的是参数,后面的是返回值  
  10. if(b)  
  11.     jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID);    
  12. else  
  13.     ;//打印错误...  
如果要控制广告的开关,可以在Java内使用Handler来接收消息控制,不过这个时候就要记得传参(开/关)了。


好了,微信飞机大战讲解到这里就全部结束了。感谢CCTV什么的就不来了。希望这一系列的教程能够帮助您开启cocos2d-x游戏的快乐旅途!

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【玩转cocos2d-x之三十三】游戏嵌入Webview网页
将cocos2d-x(2.1.3版)项目向android平台移植。因为恢复了下系统,重新配置了下环境变量。
Android.mk高级写法
Android之编译jni出错解决办法
RK3288 uvc摄像头调试
设置quick-cocos2d-x在Mac下的编译环境
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服