前言:
這一節,筆者將給flappy加入google的AdMob廣告 ,這也是爲什麼越南小夥瞬間日進5萬美元的祕訣;平臺還是android手機上,通過這個demo,讀者可以學習js代碼怎麼和android代碼交互,怎麼按鍵檢測退出,怎麼分享;
ps 如果沒有出現廣告,確定wifi是否打開,確定殺毒安全軟件是否禁止廣告模塊;
背景:
最近火爆全球的遊戲flappy bird讓筆者歎爲觀止,於是花了一天的時間山寨了一個一模一樣的遊戲,現在把遊戲的思路和源碼分享出來,代碼是基於javascript語言,cocos2d-x遊戲引擎,cocos2d-x editor手遊開發工具完成的,請讀者輕砸;
ps:運行demo需要配置好cocos2d-x editor,暫不支持其他工具。還有demo是跨平臺的,可移植運行android,ios,html5網頁等。
Android源代碼:
進入代碼集中營下載(flappy源碼--添加admob廣告): http://blog.makeapp.co/?p=306&preview=true
效果圖 (圖片頂部有廣告)
代碼分析
首先實現廣告模塊:在以前android代碼的基礎上加入GoogleAdmobAdsSdk.jar,拷貝到libs路徑下,並且右擊選擇add as library;
然後在src目錄下加入plugin模塊。
接着修改asserts裏面的MainActivity.js,在onEnter方法裏面加入廣告代碼;a152fcf037adb43是廣告祕鑰,可到admob官網申請,showAds表示廣告的位置;
var adsAdmob = plugin.PluginManager.getInstance().loadPlugin("AdsAdmob");
cc.log("configDeveloperInfo AdsAdmob");
if (adsAdmob) {
cc.log("configDeveloperInfo");
adsAdmob.configDeveloperInfo({"AdmobID": "a152fcf037adb43"});
adsAdmob.showAds(0, 0, 1);
}
else {
cc.log("can't find AdsAdmob plugin");
}
找到Cocos2dMainActivity文件,整個遊戲場景作爲一個activity存在,修改代碼如下;初始化了PluginWarpper,同時可以添加返回按鍵事件onBackPressed();System.loadLibrary("cocos2dx-game")也很關鍵,把需要的庫下載下來;在AndroidManifest修改相應的參數,代碼不列出來;運行可以看到廣告,也可以點擊返回鍵彈出退出框;
public class Cocos2dMainActivity extends Cocos2dxActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PluginWrapper.init(this); // for plugins
PluginWrapper.setGLSurfaceView(Cocos2dxGLSurfaceView.getInstance());
Cocos2dxLocalStorage.context = this;
/*String languageType = getResources().getConfiguration().locale.getCountry();
if (languageType.equals("CN")) {
Cocos2dxLocalStorage.setItem("language", "CN");
System.out.println("language china");
} else {
Cocos2dxLocalStorage.setItem("language", "US");
System.out.println("language english");
}*/
}
public Cocos2dxGLSurfaceView onCreateView() {
Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSurfaceView(this);
// HelloAds should create stencil buffer
glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8);
return glSurfaceView;
}
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
onBackPressed();
return true;
}
return super.dispatchKeyEvent(event);
}
public void onBackPressed() {
AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setTitle("")
.setMessage("quit the game?")
.setNegativeButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
System.exit(0);
finish();
}
}).setPositiveButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
public void onClickShare(View view) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_SUBJECT, "分享");
intent.putExtra(Intent.EXTRA_TEXT, "終於可以了!!!");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(Intent.createChooser(intent, getTitle()));
}
static {
// System.loadLibrary("game");
System.loadLibrary("cocos2dx-game");
}
}
接着我們實現在遊戲裏面觸發分享事件,找到asserts--MainLayer.js, 給那個123圖片添加點擊事件;sys.localStorage.setItem("share", "xxx")是交流通道,獲得關鍵詞share,直接在CocosdLocalStorge setItem方法下觸發;
MainLayer.prototype.onGradeClicked = function () {
sys.localStorage.setItem("share", "xxx");
}
public static void setItem(String key, String value) {
try {
String sql = "replace into " + TABLE_NAME + "(key,value)values(?,?)";
mDatabase.execSQL(sql, new Object[]{key, value});
if (key.equals("share")) {
System.out.println("jump share");
onClickShare(value);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void onClickShare(String score) {
String shareText = "welcome to use cocos2d-x editor!";
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, "share");
intent.putExtra(Intent.EXTRA_TEXT, shareText);
context.startActivity(Intent.createChooser(intent, "share to"));
}
然後我們要從android應用裏面跳到cocos2d-x遊戲裏面,其實很簡單,就是普通的活動意向跳轉,在AndroidMainActivity.java加入代碼;
Button btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(AndroidMainActivity.this, Cocos2dMainActivity.class));
}
});
最後別忘記在AndroidManifest.xml裏面把需要的參數配置好,運行正常沒問題,有問題可自行調試;
flappy博文系列:
flappy bird遊戲源代碼揭祕和下載後續---移植到android真機上
flappy bird遊戲源代碼揭祕和下載後續---移植到html5網頁瀏覽器
flappy bird遊戲源代碼揭祕和下載後續---日進5萬美元的祕訣AdMob廣告
flappy bird遊戲源代碼揭祕和下載後續---移植到蘋果ios上 (未寫)
筆者語:
想了解更多請進入官方博客,最新博客和代碼在官方博客首發;請持續關注,還有更多cocos2dx editor遊戲源碼即將放出;
聯繫筆者:[email protected](郵箱)qq羣:232361142
後言:
爲了鼓勵更多手遊愛好者加入cocos2d-x editor陣營,也爲了讀者堅定對該工具的信心,筆者基於以上的flappy bird代碼和新的圖片資源,往google play和中國應用市場發佈了一個相似的遊戲----騰飛的小鳥(fly bird)。該遊戲還加入了廣告模塊,可以獲得些許的廣告費。也希望讀者通過cocos2d-x editor可以在市場上發佈更多的好遊戲;
google play地址:https://play.google.com/store/apps/details?id=com.makeapp.game.flybird (小祕密:如果應用.apk後綴改爲.rar,你會獲得意想不到的東西)
豌豆莢市場地址:http://www.wandoujia.com/apps/com.makeapp.game.flybird
機鋒市場地址: http://apk.gfan.com/Product/App741996.html
html5在線演示:http://www.makeapp.co/flybird/ (微軟ie瀏覽器存在兼容性問題,請選擇其他瀏覽器;公司內網,小卡,見諒)