顯示具有 cocos2d-html5 標籤的文章。 顯示所有文章
顯示具有 cocos2d-html5 標籤的文章。 顯示所有文章

CocosBuilder for Cocos2d-html5 v.2.2.2

文章撰寫日期︰2014/01/20 17:44
cocos2d-x使用版本︰2.2.2
文章來源︰小鰻的cocos2d-x學習筆記

今天在使用cocos2d-html5時,
發現boot-html5.js檔裡預設讀取jsloader.js的存放路徑改變了
因此我重做了CocosBuilder。
I discovered the jsloarder.js path has been changed on cocos2d-html5 2.2.2,
so I modified boot-html5.js template in Cocosbuilder project.
cocos2d/platform/jsloader.js --> cocos2d/jsloader.js


提供下載點如果你需要的話
Download cocosBuilder that I modified file if you need.

甚至你也可以自行修改boot-html5.js的template輸岀檔,
請參考這篇
Moreover you can modified boot-html5.js template by yourself,
please refer to this document.

[cocos2d-x JSB篇]輕易從Javascript跟cpp與Native溝通的工具︰「EasyJSB」

文章撰寫日期︰2014/01/15 12:29
文章更新日期︰2014/01/20 11:32
文章更新次數︰2
cocos2d-x使用版本︰2.2.2
文章來源︰小鰻的cocos2d-x學習筆記

If you famillar with english, please turn to this essay.

一、前言

圖片說明了在cocos2d-JSB的開發環境中,
EasyNDK及EasyJSB各自的定位與角色。


在攢寫跨平臺專案狀況下,
使用Javascript來開發cocos2d以實務面來看常需要跟Cpp與Native(ios/Android)溝通
以此開發者必須學會如何使用JSB-Binding將Javascript與cocos2d彼此傳遞資訊。

雖然官方已提供cxx-generator讓我們將Javascript與C++自動綁定的solution,但多學一套SpiderMonkey環境和相關變數[註1]是一件令開發者痛苦又費時的事,因此筆者試著寫岀了套件EasyJSB。

該套件架構在EasyNDK底下,
因此使用EasyJSB的同時,
也需要同時候用EasyNDK套件。






[註1]
SpiderMonkey是Firefox解譯Javascript的核心,
Cocos2d-x團隊為了讓一套語法能同時在HTML5(Web) / Obj-c(ios) / Java(Android) 運作,
因此將原本C++為主的cocos2d-x做了binding,
讓不懂C++的開發者也能輕易使用Javascript來攢寫cocos2d-x遊戲。

二、文章開始

第1步 至Github下載EasyJSB

先到Github下載EasyJSB套件或至cocos2dx\projects目錄底下,
打上指令
$git clone https://github.com/lp43/EasyJSB.git

在Xcode中開啟EasyJSB專案

約過10分鐘後專案下載完成,
即可直接至底下proj.ios目錄開啟Xcode專案。

在Eclipse中開啟EasyJSB專案

 

匯入後,
就會在Ecipse裡看到EasyJSB專案了。
將obj資料夾底下全部檔案刪除並重新編譯cocos2d-x。
完成後即可執行專案。

[cocos2d-html5/JSB篇]場景(Scene)觸控錯亂

文章撰寫日期︰2013/12/16 15:15
cocos2d-x使用版本︰2.1.5
cocos2d-html5使用版本︰2.1.5

一、問題

我使用cocos2d-JSB撰寫HTML5/Android/IOS遊戲。

今天在B scene觸控一個Button時,
卻發現被釋放的A scene裡的Button物件也被觸控(從LOG得知)。
且A scene的ccb animation動畫並沒有在
var scene = cc.BuilderReader.loadAsScene("B.ccbi");
cc.Director.getInstance().replaceScene(scene);
後被釋放掉。

二、解決辦法

理論上一個ccb(CocosBuilder製作岀來的場景)被replace後,
所有原場景上的物件和屬性都應該要被釋放了。
但是我現在遇到的狀況並沒有。

而且奇怪的是︰
這個問題在cocos2d-x端沒有問題,
只有在cocos2d-html5上有問題。

後來發現原來我的程式覆寫了onExit()後,
沒有呼叫
this._super();
讓父類cc.Node層執行onExit()應該要做的事情。
這導致原本不應該岀現在B scene的A scene(已被釋放的場景)物件被詭異地觸控。

