Saturday, April 12, 2014

Bài 4: Hello World. Bài code đầu tiên

Hi mọi người!

Dạo này không hiểu sao ốm yếu quá, ít có thời gian nghiên cứu. Nay sức khỏe đã tạm ổn, mình sẽ tiếp tục giới thiệu với các bạn bài đầu tiên về code. Mà không biết còn ai thắc mắc về cách cài đặt không?

Hiện tại đến thời điểm mình sửa bài này (7-11-2014, đã có Cocos2d-x 3.2 RC0) rồi. Và mình khuyên các bạn là chỉ nên tải và sử dụng các phiên bản có đuôi RC.x trở lên cho tới stable ( thường là ko ghi gì sau đuôi ví dụ 3.1.1 ) chứ ko nên sử dụng các bản Alpha.x hoặc Beta.x vì chúng vẫn còn trong giai đoạn thử nghiệm sẽ mắc nhiều lỗi không đáng có. Và khi mình update các phiên bản ( chỉ việc copy vào thư mục chưa Engine thôi - nội dung trong thư mục engine cũ thì xóa đi ) hầu như không gặp bất kỳ lỗi nào khi compile, run cả trên Win, hoặc Android. Chỉ gặp các lỗi liên quan tới code do thư viện của cocos2d-x có thay đổi 1 chút xíu ở phiên bản mới, sai đâu thì IDE sẽ báo ở đó để biết cách sửa thôi.

=> Cách cài đặt của các phiên bản Engine thế hệ 3.x là giống nhau ( tới thời điểm này ) nhé

Nếu các bạn đã từng học qua các loại ngôn ngữ lập trình, hẳn đã quen với loại bài viết Hello World, Your First Application rồi nhỉ. Ai đã tìm hiểu 1 chút rồi thì có thể xem nhanh qua phần này. Mình bắt đầu nhé.

A - Tạo và chạy thử Project

Đầu tiên, tạo một Project mới với tên Hello World bằng lệnh sau trong cmd

Run/cmd
>cocos new HelloWorld -p com.vn.HelloWorld -l cpp - d q:/android/myproject

Đợi khoảng 5 phút để nó tạo Project mới cho chúng ta

Xong rồi, vào Project mới tạo theo đường dẫn

Q:/android/myproject/helloworld, cấu trúc thư mục trong đó như sau:

