1. 程式人生 > >【cocos2d-x從c++到js】回撥函式1——按鍵回撥

【cocos2d-x從c++到js】回撥函式1——按鍵回撥

回撥函式是介面互動和接入各種第三方SDK的關鍵所在,因為回撥函式的C++程式碼是不能自動生成的,一切的一切,都需要手寫完成。

比較不錯的是,Cocos2d-x引擎對於回撥函式提供了完整的包裝機制。我們所需要做的就是了解這個機制,並使用他。學習引擎自己的程式碼例子,可以比較快速準確的上手這一機制。

首先,我們在Cocos2d-x 3.0 beta版中,使用他自帶的工程建立工具,新建一個跨平臺的JS專案。按照慣例,這是一個helloworld專案。在XCode執行時,我們可以看到:

wKiom1LjP67wo2etAAGX7-JVxuY628.jpg

可以看到右下角的回撥按鈕。我們來看看他是怎麼實現的。分成兩個過程來做:

一、繫結回撥函式過程

首先,我們要去找回調函式JS的繫結程式碼,在myApp.js中,init函式裡面,可以看到如下程式碼:

1 2 3 4 5 6 7 8 9 10 11 12 // add a "close" icon to exit the progress. it's an autorelease object var closeItem = cc.MenuItemImage.create( "res/CloseNormal.png", "res/CloseSelected.png"
, function () { cc.log("close button was clicked."); },this); closeItem.setAnchorPoint(cc.p(0.5, 0.5)); var menu = cc.Menu.create(closeItem); menu.setPosition(cc.p(0, 0)); this.addChild(menu, 1); closeItem.setPosition(cc.p(size.width - 20, 20));

cc.MenuItemImage.create函式的第三個引數,綁定了匿名回撥函式。第四個引數,傳入的是回撥函式呼叫時的this(如果不理解JS的this機制,請先閱讀一些JS的資料)。這些都是意圖和作用很明顯的JS程式碼,不用細說。


然後,我們去看底層對應執行的C++程式碼。在cocos2d_specifics.cpp檔案中,找到js_cocos2dx_CCMenuItemImage_create函式。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46