整個(gè)游戲是出爐了,但是只在PC上玩很不過(guò)癮,觸屏的體驗(yàn)是鼠標(biāo)沒(méi)辦法達(dá)到的。所以這節(jié)我們把它移植到Android平臺(tái)上。當(dāng)然這個(gè)游戲太微不足道了,所以我也不指望它能為我賺什么錢(qián),現(xiàn)在考慮些就圖樣圖森破了。這里的廣告只是純技術(shù)上的研究。做游戲,浮躁不得。
其實(shí)這些我在http://blog.csdn.net/jackystudio/article/details/11516435一文中就有講過(guò)了,這里就再重復(fù)一遍吧。Cygwin和Eclipse自行準(zhǔn)備好吧。
(1)點(diǎn)擊已配置好的create-android-project.bat,創(chuàng)建JackyAirplane的安卓項(xiàng)目。配置方式創(chuàng)建請(qǐng)看上文。
(2)Win32項(xiàng)目下的Classes里面的所有源文件和頭文件都放進(jìn)Android項(xiàng)目中的Classes。如果你寫(xiě)的源文件和頭文件是放在proj.win32中的,也把它們拷出來(lái)到Classes。
(3)進(jìn)入proj.android,把音效,字體,圖片這些資源拷入asset文件夾中。
(4)進(jìn)入proj.android,res下各目錄存放有游戲的圖標(biāo),你可以進(jìn)行修改。
(5)進(jìn)入proj.android,jni→helloworld目錄下有main.cpp,這是跨平臺(tái)的入口,也就是jni層相關(guān)。找到這個(gè)函數(shù)Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit,修改如下內(nèi)容。
if (!CCDirector::sharedDirector()->getOpenGLView())
{
CCEGLView *view = &CCEGLView::sharedOpenGLView();
view->setFrameSize(w, h);
// set the design resolution screen size, if you want to use Design Resoulution scaled to current screen, please uncomment next line.
view->setDesignResolutionSize(480, 800);//加入這一句,目的就是為了適配屏幕
AppDelegate *pAppDelegate = new AppDelegate();
CCApplication::sharedApplication().run();
}
(6)進(jìn)入proj.android,jni。打開(kāi)android.mk,修改LOCAL_SRC_FILES字段為下面內(nèi)容,這就是所有的源碼。
LOCAL_SRC_FILES := helloworld/main.cpp
../../Classes/AppDelegate.cpp
../../Classes/BulletLayer.cpp
../../Classes/ControlLayer.cpp
../../Classes/EnemyLayer.cpp
../../Classes/Enemy.cpp
../../Classes/GameLayer.cpp
../../Classes/GameScene.cpp
../../Classes/PlaneLayer.cpp
../../Classes/WelcomeLayer.cpp
../../Classes/WelcomeScene.cpp
../../Classes/UFOLayer.cpp
../../Classes/GameOverLayer.cpp
../../Classes/GameOverScene.cpp
../../Classes/MutiBulletsLayer.cpp
../../Classes/NoTouchLayer.cpp
打開(kāi)Cygwin,把proj.android中的build-native.sh拖到Cygwin中,執(zhí)行編譯。正常編譯成功后,你可以在proj.androidlibsarmeabi目錄下找到libgame.so。這就是整個(gè)游戲的內(nèi)容被打包進(jìn)去了。.so是linux下的動(dòng)態(tài)鏈接庫(kù),相當(dāng)于windows下的.dll。
打開(kāi)Eclipse,F(xiàn)ile-Import-Android-Existing Android code to workspace。選擇剛才的proj.android。導(dǎo)入。Eclipse工作區(qū)就可以看到這個(gè)游戲的android項(xiàng)目了。啥都不用改了,直接編譯成.apk就可以了。
注意:AVD不支持openGLES2.0,所以必須用真機(jī)調(diào)試。
現(xiàn)在這類(lèi)廣告多如牛毛。選擇哪家我也就不多說(shuō)了,免得有廣告嫌疑。如何植入廣告這里我也只能簡(jiǎn)單的說(shuō)下。因?yàn)閷?shí)際植入還是很麻煩的,畢竟廣告商的SDK不一樣,還涉及到j(luò)ni技術(shù),java基礎(chǔ),Android開(kāi)發(fā)基礎(chǔ),這些都要有了解。
這里我把廣告分為兩類(lèi),這部分我也算初學(xué),如果有什么錯(cuò)誤,煩請(qǐng)指出。。。
這類(lèi)比如開(kāi)場(chǎng)插屏廣告之類(lèi)的。
這里廣告和游戲沒(méi)有交互,也就是說(shuō)它和游戲的相對(duì)獨(dú)立的,大體步驟是:
(1)單獨(dú)的做出一個(gè)帶有廣告LoadingActivity和對(duì)應(yīng)布局,然后在AndroidManifest.xml中把啟動(dòng)Activity指向它。
(2)我們看一下JackyActivityActivity(cocos2d-x自動(dòng)幫你生成的):
public class JackyAirplane extends Cocos2dxActivity
public class Cocos2dxActivity extends Activity
是的,cocos2d-x游戲也是一個(gè)Activity,所以可以在LoadingActivity中實(shí)現(xiàn)Runnable接口,開(kāi)啟一個(gè)線程調(diào)用它。
Runnable runnable=new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Intent intent = new Intent(LoadActivity.this, JackyAirplane.class);
LoadActivity.this.startActivity(intent);//切換Activity
LoadActivity.this.finish();
}
};
這類(lèi)比如過(guò)場(chǎng)廣告,暫停廣告之類(lèi)的。
這里處理起來(lái)就比無(wú)交互的麻煩多了。其實(shí)也就是要在C++代碼中調(diào)用JavaAPI,所以采用了Jni技術(shù)。
(1)Java代碼:給JackyAirplane添加一個(gè)靜態(tài)廣告成員變量。
public class JackyAirplane extends Cocos2dxActivity{
...
public static AdView adView; // 第3方廣告
}
(2)Java代碼:添加靜態(tài)成員方法,用來(lái)顯示廣告。
public static void showAD() {
new Thread(new Runnable(){
@Override
public void run() {
adView.setVisibility( adView.VISIBLE );
}
}).start();
}
(3)C++代碼:通過(guò)jni調(diào)用showAD()。
#include
JniMethodInfo minfo;
jobject jobj;
bool b = JniHelper::getStaticMethodInfo(minfo,
"com/jacky/jackyAirplane/JackyAirplane", //類(lèi)路徑
"showAD", //靜態(tài)方法名
"()V"); //括號(hào)里的是參數(shù),后面的是返回值
if(b)
jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID);
else
;//打印錯(cuò)誤...
如果要控制廣告的開(kāi)關(guān),可以在Java內(nèi)使用Handler來(lái)接收消息控制,不過(guò)這個(gè)時(shí)候就要記得傳參(開(kāi)/關(guān))了。
好了,微信飛機(jī)大戰(zhàn)講解到這里就全部結(jié)束了。感謝CCTV什么的就不來(lái)了。希望這一系列的教程能夠幫助您開(kāi)啟cocos2d-x游戲的快樂(lè)旅途!
本系列源碼:VS2008+Cocos2d-x 2.0.1版 https://github.com/fusijie/Airplane_2.0.1,
VS2010+Cocos2d-x 2.2.0版(教程按照此版編寫(xiě))
Xcode+Cocos2d-x 3.0版
直接Fork吧:)
更多建議: