Hi mọi người!
Mình đã trở lại và bớt ăn hại hơn. Vì, sau 1 thời gian nghiên cứu mày mò, công việc tiến triển khá thuận lợi. Quả thật để sử dụng tốt được Engine dạng mã mở như thế này đã tiêu tốn của mình khá nhiều thời gian, công sức. Có sẵn code toturial rồi mà khi biên dịch còn lỗi tùm lum, tìm rất khổ. Mình tổng kết vào đây những lỗi phổ biến khi biên dịch để các bạn chú ý. Có lỗi nào là cập nhật ngay lỗi đó.
Vì mình làm trên Window nên build file trực tiếp trên ra file exe ( bắt buộc cài VS 2012 trở nên nhé). Không nên xài bản Express các bạn nhé. Crack đầy ra đấy, xài bản miễn phí Express làm gì.
Lệnh CMD
WIN
>cocos compile -s q:/android/myproject/test -p win32
>cocos run -s q:/android/myproject/test -p win32
Android
>cocos compile -s q:/android/myproject/test -p android --ap 1x
( x từ 0 đến 9 - bắt buộc SDK Manager phải cài bản API 10 ) . --ap ( có 2 dấu ngang)
Lưu ý quan trọng
1 dự án Mẫu bao gồm 4 file cơ bản
AppDelegate.h
AppDelegate.cpp
HelloWorldScene.h
HelloWorldScene.cpp
1/ Cấu trúc file
Trong Window
và 1 file quan trọng là test.vcxproj theo đường dẫn Q:\ANDROID\MyProject\Test\proj.win32 mở và tìm AppDelegate hoặc HelloWorldScene. Bạn sẽ thấy tên 4 file cần để biên dịch nằm ở đây. Nếu thêm 1 file nào mới bạn phải add vào theo đúng cú pháp. nếu thừa hoặc thiếu 1 file nào đó trong này cũng sẽ báo lỗi.
Nếu bạn Build cho Android: Bạn cũng phải bổ sung thêm file mới vào file Android.mk nằm trong đường dẫn sau
ProjectName\proj.android\jni\Android.mk
Trong các file (.h) nên có dòng lệnh USING_NS_CC; ở dưới phần #include, để tránh một số lỗi ( điển hình là PhysicsContact.
2/ Số lưu ý về Function
contactListener->onContactBegin = CC_CALLBACK_1(GameScene::onContactBegin, this);
CC_CALLBACK_1 chứ ko phải là CC_CALLBACK_2
bool GameScene::onContactBegin(const PhysicsContact& contact)
chứ ko phải
bool GameScene::onContactBegin(EventCustom* event, const PhysicsContact& contact)
3/ Build Android
Bạn mở file Android.MK trong prj.android, thêm vào Class mới tạo như sau ( ví dụ file GameOverScene.cpp)
Chú ý dấu "\" ở dòng gần cuối cùng
Dòng cuối cùng ko cần dấu này
4/ Vòng lặp For cho Vector
vector<T> vec;
for(auto i : vec){} // Chuẩn C++ 11
5/ Phiên bản 3.1
Khi bạn download bản Cocos2d-x 3.1 mới nhất về, nếu build các Project cũ sẽ bị lỗi, nhiều lỗi là khác
6/ Build project trên Window, file chạy ở đâu?
Nhiều bạn hỏi mình build game trên win xong click ko chạy?
Đó là do các bạn build game trên win xong lại vào thư mục Proj.win32/Debug.win32 để chạy file Exe trong đó. Vâng, bạn có build 1000 lần thì cũng ko thể chạy nổi vì trong đó KHÔNG CÓ RESOURCE cho game nên Force Stop ngay
=> Các bạn phải vào thư mục PUBLISH ( ngang hàng Proj.win32, Class,.. ) đối với Engine 3.1, hoặc vào thư mục BIN ( cũng ngang hàng Proj.win32, Class,...) với Engine 3.0. Hãy nhớ kỹ!
7/ Chỉnh Độ phân giải (Resolution) trên Window
Khi bạn build ra Android, hoạc IOS, thì tỉ lệ khung hình ( độ phân giải - Resolution ) bạn chỉnh trong file AppDelegate.cpp ( game Sushi) rất dễ dàng. Tuy nhiên, và thường thì bạn sẽ build trên win trước để test game. vậy làm sao chỉnh độ phân giải??
Hãy làm như sau, tìm file CCGLView.cpp theo đường dẫn ( Nằm trong game nhé, không phải trong Engine)
YOURGAME\cocos2d\cocos\platform\desktop mở file CCGLView.cpp
search "960" sẽ thấy 1 dòng thế này ( dòng 288 thì phải )
if(ret && ret->initWithRect(viewName, Rect(0, 0, 960, 640), 1)) {
Đây chính là kích thước màn hình game trên Desktop, giờ thì chỉnh bao nhiêu tùy bạn thôi, tùy thuộc game ngang hay dọc mà chỉnh dài x rộng cho hợp lý.
8/ Phân biệt các loại Macro CC_CALLBACK_x
Chắc có nhiều bạn từng thắc mắc cái dòng Macro ở trên vẫn hay dùng trong code nghĩa là gì, khi nào dùng phải không.
Update thêm nhiều lắm!
Chúc các bạn sẽ có nhiều game hay!
Bạn làm ơn cho mình hỏi, khi mình build thử cocos2d-x v3.1 nền win32 thì làm sao để chỉnh được resolution cho khung hình chuẩn dạng dọc hoặc ngang? Nó chỉ toàn chạy 1 khung 800x600 rất khó coi. Mình code trên windows7 Visual Studio 2012 với cocos2d-x v3.1
ReplyDeleteKo phải 800x600 mà chính xác là 960x640px
ReplyDeleteBạn chỉnh như thế này
YOURGAME\cocos2d\cocos\platform\desktop mở file CCGLView.cpp
search"960" sẽ thấy 1 dòng thế này ( dòng 288 thì phải )
if(ret && ret->initWithRect(viewName, Rect(0, 0, 960, 640), 1)) {
Đây chính là kích thước màn hình game trên Desktop, giờ thì chỉnh bao nhiêu tùy bạn thôi, tùy thuộc game ngang hay dọc mà chỉnh dài rộng cho hợp lý.
Cám ơn bạn nhiều nhé nhưng mình đã tự tìm được giải pháp rồi, đơn giản lắm chỉ cần thêm 3 dòng code sau vào trontg hàm AppDelegate::applicationDidFinishLaunching của file AppDelegate.cpp là được:
ReplyDelete// Đặt khung cho cửa sổ test của winform là 640x1136
glview->setFrameSize(640, 1136);
// Đặt phân giải cho giao diện hiển thị khít với khung hình 640x1136
glview->setDesignResolutionSize(640, 1136, ResolutionPolicy::EXACT_FIT);
// Dòng này để fix lỗi hiển thị khung hình mặc định bị zoom2x trên winform
glview->setFrameZoomFactor(0.5f);
Ô, ngon, giờ mới biết, kể ra xài Visual + Visual Assist X, khi gõ đối tượng glview nó sẽ ra mấy hàm này, quên mất, làm mày mò trong file
DeleteCho mình hỏi chút ,mình dùng eclipse trong ADT để lập trình game trên mobile , mình chọn engine là cocos2d-x-3.0 , khi tạo project mới thì các folder trong project như : classes, cocos2dx, extensions có hiện dấu chấm cảm . Điều này có ảnh hưởng gì không .
ReplyDeleteP/S : mình có thể có kênh liên lạc khác với bạn để trao đổi được không ? Mình là sinh viên năm tư đang đam mê và tự mày mò (100%) mọi thứ :(
Cho mình link ảnh được ko? Mình ít xài Eclipse, toàn chơi VS
Delete+ Bạn có build bằng Eclipse được không ( chú ý đường dẫn JDK, NDK trong Eclipse) nếu build được thì không vấn đề gì cả.
--ap 1x cái này điền số thế nào vậy ạ ?nó dựa theo cái gì để điền vậy?
ReplyDelete1x 2x là số phiên bản Android đó bạn
DeleteAndroid 4 thì là 19,
sau này là 20, 21, 22, 23
Đâu phải, mình ko quan tâm lắm đến cái đuôi mk, dùng Notepad ++ đọc được là được rồi
ReplyDeleteanh ơi em bị lỗi tiếng việt khi làm game cocos trên Visual studio 2015 , anh biết cách sửa không chỉ em với
ReplyDeletecho hỏi e build ra andori rồi nhưng bị lỗi ứng dụng thông báo bản cập nhật mới, hoặc để game đã tạm ngừng fix như thế nào ạ
ReplyDeletemình xin link facebook để tiện trao đổi được không bạn ?
ReplyDelete