以下我們再看看詳細的程式代碼,首先看一下HelloWorldScene.h檔案,它的代碼例如以下:
上述代碼第①~②行是定義個枚舉類型SpriteTags。枚舉類型SpriteTags中定義了三個常量。這三個常量相應場景中的三個精靈的标簽(Tag)屬性。代碼第③行聲明了層聲明周期的onEnter()函數。我們将在該函數中注冊監聽器和初始化設定。第④行代碼是聲明了層聲明周期的onExit()函數。我們将在該函數中登出監聽器和釋放一些資源。代碼第⑤~⑥行是聲明單點觸摸事件回調函數。
HelloWorldScene的實作代碼HelloWorldScene.ccp檔案,它的HelloWorld::init()代碼例如以下:
我們在HelloWorld::init()函數中初始化了場景中的背景和三個方塊精靈。代碼第①~④行是建立并加入背景,圖8-3所看到的的背景是由一個128x128紋理圖檔(BackgroundTile.png)重複貼圖上,這樣能夠降低記憶體消耗,在第①行代碼中建立背景精靈對象。注意背景的大小仍然是整個螢幕。第②行代碼是設定貼圖的紋理的參數。Texture2D::TexParams類型是一個結構體。
第③行代碼是将參數設定到背景精靈的紋理上。第④行代碼是加入背景精靈到目前層。
代碼第⑤~⑥行是建立了三個方塊精靈,在加入它到目前層的時候我們使用三個參數的addChild(Node* child,int localZOrder,int tag)函數,這樣能夠通過localZOrder參數指定精靈的顯示順序。
上述代碼第①行是建立一個單點觸摸事件監聽器對象。第②行代碼是設定是否吞沒事件,假設設定為true,那麼在onTouchBegan函數傳回 true 時吞沒事件,事件不會傳遞給下一個Node對象。第③行代碼是設定監聽器的onTouchBegan屬性回調函數。第④行代碼是設定監聽器的onTouchMoved屬性回調函數。
第⑤行代碼是設定監聽器的onTouchEnded屬性回調函數。
代碼第⑥~⑨行是加入監聽器。當中第⑦行使用精靈顯示優先級加入事件監聽器。當中參數getChildByTag(kBoxA_Tag)是通過精靈标簽Tag實作獲得精靈對象。第⑧行和第⑨行代碼是為另外兩精靈加入事件監聽器。當中listener->clone()獲得listener對象。使用clone()函數是由于每個事件監聽器僅僅能被加入一次。addEventListenerWithSceneGraphPriority和addEventListenerWithFixedPriority會在加入事件監聽器時設定一個注冊辨別。一旦設定了注冊辨別。該監聽器就不能再用于注冊其他事件監聽了。是以我們須要使用listener->clone()克隆一個新的監聽器對象,把這個新的監聽器對象用于注冊。
HelloWorldScene.ccp中的觸摸事件回調函數代碼例如以下:
上代碼第①行是定義回調函數touchBegan。
第②行代碼是擷取事件所綁定的精靈對象,當中event->getCurrentTarget()語句傳回值是Node對象。static_cast<Sprite*>是強制類型轉換為Sprite對象。
第③行代碼是擷取目前觸摸點相對于target對象的本地坐标。第④行代碼是獲得target對象的尺寸。第⑤行代碼是通過target對象的尺寸建立Rect變量。
第⑥行代碼rect.containsPoint(locationInNode)是推斷是否觸摸點在target對象範圍。
第⑦行代碼是放大target對象。
第⑧行代碼傳回true,表示能夠回調第⑨行touchMoved函數和第⑪行touchEnded函數。第⑩行代碼是移動target對象的位置。
HelloWorldScene.ccp中的HelloWorld::onExit()代碼例如以下:
上述HelloWorld::onExit()函數是退出層時候回調,我們在這個函數中登出全部的監聽事件。
提示 多點觸摸事件是與詳細的平台有關系的,在Win32平台下我們無法測試多點觸摸。其實多點觸摸和單點觸摸開發流程基本類似,這裡我們就不再贅述了。
本文轉自mfrbuaa部落格園部落格,原文連結:http://www.cnblogs.com/mfrbuaa/p/4872632.html,如需轉載請自行聯系原作者