Classes <- Quan trọng nhất nhé, nó chứa mã nguồn cpp hay lua tùy thuộc việc bạn chọn ngôn ngữ nào khi dùng lệnh new ở phía trên.
cocos2d <- thư viện của engine Cocos2d - x.
proj.android <- dành cho việc build ứng dụng apk cho Android mobile.
proj.ios_mac  <- dành cho việc build ứng dụng cho Iphone và Mac OS ( Chỉ chạy được trên máy của Apple, hoặc máy cài Mac OS.
proj.linux <- dành cho việc build ứng dụng trên máy Linux.
proj.win32 <- dành cho việc build ứng dụng trên hệ điều hành Window 7, 8
proj.wp8-xaml <- dành cho việc build ứng dụng chạy trên Window phone 8
Resources <- chứa ảnh, font chữ, Map, định nghĩa vật lý,v.v...
.cocos-project.json <- chỉ định việc build project với ngôn ngữ nào, lua hay cpp.
CMakeLists.txt <- Danh sách thư viện phục vụ việc build project.

Tiếp theo chúng ta build và run thử trên Window nhé. Lệnh sau

>cocos run -s q:/android/myproject/helloworld -p win32

(gõ cocos run -h để được help)

Lưu ý: 
1/ Win mình xài là Win 7 32 bít, bạn nào xài XP, Win 7 -  64, Win 8 all, thì mình ko biết nhé. Các bạn thử xem thành công không. (Đã cài đặt và chạy trên win 7 - 64 ngon lành cành đào nhé.). Đã có nhiều bạn chạy Win8 OK rồi nhé

2/ Mình ko chắc xài máy ảo VMWare có chạy được không nhé

3/ Bạn có thể build thành ứng dụng .apk để chạy trên máy ảo Android, hoặc chơi máy thật luôn cho máu

>cocos compile -s q:/android/myproject/helloworld -p android --ap 16
--ap 16 là chỉ định dành cho android 4.1.2 trở lên

cài vào máy ảo

>adb install q:/android/myproject/helloworld/bin/debug/android/helloworld-debug-unligned.apk
hoặc
>cocos run -s q:/android/myproject/helloworld -p android --ap 16

Nếu không báo lỗi nào và xuất hiện ảnh như thế này, nghĩa là bạn đã thành công rồi đó. Mình cam đoan nếu các bạn cài đặt như bài trước của mình thì chắc chắn sẽ thành công.



B - Tìm hiểu Code

Bên trên mới là phần tạo và chạy thử thôi, còn trong phần này chúng ta cùng tìm hiểu những dòng lệnh đầu tiên
Các bạn vào thư mục Classes của Project, trong đó có 4 file
AppDelegate.h, AppDelegate.cpp
HelloWorldScene.h, HelloWorldScene.cpp

Mới đầu mình chỉ nên tìm hiểu 2 file HelloWorldScene.h, HelloWorldScene.cpp thôi nhé. 2 file bên trên có chức năng theo dõi thông số của ứng dụng thôi. Nhưng bạn không thể xóa 2 file này nhé

file HelloWorldScene.h

#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__

#include "cocos2d.h"

class HelloWorld : public cocos2d::Layer
{
public:
    static cocos2d::Scene* createScene();

    virtual bool init();  
    
    void menuCloseCallback(cocos2d::Ref* pSender);
    
    CREATE_FUNC(HelloWorld);
};

#endif // __HELLOWORLD_SCENE_H__

cấu trúc rất giống 1 chương trình C++ phải không, thì nó chính là C++ mà, hehee

Trước khi tìm hiểu code, các bạn nên đọc qua, hoặc ôn lại kiến thức C++ chú nhé. Mình sẽ cố gắng giải thích các hàm chức năng hoặc các điểm mới trong cocos2dx 3 thôi

static cocos2d::Scene* createScene();  //tạo ra một cảnh mới
virtual bool init(); //Khởi tạo 1 đối tượng của lớp HelloWorld
void menuCloseCallback(cocos2d::Ref* pSender); //Nút Tắt ứng dụng
CREATE_FUNC(HelloWorld); //Chưa rõ lắm, nhưng tạm coi là cần phải có đi

file tiếp theo HelloWorldScene.cpp

#include "HelloWorldScene.h"

USING_NS_CC;

// hàm tạo 1 cảnh mới trả về con trỏ Scene*
Scene* HelloWorld::createScene()
{
  
    auto scene = Scene::create();  // tạo 1 đối tượng Scene
    
    auto layer = HelloWorld::create(); // tạo đối tượng HelloWorld

// thêm đối tượng HelloWorld vào Scene
    scene->addChild(layer);

// trả về con trỏ scene
    return scene;
}

// khởi tạo đối tượng HelloWorld
bool HelloWorld::init()
{
    //////////////////////////////
    // kiểm tra khởi tạo lỗi
    if ( !Layer::init() )
    {
        return false;
    }
    
// Lấy kích thước màn, và điểm tọa độ gốc
    Size visibleSize = Director::getInstance()->getVisibleSize();
    Point origin = Director::getInstance()->getVisibleOrigin();


    //tạo nút đóng ứng dụng

    auto closeItem = MenuItemImage::create(
                                           "CloseNormal.png",
                                           "CloseSelected.png",
                                           CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
    
// Đặt vị trí nút đóng tại điểm tính theo công thức bên dưới
closeItem->setPosition(Point(origin.x + visibleSize.width - closeItem->getContentSize().width/2 ,
                                origin.y + closeItem->getContentSize().height/2));

    // Tạo menu chứa nút đóng ở bên trên, đặt vị trí
    auto menu = Menu::create(closeItem, NULL);
    menu->setPosition(Point::ZERO);
    this->addChild(menu, 1); // thêm menu vào đối tượng HelloWorld

    /////////////////////////////
   // Tạo 1 dòng Text với font arial cỡ 24 pixel
    
    auto label = LabelTTF::create("Hello World", "Arial", 24);
    
    // đặt vị trí Text
    label->setPosition(Point(origin.x + visibleSize.width/2,
                            origin.y + visibleSize.height - label->getContentSize().height));

    // Thêm text vào đối tượng HelloWorld
    this->addChild(label, 1);

    // tạo 1 đối tượng loại sprite ( là các đối tượng có thể di chuyển trong game)
    auto sprite = Sprite::create("HelloWorld.png");

    // Đặt sprite lên vị trí giữa màn hình
    sprite->setPosition(Point(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));

    // Thêm đối tượng Sprite vào HelloWorld
    this->addChild(sprite, 0);
    
   // giá trị trả về của hàm init()
    return true;
}

// Hàm đóng ứng dụng
void HelloWorld::menuCloseCallback(Ref* pSender)
{

Director::getInstance()->end(); // Kết thúc chương trình.

// Nếu là IOS thì gọi lệnh exit(0);#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)

exit(0);

#endif

}

Tới đây, hẳn mọi người đã biết cách tạo và chạy thử 1 project thế nào rồi phải không. Lại còn biết được 1 phần code đơn giản nữa cơ đấy. Trong các bài sau nâng cao hơn sẽ giúp các bạn hiểu sâu hơn về Cocos2dx trong lập trình Game di động.
Bye bye!


56 comments:

  1. Mình build ra win32 thì được còn build ra android khi cài lên máy ảo thì lại lỗi, bạn cài thông số máy ảo như thế nào vậy?

    ReplyDelete
    Replies
    1. Bài 4: Hello World. Bài Code Đầu Tiên ~ Cùng Tôi Học Lập Trình Game Với Cocos2Dx >>>>> Download Now

      >>>>> Download Full

      Bài 4: Hello World. Bài Code Đầu Tiên ~ Cùng Tôi Học Lập Trình Game Với Cocos2Dx >>>>> Download LINK

      >>>>> Download Now

      Bài 4: Hello World. Bài Code Đầu Tiên ~ Cùng Tôi Học Lập Trình Game Với Cocos2Dx >>>>> Download Full

      >>>>> Download LINK ot

      Delete
  2. Máy ảo của bạn có bật lên được không. Nói thật là máy mình Ram 4G chạy không nổi, ì ạch lắm. và khi cài được vào máy ảo thì cài được, nhưng chạy không được, không báo lỗi gì cả,vào cái thoát ra luôn. Nên mình chẳng dùng máy ảo. Chơi máy thật luôn. build ra apk rồi cài vào máy thật đó. Ram 6G trở lên chắc chạy máy ảo mới ổn. Quan trọng là build cho máy thật xài mà. máy ảo để Test thôi, Win32 ( or 64 ) test OK mà

    ReplyDelete
    Replies
    1. Máy ảo bật bình thường bạn, máy thật thì chạy được, còn máy ảo chạy lỗi

      Delete
    2. Mình nghĩ là lỗi GPU của Emulation đó. Bạn nên chỉnh option của Emulator là Use Host GPU nhá. Nếu còn lỗi thì bạn bật Emulator lên rồi chạy cmd, gõ "adb logcat" xem bị lỗi gì nha.

      Delete
  3. Chạy lỗi như nào bạn? cụ thể hơn được không. Máy mình xài máy ảo chậm quá nên lười không chạy, toàn build win32 để Test thôi ( Build = cmd nhanh hơn = VS 2012 đấy). Trước mình có xài máy ảo thì thường là không chạy được app, Vào phát thoát app luôn. cũng chưa thử apk down trên Store xem như thế nào. Để rảnh thì test lại

    ReplyDelete
  4. Bạn tạo project mới bằng visual như nào? Mình tạo không được.

    ReplyDelete
    Replies
    1. This comment has been removed by the author.

      Delete
  5. Bản V3 mới dùng VS 2012 không có việc tạo Project = VS nhé bạn. Trước đây bản V2 + VS 2010 có tích hợp Add-in tạo được Project trong VS 2010, nhưng hiện giờ chỉ tạo được qua dòng lệnh cmd:

    >cocos new NewProject -p com.vn.NewProject -l cpp -d D:/project

    gõ cocos -h để được hiếp.

    Trong tương lai, mình chắc chắn, Cocos sẽ phát triển thành 1 dạng IDE ( dạng như Visual, hoặc Eclipse ) độc lập với các IDE nổi tiếng này. Mấy Engine khủng ( Unity, Unreal ,... ) chẳng phải thế sao, khi đó chắc chuẩn bị móc Ví đi là vừa ( chục củ đổ lại là cùng)

    ReplyDelete
  6. Nếu bạn xài máy MAC, có IDE xcode hỗ trợ tận răng, sướng lắm, nhưng mà ko có máy

    ReplyDelete
  7. Sau đó mình làm bằng cách này
    https://software.intel.com/en-us/articles/creating-multi-platform-games-with-cocos2d-x
    Cũng đơn giản hơn hẳn :D

    ReplyDelete
    Replies
    1. Cách của bạn đơn giản hơn chỗ nào nhỉ??

      Và xin trả lời là, link trên dùng cho Cocos2d-x 2.2 nhé.

      Bản mình hướng dẫn là 3.0 mà. Mới hoàn toàn. mọi lệnh compile đều gọi qua cmd window mà ko cần quan tâm tới python ở lớp bên dưới. Bạn xem cách nào thuận tiện hơn?

      Delete
  8. C:\Users\Thomas>cocos run -s D:Android/Cocos2dx/hello -p win32
    Runing command: compile
    Can't find config file .cocos-project.json in path D:\Android\Cocos2dx\hello

    ==> nó báo lỗi này nè, bạn có thể giúp mình được không

    ReplyDelete
    Replies
    1. Sai đường dẫn rồi, Project hello bạn để đâu? trong cocox ko có sẵn project hello nhé

      Delete
  9. Mình muốn chia sẽ một chút kinh nghiệm:
    Build trên máy Qsmart android
    1. Driver Qsmart
    https://docs.google.com/file/d/0Bzqexpv99eL0ZVNSUkVkVDRXSkE/edit
    2. Giải nén file ra
    3. Khi gắn máy Qsmart vào tìm driver ở file giải nén...
    4. Vào CMD gỏ lệnh> adb devices nếu thấy mấy hiện lên là ok
    ==> build trực tiếp qua máy luôn, Hổ trợ cho sdk khá tôt

    ReplyDelete
    Replies
    1. Tý quên phải có path ..\sdk\platform-tools

      Delete
  10. Bạn ơi mình build ra win32 mà bị lỗi này:
    '"C:\Program Files\Microsoft Visual Studio 11.0\Common7\IDE\devenv"' is not reco
    gnized as an internal or external command,
    operable program or batch file.

    ReplyDelete
    Replies
    1. Visual 2012 xịn chứ? hay bản Express, có cài VS khác không?

      Delete
    2. mình cài bản express, ak mình biết rồi dùng ultimate mới được :)

      Delete
  11. Bạn ơi nếu mình add thêm class vào rồi build cho android thì làm sao nó biết được class mới mình thêm vào cho project android vậy ? có cần chỉnh sửa file nào không

    ReplyDelete
    Replies
    1. Hãy đọc bài này

      http://laptrinhgamecocos2dx.blogspot.com/2014/04/chu-y-khi-bien-dich-project-cocos2dx.html

      Delete
  12. Mình tạo project ở đường dẫn D:/project/Hello
    Làm thế nào để mở project đó = VS 2012 vậy bạn?
    Thanks

    ReplyDelete
    Replies
    1. D:/project/Hello/proj.win32/hello.sln , CLick dup file .sln

      Delete
  13. Một câu hỏi nhỏ , mình viết trên eclipse trong ADT thì trong file classes không có các file .h và .cpp như bạn nói :D Có cách nào khắc phục không hay mình phải tự viết các file này :'(

    ReplyDelete
  14. File nào bạn? 4 file kể trên á? HelloWorldScene ?

    Bạn đã tạo Project = lệnh cmd chưa

    cocos new hello -p com.vn.hello -l cpp -d: d:/Project

    Sau đó mở Eclipse, rồi Import , chọn Android/ Existing .... chọn Project vừa tạo, vậy thôi

    ReplyDelete
    Replies
    1. Dạ ok anh , em đã giải quyết xong vấn đề . Vấn đề folder "classes" là linked folder nên em phải dẫn nó vào folder Classes nằm trong project cocos2d-x đã tạo .
      P/S : cám ơn anh vì tất cả . Nhưng em xin contact của anh trên facebook hoặc skype dc không ạ :D

      Delete
    2. Skype o Sidebar ben phai ne

      Delete
  15. Thời điểm comment cũng khá lâu so với bài viết .. không biết bạn có reply không ..
    Mình làm theo hướng dẫn ở trang chủ ( chỉ tải Cocos và Python 2.7 với VS2012 )
    Mình tạo project mới, rồi build, không có lỗi gì cả, nhưng cũng không hiện lên màn hình kết quả giống ở trên, mà nó hiện ra: http://discuss.cocos2d-x.org/uploads/default/_optimized/ed2/023/29b7cea6d1_666x500.jpg
    Mình không biết có phải cài Android SDK NDT gì gì đó không vì thấy cài khá phức tạp + nặng + lâu .. mong bạn giúp đỡ người mới tập tành như mình :)

    ReplyDelete
    Replies
    1. Build win32 thì ko cần SDK, NDK, nhưng bạn nên dùng VS2012 bản ultimate ( đang dùng Express kìa ). Nhiều người dùng bản Express cũng bị nhiều lỗi khác nhau. Bản Express là bản miễn phí đúng ko nhỉ, chắc sẽ bị giới hạn.

      Delete
    2. Ohm ... Mình sẽ thử sau ..
      Mình đã cài và làm theo hướng dẫn ở Bài 3 và mọi thứ chạy tốt
      Nhưng mình build android thì báo lỗi
      1 là lỗi long int tell() gì đấy, đọc comment trên blog và cũng fix được rồi
      Sau đó mình tạo project mới và build android bằng cmd
      > cocos run -s F:/Testing -p android --ap 10
      Chạy một lúc cuối thì báo lỗi SDK gì đấy
      Rồi mình chạy trên win32
      > cocos run -s F:/Testing -p win32
      Báo lỗi tiếp @@
      Đây là file hình ( mình bôi trắng để phân biệt build android [ trên ] và build win32 [tô trắng] )
      Project của mình tên Testing là empty project và bản cocos 3.2 final
      http://i1383.photobucket.com/albums/ah295/vinhloiz98/a_zpsfb60a39e.jpg

      Delete
    3. Win32: Cài Ultimate nhé

      Android, build = Eclipse, nhiều người win8 cũng dính lỗi build Android thế này.

      Delete
    4. Android build Eclipse cũng không chạy, cài lại VS Ultimate luôn cũng vẫn báo lỗi như trên .. @@
      Mới tập tành mà nhiều lỗi khó hiểu quá ..

      Delete
  16. Anh ơi.Sao em build được trên win32 mà sao không build được trên android nhỉ.a TeamView em được không?

    ReplyDelete
  17. Em sửa lỗi file Java rồi.nhưng khi chạy trên máy thật nó hiện rất tiêc,ứng dụng đã dừng lại k hiểu luôn :(

    ReplyDelete
    Replies
    1. Ây, project hello mà cũng bị á, máy đt gì thế? bài này là nhẹ nhất rồi. Chắc có lỗi, build lại xem

      Delete
    2. **** Build of configuration Release for project Helloworld ****

      python D:/android/project2/Helloworld/proj.android/build_native.py -b release all
      The system cannot find the path specified.
      The Selected NDK toolchain version was 4.8 !
      Traceback (most recent call last):
      File "D:/android/project2/Helloworld/proj.android/build_native.py", line 159, in
      build(opts.ndk_build_param,opts.android_platform,opts.build_mode)
      File "D:/android/project2/Helloworld/proj.android/build_native.py", line 146, in build
      do_build(cocos_root, ndk_root, app_android_root,ndk_build_param,sdk_root,android_platform,build_mode)
      File "D:/android/project2/Helloworld/proj.android/build_native.py", line 82, in do_build
      raise Exception("Build dynamic library for project [ " + app_android_root + " ] fails!")
      Exception: Build dynamic library for project [ D:\android\project2\Helloworld\proj.android ] fails!

      Delete
    3. Lỗi này sửa sao?

      NDK bản bao nhiêu, mới nhất giờ là r10 - build android bị lỗi nhé

      Delete
  18. vâng.lỗi ý đấy a.e build trên visual đc a ạ

    ReplyDelete
  19. Maý em là Asus zenphone 4 a ạ

    ReplyDelete
    Replies
    1. Hay, Zenfone chip Intel, ko phải ARM thông thường, nên có thể gặp lỗi, bạn phải cài API cho chip Intel ( có mục x86 gì đó) bằng SDK Manager. thử lại xem

      Delete
    2. Em thử rồi vẫn k được a ạ.a teamview cho e được k?

      Delete
  20. Mình có 1 thắc mắc là làm sao để xoá những dòng text GL verts + calls :(

    ReplyDelete
  21. Can't find the Visual Studio's path in the regedit. Khi compile gặp lỗi này là sao hả bạn?

    ReplyDelete
    Replies
    1. - Là do trước đó từng cài VS 2010 rùi xóa đi, nhưng vẫn còn trong registry của 64bit. Các bạn nào xài win 64bit bị lỗi này thì uninstall vs2010 rùi vào regedit và vào đây: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft xóa cái VisualStudio đi nhé, tiếp theo vào đây: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft tìm VisualStudio và xóa luôn, sau đó cài vs2012 hoặc vs2013 rồi run cocos lại là xong ^^
      (Thanks to Dev Bananaer)

      Delete
  22. sao của mình khi build dùng lệnh --ap 16 báo lỗi nhỉ bỏ đi thì build bình thường

    ReplyDelete
  23. Hi bạn, cám ơn bạn về những bài hướng dẫn chi tiết, nhưng có điều chưa rõ là mình dùng gì để quản lý project và code, Visual Studio hay Eclipses?

    ReplyDelete
    Replies
    1. Dùng Cả 2 bạn nhé, nhưng theo mình thì

      + Xài nhiều VS hơn ( 75% thời gian) vì sẽ thường xuyên test trên máy tính trước.
      + Xài Eclises khoảng 25% còn lại khi cần build, test lỗi, thêm plugin, hoặc xử lý code java

      Delete
  24. Bạn ơi! Mình mới học! Có cái này mình không rõ! Khi build cho win32 thì chạy ngon lành! Cơ mà khi build cho android xong, adb install nó lại báo device not found! Wating for device!

    ReplyDelete
    Replies
    1. Cài máy ảo JVM nhé bạn thì mới chạy test apk được

      Delete
    2. Mình chạy được rồi! Thank nha!

      Delete
  25. help me!! sao mình chạy code " >cocos run -s q:/android/myproject/helloworld -p win32
    lại báo lỗi này nhỉ

    To attach the debugger from the command line, use:
    VsJITDebugger.exe -p
    Error running command, return code: 1.

    .. giúp mình vs

    ReplyDelete
  26. bộ ADT của em cài Android 4.4 API 19.Build ra toàn bị báo lỗi
    19 is not a valid Android target platform.
    Ai biết fix lỗi này giúp em với ạ.
    thanks !!!!

    ReplyDelete
  27. AD ơi giúp mình với:
    Thay vì mỗi lần create một project mới phải mở cmd lâu lắc nên MINH viết một file Batch thế này:

    cls
    @echo off
    echo:
    echo ====================================COCOS2DX====================================
    echo GAME PROGRAMMING
    echo Create a new project.
    echo:
    set /p projectname = Project name:
    set /p packagename = Package name:
    set /p location = Location of project:
    cocos new %projectname% -p %packagename% -l cpp -d %location%
    echo on
    exit

    Nhưng nó không chạy và báo thế này:
    https://drive.google.com/open?id=0B7sQdW0uEZZLNWFLVzd4R2xwcHM

    AD vui lòng giúp mình với. Cám ơn trước!

    ReplyDelete
  28. Những câu lệnh trên đều phải học thuộc hết à anh ?
    như kiểu tạo cảnh, nút thoát ....

    ReplyDelete
  29. cài x0ng mình run nó báo lỗi này là sao hả m.n
    error running command return code -1073741515

    ReplyDelete
  30. Bài 4: Hello World. Bài Code Đầu Tiên ~ Cùng Tôi Học Lập Trình Game Với Cocos2Dx >>>>> Download Now

    >>>>> Download Full

    Bài 4: Hello World. Bài Code Đầu Tiên ~ Cùng Tôi Học Lập Trình Game Với Cocos2Dx >>>>> Download LINK

    >>>>> Download Now

    Bài 4: Hello World. Bài Code Đầu Tiên ~ Cùng Tôi Học Lập Trình Game Với Cocos2Dx >>>>> Download Full

    >>>>> Download LINK

    ReplyDelete