- 技術
Cocos2dx - Popup 實作小技巧
Popup 基本上就是在Scene 的最上層, 跳出一層對話框, 或者是轉圈圈的Loading小圖示等, Cocos2dx 有支援手機原生的對話框 - MessageBox。 MessageBox 相關文章 但如果要做一個較為精緻的遊戲 ex. Candy Crush, 客製化的 Popup是不可少的。 Trick1. 透過傳入 Scene node 建立 Popup 通常會先建立一個 單例 He
- 技術
Cocos2dx - Setter 以及 Getter 的用法
Setter 以及 Getter 是在將類別封裝時常使用的方式, 但針對每個變數實作Setter & Getter既繁瑣又麻煩, 所幸Cocos2dX 有實做出一組 Macro 可供開發者使用。 CC_SYNTHESIZE - 同時宣告Setter & Getter CC_SYNTHESIZE(<#varType#>, <#varName#>, <#f
- 技術
Cocos2dx - Singleton Class 範例
當系統中某項資源只有一個,而且絕對獨一無二時,最適合使用這個Pattern,也就是說使用這個Pattern可以確保物件個體只有一個,不會因programmer的疏忽而產生兩個或兩個以上。 Wiki - Singleton Setter & Getter CC_SYNTHESIZE 參考寫法 Singleton.h class Singleton { public: static Singl
- 技術
Cocos2dx - Spine 角色換裝備武器的方法
前幾天遊戲想要開發一個紙娃娃換裝備衣服的系統, 開始研究Spine的具體作法。 將心得整理如下: 技巧1. 關閉 or 隱藏關鍵的 Attachment spSlot *slot = animationNode->findSlot("SLOTNAME"); Slot_setAttachment(slot,0); 將Slot 的Attachment 設為零可以隱藏該Attachment。 技巧
- 技術
Cocos2dx - Sprite 更換圖片的方法
Cocos2dx 中 Sprite 的使用是很重要的一環, 其中關於換掉Sprite舊有圖片的做法有許多種。 網路上常見的兩種方法 參考連結 基本上網路上的做法為更換掉 Sprite 中的Texture, 或者將 SpriteFrame 中的DisplayFrame 換掉。 但必須得說, 這些做法都相對麻煩, 而且就效率來說與新建一張Sprite的成本, 差距不大。 於是有些時候我會採用下面的做法
- 技術
Cocos2dx - SpritePolygon, 產生 Sprite 的新方法
前一陣子看到的這個新玩意, 說新其實也不新了, 是v3.6 釋出的一個新類別, 目前經由實測後是相對穩定。 主要是透過 AutoPolygon 這個幫助類別, 來產生關於 Polygon 的資訊, 再丟入原先的Sprite類別繪製圖形。 // 自動產生多邊形的資訊 auto pinfo = AutoPolygon::generatePolygon("filename.png"); // 透過多邊形
- 技術
Cocos2dx - Unit Test中異步調用測試作法
需求: 在 Xcode 原生 Unit Test的架構中, 測試 C++程式碼中的網路調用API是否正確運行 無法使用 Obj-C 中 Block 作為異步調用的測試 (目前大部分 ios 開發的做法) 基本架構, 在 Unit test 函式中, 使用 while 迴圈以及控制Flag來強制函式停留在某個區塊 等到異步Callback 回傳時, 函式中更改 flag讓迴圈往下跑 test本體範例
- 技術
Cocos2dx - 事件 Event Dispatcher 的用法
事件分發器 (Event Dispatcher) 的機制是什麼? Event Dispatcher 是一種在Cocos2dx 偵測、回應使用者事件的機制。 透過 Event Listeners 去監聽使用者的事件, 基本上是透過 觀察者模式 實作此功能, Event Listeners也可以封裝對應事件處理的程式碼。 觀察者模式定義了物件之間的一對多關係,如此一來,當一個物件改變狀態,其他相依者都
- 技術
Cocos2dx - 使用 Parse 中 Rest 的方式
範例的 Project : Github 連結 : https://github.com/lenny0929/parseRest_WithCocos2dX/ Step1 建立對應的 Parse App 並設定好對應的資料格式 本範例為 testRest Step2 導入網路所需對應的header檔案 #include "network/HttpClient.h" using namespace c
- 技術
Cocos2dx - 使用 TextField 的小技巧
Cocos2dx 中的 TextField 並沒有很好使用, 文件中也有許多缺漏, 下面列出目前版本 (v3.7) 中的TextField 一些限制。 TextField 在用戶輸入時, 沒有在閃的鼠標 (Cursor), 所以實際使用情況會與 iOS 原生地Textfield 有所落差 TextField 沒有可以客製化的 Return 按鈕 無法選擇出現的 Keyboard 類型 那麼下面介紹
- 技術
Cocos2dx - 例外處理的方法
C++ 為主的例外處理 - throw exception double divide(double a, double b) { if (b == 0) { string error = "除法分母不得為0"; throw invalid_argument(error); } return a / b; } int main(void) { try { std::cout << di
- 技術
Cocos2dx - 傳入 Lambda 當作函式參數
自從 C++ 11 全面在 Cocos2dx 中使用後, 使得原本的Cocos2dx 更為強大, 其中筆者覺得造成改變最大的因素, 就有 Lambda 語法。 適用範圍: 任何想用 Lambda 當作 Callback 函式的時候 Step1: 搞清楚Lambda語法 是如何使用 C++ Lambda 語法簡介 Step2: 弄清楚C++ Function用法 C++ function 用法 St
- 技術
Cocos2dx - 同一 Sprite 有不同顏色設置的做法
前一陣子在做將同一個圖片精靈, 透過不同的渲染顏色, 得到類似但不同顏色的圖的效果時, 發現以 Cocos2dx 原生內建的 SetColor 函式並無法很好地實現該功能。 簡單說, 左圖是原圖, Cocos2dx 的 setColor 函式會得到中間的結果, 但理想的結果是右邊的圖時, 我們可以怎麼做。 後來在網路上搜尋找到有可以使用的類別, 主要的功能是針對 cocos2d::Sprite 色
- 技術
Cocos2dx - 在 Xcode中使用 Unit test 設置
想要在Cocos2dX 專案中使用 Xcode 內建的 Unit test Framework 需要額外做一些設置。 Step1. 準備好在Mac環境中設置好的 Cocos2dx 專案 (C++ 版本) Step2. 將 Unit test target 拉進專案中 - 按下左下角的 + 按鈕, 並選擇 Other -> Cocoa Touch Testing Bundle -> Ne
- 技術
Cocos2dx - 基礎概念與主要元件 Node
在Cocos2d-x-3.x引擎中, 採用的是樹狀結構來管理所有的節點 Node 類。 Node 類為 Cocos2dx 最基礎的元件, 所有的 Scene、 Layer 、 Sprite等元件類別都是衍生於 Node, 所以要介紹的第一個類別為 Node。 樹狀結構在 Cocos2dx 引擎中的應用隨處可見, 也影響了許多機制, 像是 Event Dispatch、 畫面Sprite前後的呈現等
- 技術
Cocos2dx - 多國語言的處理方式
多國語言在手機上的支援, 一向是App是否被推薦關鍵指標之一, 一般來說, 最少需要支援最常用的八國語言。 Step1. 使用 Singleton 作為 Helper 架構存取對應所需的字串 Singleton 範例參考 在Singleton開出對應的存取函式 static string getString(string key); Step2. 決定多國語言的實作方案 建議: 使用json 檔案
- 技術
Cocos2dx - 客製化 元件與 CocosStudio 元件導入合作
一般在處理遊戲畫面的時候, 會使用 CocosStudio 將畫面與遊戲邏輯拆開, 純粹處理各種元件的擺放、 位置、 錨點等, 之後再由 CocosStudio 輸出 .csb 檔案讓專案使用。 但 CocosStudio 僅提供標準元件, ex. Button、 Text等, 一般來說, 在遊戲中會繼承標準元件, 然後客製化該元件, 使這個客製化的元件有通用的一些行為, 例如: 按鈕的動畫、 行
- 技術
Cocos2dx - 幀動畫的使用方法比較
Cocos2dx 目前在幀動畫的使用方法有兩種。 一種就是手動的將圖片資源打包, 透過 Animation 這個類別將動畫播放。 程式碼如下 SpriteFrameCache::getInstance()->addSpriteFramesWithFile("line_animation_ccz.plist", "line_animation_ccz.pvr.ccz"); Vector<
- 技術
Cocos2dx 建立專案 - Mac 環境搭建
Step1. 官網下載cocos2dx 的 SDK 下載連結: http://www.cocos.com/download/ 文章使用的版本為 v3.7 Step2. 打開Terminal Step3. 在Terminal進入SDK所在的目錄下的 tools/cocos2d-console/bin/ 輸入 cd Downloads/cocos2d-x-3.7/tools/cocos2d-conso
- 技術
Cocos2dx - 從 Cocos Studio載入畫面
Cocos Studio 在目前的 Cocos2dx 的開發環境中, 扮演著相當重要的工具角色, 主要是在處理畫面上的細節, 像是擺放的位置、 簡單的動畫等。 一般會輸出做好的檔案為 .csb檔 或者 .json檔。 json檔案可讀性較佳適用於 Cocos2d-JS , csb檔案體積較小, 安全性較高適用於 Cocos2d-C++ 和 LuaBinding 載入 .csb 檔案 Step1.
- 技術
Cocos2dx - 漸層 LayerGradient 的使用方式
功能簡介 LayerGradient 漸層, 可以設置兩種顏色的漸變效果 LayerColor 一個純色的容器 下方為兩種不同的效果圖: LayerGradient LayerColor LayerGradient 為例, 創建函式有下面兩種, 通常會使用第二種, 前兩個為漸層的兩個顏色, 第三個參數是方向 /** Creates a full-screen Layer with a gradie
- 技術
Cocos2dx - 物理引擎 物理時間暫停
將場景中所有物體 Physicbody 暫停時間 Director::getInstance()->getRunningScene()->getPhysicsWorld()->setSpeed(0); 恢復時間 Director::getInstance()->getRunningScene()->getPhysicsWorld()->setSpeed(1);
- 技術
Cocos2dx - 翻牌動畫的實作
這陣子在做遊戲的時候, 遇到了一個實作的問題, 想要做出翻牌的效果。 之前在另一個 App - 銀河單字卡 中, 也有實做類似的功能。 是採用 cocos2dx之实现扑克牌翻转效果的三种方法 中所使用的 OrbitCamera 的做法, 效果其實還可以。 有興趣的話可以去下載 銀河單字卡 看看效果。 但, 今天在做研究的時候, 發現除了上述的三種方法外, 發現了更為簡單易用的做法。 效果如下 Yo
- 技術
Cocos2dx - 背景更換圖片的方式
如果使用 CocosStudio 作為場景的編輯器, 會發現可以當作背景容器的元件有舊有的 Sprite 以及3.X 加入的 ImageView 元件。 使用 Sprite 更換圖片的方式 以使用所佔用的記憶體與CPU來說, 效能是接近的, 但因為在 CocosStudio 中, 若想要設定元件的大小, Sprite 需要透過預設的圖片資源, 而 ImageView 可設可不設定, 所以我會選擇使
- 技術
Cocos2dx - 遮罩的實作方式
遮罩的實作方式有很多種, 最常見的是下面兩種: 1. 透過 OPENGLES 底層將圖讀入, 畫出遮罩範圍的圖 Texture 後, 再將該 Texture 設定回 Sprite 參見官網 : 如何使用COCOS2D-X3.0来给SPRITE添加遮罩 對於這樣的方式畫出遮罩, 主要的缺點在於會佔據不少的記憶體資源, 因為每次每次應用遮罩時, 多會額外創建一張 Texture進記憶體, 除此外, R