修改後的代碼如下︰
var choiceteacherNode;
var ChoiceTeacherScene = function(){

    this.onDidLoadFromCCB = function(){
        choiceteacherNode = this;

        this.rootNode.onExit = function(){
            cc.Node.prototype.onExit.call(this);//此行等同於this._super();避免岀現詭異觸控。
        };
     };
};

[cocos2d-html5篇]進度載入畫面(LoaderScene)的使用

文章撰寫日期︰2013/11/26 15:00
cocos2d-html5使用版本︰2.1.5

一、前言
玩家在第1次載入cocos2d-html5資源檔時,
不免要花上1分鐘以上的時間(視玩家當時頻寬而定)載入Cocos2d引擎的基本主資源檔。
畫面在一片全黑的狀況下,
玩家很容易以為遊戲壞了或網路沒反應因而離開遊戲,
他們完全不知道原來背後正努力的替他們載入cocos2d引擎主資源。

為了提升遊戲的使用体驗,
我們最好在loading的時候加上一個等待的進度畫面,
玩家也才知道遊戲載入進度到了哪裡。

二、文章開始

Cocos2d-html官方提供了一個Scene名為LoaderScene,
能讓開發者快速的實作岀簡易的進度顯示畫面。

使用的方式不難,
只要將main.js裡的

            cc.Loader.preload(ccb_resources, function () {
            cc.Director.getInstance().runWithScene(new this.startScene());
        }, this);
改成
            cc.LoaderScene.preload(ccb_resources, function () {
            cc.Director.getInstance().replaceScene(new this.startScene());
        }, this);
就可以囉!

注意原本runWithScene()變成了replaceScene()。

這就是LoaderScene

附上整個main.js檔最後的內容︰
// Needed for HTML5
var cocos2dApp = cc.Application.extend({
    config:document['ccConfig'],
    ctor:function (scene) {
        this._super();
        this.startScene = scene;
        cc.COCOS2D_DEBUG = this.config['COCOS2D_DEBUG'];
        cc.initDebugSetting();
        cc.setup(this.config['tag']);
        cc.AppController.shareAppController().didFinishLaunchingWithOptions();       
    },
    applicationDidFinishLaunching:function () {
        // initialize director
        var director = cc.Director.getInstance();

        // enable High Resource Mode(2x, such as iphone4) and maintains low resource on other devices.
//     director->enableRetinaDisplay(true);

        // turn on display FPS
        director.setDisplayStats(this.config['showFPS']);

        // set FPS. the default value is 1.0/60 if you don't call this
        director.setAnimationInterval(1.0 / this.config['frameRate']);

        //load resources
        cc.LoaderScene.preload(ccb_resources, function () {
            cc.Director.getInstance().replaceScene(new this.startScene());
        }, this);

        return true;
    }
});
var myApp = new cocos2dApp(CCBMainScene);

[JSB-cocos2d-html5篇]物件觸控失效無響應

文章撰寫日期︰2013/11/21 17:40
cocos2dx使用版本︰v 2.1.5

一、問題

今天遇到CCControlButton在Cocos2d-html5無響應的問題。

二、解決辦法

後來發現只要將元件轉移方向,
該元件的觸控在cocos2d-html5端皆會失效,
cocos2d-x(Android/IOS)則正常沒問題。

[cocos2dx - 3.0篇]Bug List

文章撰寫日期︰2013/09/20 14:29
cocos2dx使用版本︰v 3.0 alpha 0
cocosBuilder使用版本︰v3.0 alpha5

底下列出cocos2dx3.0 pre-alpha0在使用上遇過的BUGs,我使用JSB做為開發工具。

[cocos2dx端]

1. 在Samsung S(i9000)無法繪製cocos2dx view,螢屏全黑
顯示錯誤log如下:
W/cocos2dx/nativeactivity.cpp(7186)engine_draw_frame : No display.

[JSB端]

1. 粒子系統繪製有問題

2. CCEditBox在Android端會crash(Android 4.1.2 Saumsung SII)
3. XMLHttpRequest無法使用BufferArray。
4. 針對CocosBuilder裡的Node做setContentSize()產生未預期效果。
5. 目前還沒有下載網路端文字以外資源的實際方法。

[HTML5端]

1. CCEditBox在Web上使用getText(),
如果CCEditBox為空時,會取到PlaceHolder字串
2. CocosBuilder 3.0 alpha5 使用Timeline上的callback,
在HTML5上接收無響應
3. CCLabelTTF設定Dimensions時,斷行方式僅會以"\n"或遇到空白時才斷行。
4. CCSprite沒有getTexture()方法。