Video - Hướng dẫn cài đặt Cocos2d-x V3.0 FINAL - Install Cocos2d-x v3.0 Final - 100% Working

Người đăng: chisenhungsuutam on Thứ Tư, 30 tháng 4, 2014

Lần đầu làm Video, có gì sai sót, mọi người bỏ qua. Quay đi quay lại 3-4 lần thôi,

Các bạn chú ý theo dõi kỹ nhé

Đoạn cuối có Bonus 1 tí, Các bạn xem và ủng hộ



Các Video lần sau mình sẽ làm công phu hơn
More about

Bạn muốn tham gia kiếm tiền trên Aztop không? Hãy bắt đầu từ bài viết này.

Người đăng: chisenhungsuutam


 
Việc kiếm tiền trên mạng  bây giờ không còn là mới, việc bị lừa đảo trong quá trình tham gia kiếm tiền trên mạng cũng không còn là mới. Nhưng việc kiếm tiền trên Aztop vẫn còn là mới mẻ với nhiều người.

Khi tham gia kiếm tiền trên một site bất kì (thường là miễn phí), các MMO thường đặt câu hỏi: Liệu site này có lừa đảo không? Với Aztop thì sao? Rất nhiều người đã đặt câu hỏi này khi thấy phí tham gia của nó lên đến 15000đ.
Đọc thêm »
More about

Bài 8: Menu - từ cơ bản tới phức tạp ( Part2)

Người đăng: chisenhungsuutam on Thứ Ba, 29 tháng 4, 2014

Hi 30-4, 1-5!

Tình hình là 2 ngày không được nghỉ, chả biết làm gì, đi làm thì chán chán, đi chơi thì 1 mình nên đành rảnh rỗi ngồi viết bài cho vui vậy. Các anh chị em giờ này chắc đang vi vu tận đẩu tận đâu rồi ấy nhỉ. Còn mình thì đi làm, nhưng mà không sao, double lương cũng tạm.

Bài trước chúng ta đã biết cách tạo Label chứa text và cách chỉnh font, cùng với việc tạo 1 menu chứa item để thực hiện 1 tác vụ nào đó. Để nhớ lâu, các bạn nên dùng VS 2012 gõ lại từng đoạn code nhé. Còn trong bài này chúng ta sẽ đi sâu hơn với một số công việc sau:

+ Tạo hiệu ứng chuyển cảnh cho mỗi Scene
+ Tạo công việc cho các nút của Menu
+ Thêm một chút hiệu ứng cho Label, ví dụ như chuyển động chẳng hạn.

Bắt đầu thôi. Các down file Source ở ĐÂY về, giải nén rồi paste đè vào thư mục Classes của project menu nhé.

Sau đó, bạn chỉnh file Menu.vcxproj (f:/android/project/menu/proj.win32) như thế này để không bị lỗi khi compile



Biên dịch rồi chạy thử cái xem thế nào

>cocos run -s f:/android/project/menu -p win32

Bạn có thấy thay đổi gì không, có hiệu ứng chuyển Scene, hiệu ứng dịch chuyển chữ, và Click vào 2 menu sẽ chuyển sang Scene khác. OK. Tiếp theo chúng ta sẽ đi vào chi tiết phần code xem làm thế nào để được như vậy.

Chi tiết phần Code

Các file SceneManager.h, và MenuLayer.h không thay đổi gì so với phẩn 1. Ở phần 2 này chúng ta thấy có 2 lớp mới xuât hiện đó là CreditLayer, PlayLayer để quản lý 2 thao tác khi nhấn vào 2 menu khác nhau của chúng ta. Bạn mở 2 file CreditLayer.h, và PlayLayer.h ra nhé

Nói chung là ko có gì đặc biệt phải không , ngoài mấy cái hàm tạo, hàm hủy, rồi hàm init, hàm back ( để ấn nút Back xuất hiện ở Scene này). 2 đối tượng này có mỗi một việc là tạo ra 2 cái Layer rồi sau đó sẽ dính vào 1 Scene nào đó. Bỏ qua 2 file này nhé.

A > Tiếp theo mở file CreditLayer.cpp ra, nhìn vào hàm init() // Hàm này tạo ra 1 layer trống để gắn đối tượng. Trong hàm init () này có đoạn code cần chú ý

auto back = MenuItemFont::create("Back", CC_CALLBACK_1(CreditLayer::back,this)); (1)
auto menu = Menu::create(back, NULL); (2)
menu->setPosition(visibleSize.width/2, visibleSize.height/2);
this->addChild(menu);

(1) Đây là câu lệnh quen thuộc đã học từ bài 7, nhiệm vụ tạo ra 1 item menu tên back, khi ấn vào item menu này sẽ gọi hàm CreditLayer::back() ở phía dưới
(2) là câu lệnh cũng quen thuộc có nhiệm vụ tạo ra 1 Menu chứa cái item menu back đã tạo ở trên.
Còn đoạn bên dưới là đặt vị trí Menu trên ở chính giữa màn hình, sau đó dính cái menu này vào Layer tạo ra bởi hàm init()

B > Tiếp theo mở file PlayLayer.cpp, ta thấy rằng các dòng code hoàn toàn tương tự file CreditLayer.cpp, cũng là tạo ra 1 nút back rồi gắn vào Layer này. Các bạn nghiên cứu kỹ lại cho nhớ nhé.

C > Tiếp theo chúng ta nghiên cứu file MenuLayer.cpp, file này có code khá giống Bài 7 đã nghiên cứu, tuy nhiên, nó bổ sung thêm 1 vài code tạo hiệu ứng di chuyển mấy cái Label, xem qua chút nhỉ. Trong hàm init() ta thấy các câu lệnh quen thuộc để tạo ra các Label chứa Text với font chữ, và cỡ chữ xác định, đặt chúng lên Layer tại các vị trí. Nhưng có 1 đoạn code khá lạ, chúng ta cùng xem:

titleLeft->setPosition(titleLeftPosBegin);
Action *titleLeftAction = Sequence::create(
                            DelayTime::create(delayTime),
                            EaseBackOut::create(MoveTo::create(1.0, titleLeftPosEnd)),
                            NULL);

titleLeft->runAction(titleLeftAction); // titleLeft là 1 cái Label nhé
this->addChild(titleLeft);

Đoạn code này hiểu như sau: nhiệm vụ của nó là tạo ra một hành động có tên titleLeftAction = lệnh Sequence::create(). Hành động này cụ thể là gì? hãy xem trong hàm Sequene::create(), hàm này có 3 tham số truyền vào
DelayTime::create(delayTime) // là tạo ra thời gian trễ
 EaseBackOut::create(MoveTo::create(1.0, titleLeftPosEnd)) // MoveTo::create(1.0, titleLeftPosEnd) là hàm tạo 1 hành động di chuyển từ điểm đầu tiên titleLeftPosBegin (đã tính toán ở đoạn code bên trên - trong source) đến điểm cuối titleLeftPosEnd ( cũng đã tính toán trong source), EaseBackOut là 1 lớp tạo ra hiệu ứng ( ko biết phải dịch là gì - đây là 1 trong các hiệu ứng di chuyển thông dụng )
NULL : tham số thứ 3 này chưa hiểu lắm, để hiểu sâu hơn hãy nghiên cứu ở đây http://www.cocos2d-x.org/reference/native-cpp/V3.0rc0/index.html

Lệnh titleLeft->runAction(titleLeftAction); là thực hiện cái hành động di chuyển ở bên trên bằng cách gọi function của đối tượng titleLeft ( đây là 1 cái Label ).

this->addChild(titleLeft); // Gắn cái Label vào Layer tạo bởi init(); 

Đoạn code bên dưới cũng tương tự thế, tạo ra 1 chuyển động cho 1 cái Label khác. OK chưa

Giờ thì tới đoạn này, khá khó hiểu

   for (Node *each : menu->getChildren())
    {
each->setScale(0.0f, 0.0f);
Action *action = Sequence::create(DelayTime::create(delayTime),
                                          ScaleTo::create(0.5f, 1.0f),
                                          NULL);
delayTime += 0.2f;
each->runAction(action);
     }

Đây là vòng lặp for để duyệt các item của Menu đó chính là nút Credits và nút New Game đó ( 2 nút này được tạo ra ở bên trên - trong Source, MenuLayer.cpp)

for (Node *each : menu->getChildren()) cũng khá lại so với for (i=0; i<n; i++) cơ bản của C++ nhỉ, hêhe, nhưng chính xác nó là 1 vòng lặp để duyệt các đơn vị của 1 tập nào đó.

Trong vòng lặp

each->setScale(0.0f, 0.0f); là chỉnh cái nút menu Credits , New Game về tỉ lệ 0, biến mất còn gì, sau đó đến lệnh

Action *action = Sequence::create(DelayTime::create(delayTime),
                                          ScaleTo::create(0.5f, 1.0f),
                                          NULL);
là tạo ra 1 hành động phóng to dần cái nút này lên với tỷ lệ nhất định ScaleTo::create(0.5f, 1.0f),
sau đó là thực hiện hành động each->runAction(action);  Kết quả là tạo 1 hiệu ứng cái nút đó phóng to dần lên thôi, đơn giản và dễ hiểu quá phải không.

D > Tiếp theo chúng ta nghiên cứu file SceneManger.cpp, file này dùng để quản lý các Scene được tạo ra và chạy như thế nào, đồng thời khi chuyển từ Scene này sang scene khác có kèm 1 hiệu ứng chuyển cảnh ( như làm mờ, lộn ngược, quay đảo, v.v...)

Mở file lên nào, Trời ơi, sao code dài thế ~150 dòng code cùng với rất nhiều hàm. Vâng, bạn ạ, thực ra code dài nhưng đơn giản dễ hiểu còn hơn đoạn code ngắn mà phức tạp đọc không hiểu gì. Mình nhớ có lần làm 1 bài tập lớn, search mạng đọc 1 cái code Java thì phải có sấp sỉ 10000 dòng (Notepad ++) đọc mãi mới xong. 

Trong file này tuy nhiều code nhưng thật ra có nhiều đoạn code chức năng na ná nhau đó là tạo ra 1 hiệu ứng chuyển cảnh cho Scene, thế nên mình chỉ giới thiệu với các bạn 1-2 đoạn thôi nhé. Bạn yên tâm rằng các hiệu ứng chuyển cảnh này đều được định nghĩa bằng các lớp tương ứng của Cocos2dx V3 nhé ( ví dụ: TransitionFlipY - lộn theo trục Y,  TransitionFade - làm mờ dần, TransitionZoomFlipX - phóng to theo trục X ) vậy đó

- Bài này đang tạm dừng...

Bài 9: Làm game đầu tiên - Tạo nhân vật (Part -1)
More about

Tài liệu tiếng Việt học Cocos2dx

Người đăng: chisenhungsuutam

Hi all!

Đúng là học thầy không tày học bạn, học bạn không bằng...tự đọc sách. Đọc sách mà cũng không xong thì khỏi học. hêhê

Nói vậy cho vui thôi, khi học bất cứ ngành nghề gì chúng ta đều phải cần tới sự hướng dẫn chỉ dạy từ những cuốn sách, từ thầy giáo hoặc bạn bè, và ngày nay là bác Google.

Sau một thời gian tìm tòi trên mạng, mình cũng tìm được Vô số sách hướng dẫn Cocos2d-x trên mạng NHƯNG, toàn phiên bản cũ 2.x đổ về trước.VÀ có một khó khăn nữa là, 

1/ Sách đó toàn tiếng ANH, TRUNG, HÀN, NHẬT. ( không đến nỗi ko thể đọc)
2/ Trong sách chỉ có một số đoạn code, hướng dẫn, giải thích. Còn lại Source đầy đủ nằm trong đĩa gốc hoặc trên 1 trang tính phí ( bán kèm sách online mà )

Có một cuốn nổi tiếng nhất là Cocos2d-x by Exam mình cũng tìm thấy nhưng cũng mắc phải 2 vấn đề trên, nên mình quyết định là tự mình tìm hiểu Engine vậy. Vì đọc sách với code cũ có khi mất thời gian viết lại code cho Engine mới .

Dù sao mình cũng sẽ chia sẻ với các bạn tài liệu này để tham khảo. bạn nào xài Engine cũ cũng rất hữu ích đấy. Trong sách này có 4 Game, mình mới có 1 game đủ source code. Chia sẻ sau nhé

More about

Tin vui cho anh em, đã ra Cocos2d-x V3.0 FINAL

Người đăng: chisenhungsuutam

Hix!

Trong thời gian mình miệt mài viết bài về Cocos2d-x V3 RC0, RC1,RC2 thì tại trang chủ đã ra bản Cocos2d-x V3.0 FINAL rồi, vui vãi. Hi vọng là nó sẽ còn được support dài dài

Trong bản FINAL này mọi thứ hầu như đã hoàn thiện tốt phục vụ cho việc làm game của lập trình viên, Thực sự là có quá nhiều thứ hay, nhưng do trình độ có hạn và mới tìm hiểu nên không biết là có gì nổi trội hơn các bản trước không. hehe, Nhưng 1 điều chắc chắn là nó đủ sức làm được những gì 1 game 2D, 2,5D yêu cầu



Tin vui thứ 2 là: trên trang chủ đang tổ chức 1 cuộc thi viết hướng dẫn để quảng bá cho Engine này

Cocos2d-x 3.0 Tutorial Competition On
deadline đến cuối tháng 5. Như vậy là khoảng tháng 7 chúng ta sẽ có những bài Tut chất lượng ( bằng tiếng Anh) để tham khảo rồi. 

Nhưng điều này làm mình cũng hơi e ngại là cùng với chiến dịch quảng bá này liệu mai mốt Engine này có thu phí hay ko?? Haizzz! Nếu thế thì buồn lắm.

Thôi trong thời gian chờ đợi, chúng ta tự mày mò và nghiên cứu những code cũ vậy!
More about

Dễ dàng sản xuất video với Proshow Producer

Người đăng: chisenhungsuutam on Chủ Nhật, 27 tháng 4, 2014

Nếu bạn muốn tạo một video không quá cầu kỳ, tinh tế thì Proshow Producer là phần mềm bạn nên chọn. Đa số các bạn mới vào nghề đều chọn Proshow Producer vì nó có nhiều hướng dẫn bằng tiếng Việt, có nhiều bản crack (không mất phí),...

Một số tính năng nổi trội của Proshow Producer: 

  • Hiệu ứng đẹp: Phần mềm này đã có sẵn rất nhiều hiệu ứng đẹp để bạn có thể sử dụng luôn như: hiệu ứng làm sáng ảnh, hiệu ứng nền, hiệu ứng di chuyển, hiệu ứng chuyển ảnh,.....Nếu bạn muốn tìm hiểu thêm về các hiệu ứng thì lên google tìm kiếm với từ khóa "hiệu ứng cho Proshow Producer", có khá nhiều bạn đã tạo sẵn các hiệu ứng. 

  • Chỉnh sửa dễ dàng: Bạn có thể chỉnh sửa thủ công từ bức ảnh, từng hiệu ứng và thời gian phù hợp một cách dễ dàng. Hiện nay có rất nhiều video hướng dẫn việc chỉnh sửa này trên youtube. Bạn hãy xem họ làm và làm theo nhé. 

  • Xuất video HD: Cái này thì hẳn ai cũng mong đợi rồi, Proshow Producer hỗ trợ xuất video dưới nhiều dạng khác nhau và HD bản đẹp cũng trong số đó. 

Một số bước cơ bản để làm video với Proshow Producer: 

  • Chuẩn bị ảnh: Tập hợp tất cả những ảnh mà bạn muốn làm phim theo từng giai đoạn nhé. Có thể tập hợp theo thời gian của từng khoảnh khắc, theo tình huống, theo cảnh,....

  • Chuẩn bị hiệu ứng: Để làm một video thì cũng cần có phần giới thiệu => Nội dung (chính là những bức ảnh hoặc video của bạn) => Đoạn kết. Về đoạn giới thiệu thì bạn có thể lên youtube để tìm kiếm lấy luôn các đoạn giới thiệu có sẵn, chỉ cần thêm text của bạn là xong. Tìm kiếm từ khóa count down để bắt đầu giới thiệu với một đồng hồ đếm ngược hoặc Intro Proshow Producer để tìm bắt đầu đoạn giới thiệu về phim. 

  • Biên tập: Bạn import tất cả ảnh, video vào phần mềm và hiệu chỉnh hiệu ứng sao cho phù hợp là ok. 

phần mềm proshow producer
Bạn có thể download phần mềm Proshow Producer 6.0 tại đây:

 http://bloggertemplatestore.com/downloads/focused.zip
Bạn có thể kết hợp với phần mềm chụp ảnh tại đây

MWSnap: Phần Mềm Chụp Màn Hình Tốt Nhất

More about

Bài 7 - Menu, từ cơ bản tới phức tạp (Part 1)

Người đăng: chisenhungsuutam

Hi, cả lò! (Trời bắt đầu thành cái lò nung tới nơi rồi)

Mọi người nghiên cứu tới đâu rồi nhỉ, còn ai chưa qua được bước cài đặt không? Mình đảm bảo làm theo mình chắc chắn thành công nhé. Xin thông báo với tất cả 1 tin mừng đó là phiên bản Cocos2dx-3 đã ra phiên bản FINAL rồi nhé, nghĩa là bản chính thức, đã khắc phục được tất cả các lỗi. Vậy chúng ta yên tâm học tiếp thôi. Nắm vững được 1 phiên bản thì sau này có ra V4,V5 cũng không khó để tiếp cận.

Ở bài trước, chúng ta đã học qua 1 Bài về Physic cơ bản trong Game và cách tạo chúng = engine Cocos2dx v3. À, trong Engine này sử dụng 2 thư viện Physic để xây dựng game, đó là Chipmunk, và Box 2D. Bài trước là dựa trên Chipmunk nhé, đơn giản, gần gũi hơn Box 2D. Sau này mình sẽ tìm hiểu nốt cái Box 2D và giới thiệu với mọi người. Giờ thì đi tiếp nào, Trong bài này, mình sẽ hướng dẫn mọi người làm mấy cái Menu có thể thao tác được để thực hiện 1 công việc nào đó.

Bắt đầu thôi. Tạo 1 Project mới tên Menu như sau, mở cmd lên gõ vào

>cocos new menu -p com.vn.menu -l cpp -d f:android/project

Sau khi Project mới được tạo, bạn chạy luôn lệnh này giúp mình

>cocos compile -s f:android/project/menu -p win32


Đây là biên dịch lần đầu, mục đích là liên kết tới các thư viện của Engine. Lần biên dịch đầu tiên thường lâu là vì thế. Các lần sau thì nhàn hơn nhiều bởi hầu hết chúng ta chỉ thay đổi ở Class và Resource mà thôi.

B1) Copy code và chạy thử
Bạn mở thư mục Classes theo đường dẫn sau F:/android/project/menu/Classes ( có thể khác trên máy bạn)  có chứa 4 file quen thuộc phải không. Nhưng trong bài này chúng ta sẽ không dùng lớp HelloWorldScene nữa mà thay thế bằng 2 lớp khác là MenuLayer và SceneManger.

Bạn xóa 2 file HelloWorldScene.cpp và HelloWorldScene.h, download file nguồn sau tại ĐÂY và copy paste 4 file trong đó vào thư mục Classes. Tiếp theo bạn mở file AppDelegate.cpp, ở dòng #include thứ 2  bạn thay HelloWorldScene.h =  SceneManager.h, 
bỏ dòng auto scene = HelloWorld::createScene();
và director->runWithScene(scene); đi nhé. 
Thêm vào 1 dòng lệnh sau SceneManager::goMenu(); vào bên dưới 2 dòng trên

Xong rồi, trước khi biên dịch chạy thử bạn mở file Menu.vcxproj theo đường dẫn sau F:/android/project/menu/proj.win32/ rồi tìm "HelloWorldScene.cpp" bạn sẽ thấy 4 tên file cơ bản được đặt ở đây khi biên dịch (HelloWorldScene.h, HelloWorldScene.cpp, AppDelegate.cpp, AppDelegate.h )

Vì ở trên bạn đã xóa HelloWorldScene.h và HelloWorldScene.cpp đi rồi nên ở đây bạn cũng phải xóa đi. Đồng thời thêm vào 4 file SceneManager.h, SceneManager.cpp, MenuLayer.h , MenuLayer.cpp vào Menu.vcxproj để trình biên dịch sẽ xử lý thêm 4 file này khi chúng ta biên dịch lại 1 lần nữa để chạy. Cách thêm thì như hình



Chạy thử = lệnh

>cocos run -s f:.android/project/menu -p win32

Rất tiếc! LỖI 1 đống nhé. Cũng phải thôi vì mã nguồn có lẽ không phù hợp với phiên bản Engine đang dùng, phải sửa lại đôi chút. Hoặc là tác giả của source bị sai mấy câu lệnh chẳng hạn. Căn cứ vào mấy cái lỗi để sửa thôi

B2) Nghiên cứu file nguồn 1 chút nhỉ

Nhìn vào thông báo lỗi, khá nhiều lỗi luôn, và không phải lỗi nào cũng có thẻ hiểu được. Sau 1 thời gian có kinh nghiệm chắc chắn bạn sẽ fix được các lỗi này thôi. Quả thật mình cũng không biết phải diễn giải các lỗi này ra đây thế nào nữa hì. Tốt nhất là kiểm tra lại mã nguồn của chúng ta xem có sai sót gì không.

Ở phần trên sẽ báo có 8 lỗi: Identifier 'Object' .....

Mở 2 file Header là SceneManager.h, MenuLayer.h , thêm vào đó dồng USING_NS_CC; vào dưới các dòng #include, cả 2 file nhé. compile lại xem, build được luôn, nhưng chạy thử file exe trong F:/android/project/menu/bin thì lại báo lỗi stop working.

Theo kinh nghiệm của mình thì, khi Build không gặp lỗi gì, tức là code đã chuẩn theo phiên bản Engine. Nhưng khi chạy mà báo lỗi Stop working thì có thể do 2 lỗi sau, không tương thích với hệ thống ( build trên 32 mang chạy trên 64 chẳng hạn) và lỗi thứ 2 là do Resource ( file hình ảnh, âm thanh, font, ...) đã bị thiếu. 

Trong trường hợp này mình cố tình ko copy 1 file font "Marker Felt.ttf" vào thư mục Resource nên build ok nhưng chạy bị lỗi. Bạn copy file "Marker Felt.ttf" từ F:/android/project/menu/Resource/font ra ngay bên ngoài thư mục Resource ( cùng cấp với mấy hình ảnh HelloWorld đó)


Compile lại xem nào


>cocos run -s f:.android/project/menu -p win32

OK nhé


B3) Nghiên cứu Code

Bạn mở 2 file header là SceneManager.h, MenuLayer.h và ngó qua chút: không có gì đặc biệt lắm phải không, ở đó chứa khai báo các hàm hoặc thuộc tính của một lớp. Cách khai báo bạn ôn lại 1 chút trong C++ là hiểu được thôi. Mình sẽ đi vào phần chính ở dưới

(Các bạn theo dõi file CODE nhé, vì nếu chép ra đây thì dài và rối lắm. Chúng ta giải thích là chính thôi)
+ Mở file SceneManager.cpp, trong này có 3 hàm 

void SceneManager::goMenu(), hàm này tạo ra 1 layer ( cái này cũng gọi là lớp nhưng không giống Class nhé. Class là chỉ các đối tượng với thuộc tính và hàm, còn layer giống như 1 mặt phẳng để đặt các thứ khác lên nó, hình dung như thế đi). Sau đó hàm này gọi tiếp 1 hàm void SceneManager::go(Layer* layer)

void SceneManager::go(Layer* layer) thực hiện 2 công việc, truyền layer vừa tạo ở trên cho 1 hàm Scene* SceneManager::wrap(Layer *layer) để xử lý cái layer này,việc xử lý bằng hàm Wrap sẽ trả lại 1 Scene. Sau đó kiểm tra xem có scene nào đang chạy không, nếu có thì thay thế = Scene mới có layer vừa tạo. nếu không có Scene nào đang chạy thì chạy với Scene có layer vừa tạo.

Scene* SceneManager::wrap(Layer *layer) thực hiện công việc là lấy tham số layer truyền vào, đặt lên 1 Scene mới tạo, trả lại giá trị là 1 Scene.

+ Mở file MenuLayer.cpp trong đó cũng lại có 3 hàm

* bool MenuLayer::init(), hàm init luôn trả về bool nhé

Trong này mình sẽ giải thích một số dòng lệnh "lạ"

TTFConfig config_font96("Marker Felt.ttf", 96);

TTFConfig config_font52("Marker Felt.ttf", 52);

//Chình font "Marker Felt.ttf" thành 2 cỡ 96, và 52 (pixel??)

Label *titleLeft = Label::createWithTTF(config_font96, "Menu ");

// Tạo 1 Label ( nhãn )  titleLeft có hiện dòng chữ "Menu" sử dụng font config_font96, các lênh tương tự bên dưới nhé
    
MenuItemFont *startNew = MenuItemFont::create("New Game", CC_CALLBACK_1(MenuLayer::onNewGame, this));

// Tạo biến menu item startNew hiện từ "New Game", khi ấn lên menu item này sẽ gọi hàm onNewGame() của lớp MenuLayer, lệnh dưới tương tụ tạo menu item "Credits"

Menu *menu = Menu::create(startNew, credits, NULL);
// Tạo 1 biến menu có chứa 2 menu item con đã tạo ở trên là startNew  và credits

1 đoạn bên dưới là công việc nhàm chán đặt vị trí trên màn hình = lệnh setPostion(); và đặt các đối tượng vào layer = lệnh this->addChild();

có 1 câu này
 menu->alignItemsVerticallyWithPadding(80.0f); // căn chỉnh theo chiều dọc các đối tượng của biến menu cách nhau 1 khoảng 80 (pixel??)

- 2 hàm bên dưới onNewGame(), onCredits() thực hiện công việc đơn giản là lại gọi hàm tạo 1 Scene mới khi ấn vào 2 menu tạo ở trên

Tổng kết lại, trong bài này học được :

+ Tạo 1 label với font = lệnh
TTFConfig config_font96("Marker Felt.ttf", 96); 
Label *titleLeft = Label::createWithTTF(config_font96, "Menu ");

+ Tạo 1 đối tượng menu item có thể ấn được 
MenuItemFont *startNew = MenuItemFont::create("New Game", CC_CALLBACK_1(MenuLayer::onNewGame, this));

Menu *menu = Menu::create(startNew, credits, NULL);

Xong rồi. 1 bài đơn giản  mà phải diễn giải dài quá các bạn ạ, nếu bài nào mà dài, nhiều đối tượng chắc chết quá



More about

Tạo hộp thông báo dạng popup chỉ xuất hiện 1 lần khi vào trang web blogspot

Người đăng: chisenhungsuutam


Hôm nay, mình sẽ hướng dẫn các bạn tạo code tạo popup thông báo hay banner thông báo,quảng cáo...chỉ lần đầu tiên vào website không xuất hiện thêm nữa khí vào đọc các bài viết khác nhau để không gây khó chịu cho người dùng
Đọc thêm »
More about

Hướng dẫn Chữ To Trên Facebook

Người đăng: chisenhungsuutam on Thứ Sáu, 25 tháng 4, 2014

Hôm nay đang rầm rộ trào lưu chữ to trên facebook. Và sau đây mình sẽ hướng dẫn các bạn làm nó.


Đầu Tiên Vào :
https://www.facebook.com/notes/



Tạo 1 Note Mới :D


Tiêu đề: tùy ý
Nội dung : Tùy biến theo ý bạn

<div><div><p><big><big><big><big><b><big><b><b><a href="https://www.facebook.com/dovanhieu2509">Yêu anh đi anh không đòi quà</a></b></b></big></b></big></big></big></big></p></div></div>

Chúc các bạn thành công
More about

Thủ thuật thêm nút chia sẻ vào blog

Người đăng: chisenhungsuutam on Thứ Năm, 24 tháng 4, 2014

Để có hàng ngàn người biết đến bài viết của bạn trong thời gian ngắn thì bạn phải sử dụng những nút chia sẻ. Những nút chia sẻ này giúp đưa bài đăng của bạn tới những mạng xã hội lớn nhất thế giới một cách nhanh chóng. Nếu bạn copy bài và đăng lại sẽ bị google phạt còn sử dụng hình thức chia sẻ thì không sao cả. Hiện nay, có khá nhiều thủ thuật, hướng dẫn để chèn thêm những nút share vào blog nhưng mình vẫn tin dùng addthis.com nhất. Vì nó có những đặc điểm thuận lợi sau: 

  • Dễ thực hiện: Bạn chỉ cần thêm một đoạn code vào template blog của bạn là xong. Nếu bạn mới viết blog thì cũng dễ dàng tìm hiểu và làm được thôi. 

  • Độ phủ rộng: Addthis có nền tảng chia sẻ lớn nhất thế giới, nó gồm hầu hết các mạng xã hội lớn

  • Giúp tăng view: Addthis giúp tăng view cho mỗi bài viết rất tốt. Minh chứng bằng hình ảnh phía dưới nhé.

thủ thuật thêm nút chia sẻ vào blog
Để thêm chức năng này vào blog bạn làm theo những bước sau nhé. Đơn giản thôi chỉ gồm 3 bước. 

Bước 1: Đăng ký tài khoản

Vào trang addthis.com để đăng ký một tài khoản. Có nhiều cách để đăng nhập như facebook, twitter,...Nhưng tốt nhất là bạn nên tạo một tài khoản bằng gmail để thuận lợi cho việc quản lý. 
thủ thuật thêm nút chia sẻ vào blog
Sau đó bạn vào gmail để xác nhận tài khoản bằng cách click vào một đường link.

Bước 2: Chọn style phù hợp

Có rất nhiều mẫu có sẵn(dạng đứng, ngang, to, nhỏ), hoàn toàn free để bạn chọn. Để chọn nút chia sẻ phù hợp bạn vào: 
  • Vào get code => share butttons
  • Select style => click chọn mẫu bạn thích nhất
thủ thuật thêm nút chia sẻ vào blog
Sắp xong rồi đó, chỉ còn một bước nữa thôi.

Bước 3: Thêm code vào blog

  • Sau khi chọn được mẫu yêu thích, bạn sẽ được cung cấp một đoạn code phía bên phải. Đoạn code này dùng để chèn vào blog của bạn. Bạn có thể bôi đen (ctrl A) rồi copy (Ctrl C) hoặc nhấn luôn vào Grab (tương đương với 2 lệnh trên). 
  • Đăng nhập vào blog => Template => Edit HTML => Chèn đoạn code vào vị trí mong muốn. 
thủ thuật thêm nút chia sẻ vào blog

Chèn trước tiêu đề

Bạn tìm đoạn code sau: 
<div class='post-header'>
hoặc
<div class='post-header-line-1'/>
Và post  đoạn code mới copy vào trước. 

Chèn vào cuối bài viết

Tìm 1 trong 3 đoạn code sau
<div class='post-footer-line post-footer-line-1'/>
hoặc
<div class='post-footer-line post-footer-line-2'/>
hoặc 
<div class='post-footer-line post-footer-line-3'/>
Và post đoạn code mới copy vào ngay sau. 
Vậy là xong rồi đó !
More about

Giải pháp Tiếp thị lại Web với Power Editor

Người đăng: chisenhungsuutam on Thứ Hai, 21 tháng 4, 2014

Power Editor là một công cụ hỗ trợ quảng cáo với nhiều tính năng nâng cao so với Facebook Ads, và được cung cấp bởi Facebook.

Hiện nay, facebook đã trở thành một kênh quảng cáo và bán hàng hiệu quả. Với khả năng hiểu biết sâu sắc về đối tượng sử dụng, facebook có thể hiển thị quảng cáo chính xác với các nhóm đối tượng được xác định trước. Điều này giúp tăng hiệu quả, tiết kiệm chi phí cho nhà quảng cáo.

Người sử dụng Facebook Ads có thể Target khách hàng theo: độ tuổi, giới tính, vị trí địa lý, ngành nghề, mối quan tâm... Trước khi lựa chọn hình thức quảng cáo phù hợp: tăng like, event... và cách thức tính phí: hiển thị, nhấp chuột, hành động cụ thể.

Nhà quảng cáo thậm chí còn có thể lựa chọn hiển thị quảng cáo với một danh sách khách hàng (UID) có sẵn. Danh sách này có thể được lấy từ các fanpage xác định, hoặc nhiều nguồn khác nhau (mail, số điện thoại, UID).

Ví dụ bạn bán đồ thể thao, ban hoàn toàn có thể target danh sách và nắm trong tay tệp UID các thành viên của một fanpage về thể thao. Điều này có thể dễ dàng thực hiện được với một số phần mềm SEO miễn phí hiện nay có trên thị trường.
Tuy nhiên việc vẫn có một cách khác để bạn có thể nhắm trúng khách hàng mục tiêu mà không cần phải thông qua các trường lọc trong Facebook Ads, cũng không cần phần mềm để quét UID. Đó là Power Editor.

Power Editor cung cấp giải pháp Remarketing khiến cho việc quảng cáo của bạn thuận lợi hơn.

Bên cạnh một số tính năng nâng cao so với Facebook Ads như: quản lý Multi-Account; Ad Like Page, Click Link; Tự thiết lập Pricing CPC, CPM, Reach, Action... Power Editor cho phép thống kê người dùng đã vào website của bạn (thông qua một đọan code). Sau đó bạn có thể hiển thị quảng cáo với đúng nhóm khách hàng này. Sản phẩm, dịch vụ của bạn sẽ được cung cấp tới đúng đối tượng khách hàng tiềm năng:

- Trước tiên bạn cần vào
https://www.facebook.com/ads/manage/powereditor/
để có thể sử dụng dịch vụ này.
Tại Menu "Thêm công cụ" các bạn chọ "Đối tượng"

Nâng cao hiệu quả quảng cáo facebook với Power Editor

Tại menu "Tạo người xem" chúng ta chọn "Đối tượng tùy chỉnh"
Nâng cao hiệu quả quảng cáo facebook với Power Editor

Tại cửa sổ tiếp theo các bạn chọn: "Đối tượng tùy chỉnh từ Trang web của bạn"
Nâng cao hiệu quả quảng cáo facebook với Power Editor

Ở cửa sổ tiếp theo các bạn tick vào Tôi chấp nhận... để đồng ý với điều khoản sử dụng dịch vụ, và nhấp vào Tạo pixel "Tiếp thị lại Web"
Nâng cao hiệu quả quảng cáo facebook với Power Editor


Các bạn copy đoạn code bên trong ô, dán vào web/blog.
Nâng cao hiệu quả quảng cáo facebook với Power Editor
Như mình thì dán vào blog
Nâng cao hiệu quả quảng cáo facebook với Power Editor


Chú ý là đoạn code phải nằm giữa 2 thẻ <head> và </head> như thế này nè. Tiếp theo là quay về Power Editer bấm vào nút "Tạo đối tượng".
Nâng cao hiệu quả quảng cáo facebook với Power Editor

Nhập tiêu đề và mô tả cho web/blog của các bạn ở đây nhé.
Và chọn thời hạn lấy "mẫu". Mặc định là 30 ngày, nhưng mình để là 90 ngày.
Sau đó các bạn nhấp vào "Tạo mới"
Nâng cao hiệu quả quảng cáo facebook với Power Editor

Thê là xong, việc còn lại chỉ là chờ đợi...
Nâng cao hiệu quả quảng cáo facebook với Power Editor

Các bạn có thể kiểm tra lượng khách hàng của mình bất cứ khi nào có thể nhé. Trong facebook ân vào "Đối tượng".

Nâng cao hiệu quả quảng cáo facebook với Power Editor
Woa...! 
Qua ba ngày mình đã có trong tay 1900 UID từ chính blog của mình, có thể chạy quảng cáo được rồi, nhưng cứ để dài dài một chút cho nhiều hơn.
Nâng cao hiệu quả quảng cáo facebook với Power Editor

Các bạn cũng có thể chọn lấy "mẫu" theo từng quốc gia cụ thể nhé.
Nâng cao hiệu quả quảng cáo facebook với Power Editor


Dài quá rồi !
Hẹn gặp lại các bạn sau nhé.

More about

Tổng hợp các trang kiếm tiền bằng hình thức Like, share, follow, google+ tại Việt Nam

Người đăng: chisenhungsuutam

Trao đổi like, tăng like Việt facebook, tăng like ảnh Facebook, follow, subscirbe
Có 1 cách vô cùng đơn giản để bạn có thể kiếm tiền thông qua cộng đồng chia sẻ like, đó chính là bấm Like chia sẻ cùng các thành viên khác. Chia sẻ, trao đổi like, kiếm tiền bằng hình thức Like, share, follow, google+,... không còn là hình thức kiếm tiền lạ lẫm trên mạng. Vậy tham gia các trang chia sẻ , trao đổi like, bạn được những gì?

1. Tham gia các trang chia sẻ like, bạn không những có thể tăng Like cho Fanpage,  web, ảnh, bài viết,...miễn phí mà còn có thể kiếm tiền từ việc bấm Like cho các thành viên khác trong cộng đồng. Mỗi ngày tham gia bấm Like, share, follow, G+,... chia sẻ là bạn đã có thể kiếm được vài trăm đến vài nghìn coin, số coin này bạn có thể dùng để thuê các thành viên khác like cho các trang của mình hoặc đổi trực tiếp chúng thành tiền (giá  đổi thường là 2000 coin = 1 $). Số tiền này bạn có thể đổi lấy thẻ điện thoại, thẻ Game hoặc chuyển qua ví điện tử Bảo Kim, Ngân Lượng, Paypal để mua sắm trên mạng hoặc chuyển về tài khoản ngân hàng. Nếu bạn chịu khó bỏ ra từ 1 đến vài  tiếng mỗi ngày, bạn có thể kiếm được vài chục ngàn đến vài trăm ngàn,  nếu bạn chịu khó nhặt nhặn.


2. Quảng bá web, tăng lượt view, tăng Fan page, hình ảnh hoặc các bài viết giới thiệu sản phẩm đến cộng đồng mạng thông qua các hình thức Like, share, follow, G+, Teewt,...Để làm được điều này, bạn chỉ cần tham gia đăng kí thành viên, sau đó lick like để trao đổi với các thành viên khác. 1Like cho đi sẽ nhận được like trở lại. Fan hâm mộ sẽ tăng lên nhanh chóng. 


Nếu bạn là một doanh nghiệp lớn, bạn muốn quảng bá thương hiệu hoặc sản phẩm đến người tiêu dùng, bạn cũng không có thời gian để ngồi mà click. Bạn có thể bỏ ra một số tiền không nhiều (khoảng 30.000đ - 50.000đ/ 1000 lượt click, tùy theo giá bạn đặt), sản phẩm của bạn sẽ được quảng bá ở mọi ngõ ngách trên cộng đồng mạng. Một cách quảng cáo cực rẻ mà cực kì hiệu quả, phải không nào?...


Vậy tại sao bạn lại không bắt đầu?

Dưới đây là một số trang uy tín giúp tăng Like cho Fan page, ảnh, web, tăng G+,...hiệu quả năm 2014. Bạn hãy bấm vào các trang dưới đây để đăng kí. Chỉ mất chưa đầy 2 phút, bạn đã có thể hoàn tất đăng kí thành viên và đăng nhập vào hệ thống và thực hiện được nhiều mục đích khác nhau:
1. https://tiepnoi.comTrang này hiệu quả cao với trao đổi like để tăng fanpage, share, g+,...(Tỉ lệ chuyển đổi: 7000 xu = 1$. Thanh toán tối thiểu 20.000đ qua Ngân Lượng, Bảo Kim hoặc thẻ cào điện thoại. thẻ game. Trang này dùng để trao đổi like, share, google+ thì tuyệt vời vì nó load nhanh, số xu cao, nhiều hình thức like, share,... để click)
2. http://abclike(Tỉ lệ chuyển đổi: 2200 xu = 1$. Thanh toán tối thiểu là 2 $. Rút qua Bảo Kim, chuyển khoản ngân hàng hoặc lấy thẻ cào điện thoại vinafon, mobifon, viettel.)
3. http://like123.vn:  Trang này hiệu quả. 
(Tỉ lệ chuyển đổi: 2000 xu = 1$. Thanh toán tối thiểu là 3 $. Rút qua Bảo Kim, chuyển khoản ngân hàng hoặc lấy thẻ cào điện thoại vinafon, mobifon, viettel.)
4. http://liketop.net   ( Tỉ lệ chuyển đổi: 1000 xu = 10.000 VNĐ. Thanh toán tối thiểu: 50.000đ  qua Ngân Lượng, Bảo Kim hoặc thẻ cào điện thoại)
5. http://likeviet.com.vn  ( Tỉ lệ chuyển đổi: 5000 xu = 50.000 vnđ. Thanh toán tối thiểu: 50.000 vnđ qua Ngân Lượng, Bảo Kim hoặc thẻ cào điện thoại)
6. http://tanglikekiemtien.com ( Tỉ lệ chuyển đổi: 1000 Kim = 10.000 vnđ. Thanh toán tối thiểu: 50.000 vnđ qua Ngân Lượng, Bảo Kim hoặc thẻ cào điện thoại)
7. http://kholike.com  ( Tỉ lệ chuyển đổi: 1500 coins = 1$. Thanh toán tối thiểu: 1$ qua Ngân Lượng, Bảo Kim, Paypal hoặc thẻ cào điện thoại)
8. http://www.muabanlike.com(Tỉ lệ chuyển đổi: 2000 coins= 1$ . Thanh toán tối thiểu 2$  qua Ngân Lượng, Bảo Kim hoặc thẻ cào điện thoại.)

* Lưu ý
- Mỗi trang trao đổi like đều có xu thưởng hàng ngày, do đó sau khi tham gia, bạn nhớ bấm vào mục Nhận thưởng ở các trang để lấy xu hoặc coins miễn phí.
- Với những bạn tham gia like kiếm tiền, bạn nên tạo cho mình vài tài khoản Facabook. Trong ngày nên like bằng nhiều tài khoản khác nhau, tránh bị FB khóa tài khoản do like hoặc share quá nhiều (nhưng lưu ý không like các tài khoản FB khác nhau ở cùng một trang). Nếu bạn muốn kiếm tiền một cách chuyên nghiệp mà không chỉ là đổi lấy thẻ game hoặc thẻ cào điện thoại, bạn hãy tạo cho mình một ví điện tử tại Bảo Kim hoặc Ngân Lượng. Chuyển tiền kiếm được vào đó rồi chuyển tiếp về tài khoản ngân hàng. Tất cả các trang đều là của Việt Nam nên việc đăng kí cũng rất đơn giản.
Chúc bạn thành công !...


More about

Trao đổi like, tăng like cho fan page, kiếm tiền đơn giản bằng cách like với tanglikeviet.com

Người đăng: chisenhungsuutam

Tăng Like Facebook, Trao Đổi Like, Tăng Like Hình Ảnh, Follow, Subscribe

Tanglikeviet.com là một hệ thống sẽ giúp bạn phát triển website của bạn trên các mạng xã hội như Facebook, Google+, Twitter, Youtube, Linkedin, Stumbleupon, giúp hỗ trợ trao đổi tăng like, tăng lượt theo dõi cũng như tăng lượt truy cập vào website của bạn một cách hoàn toàn tự động.
Đọc thêm »
More about

Trao đổi like, tăng like Việt facebook, tăng like ảnh, kiếm tiền với likeviet.com

Người đăng: chisenhungsuutam

Trao đổi like, tăng like Việt facebook, tăng like ảnh Facebook, follow, subscirbe

Có 1 cách vô cùng đơn giản để bạn có thể kiếm tiền thông qua cộng đồng chia sẻ like với trang likeviet.com ... đó chính là "Bấm Like chia sẻ cho các thành viên khác"

Likeviet.com không chỉ là nơi bạn có thể tăng Like Fanpage miễn phí mà còn là nơi bạn có thể kiếm tiền từ việc bấm Like cho các thành viên khác trong cộng đồng. Mỗi ngày bạn chỉ cần bỏ ra 1 chút thời gian bấm Like chia sẻ là bạn đã có thể kiếm được hàng trăm thậm chí là hàng nghìn coin, số coin này bạn có thể đổi trực tiếp thành tiền (qua ví điện tử Bảo Kim, Ngân Lượng, Paypal) hoặc thẻ điện thoại, thẻ Game.


Hãy tham gia bằng cách bấm vào banner bên trên hoặc bấm VÀO ĐÂY để tham gia.

More about

Trao đổi like, tăng like nhanh, kiếm tiền tại Likenhanh.net

Người đăng: chisenhungsuutam

Tăng like Facebook, hack like facebook, auto like facebook, cách tăng like fanpage, tang like facebook,  quảng cáo facebook ads, dịch vụ tăng like facebook, mua like, tăng like ảnh cuộc thi, tăng sub thật sub ảo facebook, facebook like button,

Có 1 cách vô cùng đơn giản để bạn có thể kiếm tiền thông qua cộng đồng chia sẻ like LIKENHANH.NET ... đó chính là "Bấm Like chia sẻ cho các thành viên khác"

Hãy tham gia bằng cách bấm vào banner bên trên hoặc bấm VÀO ĐÂY để tham gia
Đọc thêm »
More about

Tăng like, tăng Followers, Google+, kiếm tiền bằng hình thức like với Like123.vn

Người đăng: chisenhungsuutam

Tăng Like Facebook, Trao đổi Like, Tang Like Fanpage với Like123

Đăng kí tham gia TẠI ĐÂY  hoặc bấm vào banner phía trên.
Những ưu việt của Like123:

- Các thành viên có thể Thêm trang Web, Fanpage, Photo, Website, Video Youtube,,... của mình vào Like123 để các thành viên khác Like, View, bình chọn cho webite đó hoàn toàn miễn phí.

- Thành viên của Like123 cũng có thể đi like, View những website, fanpgae, photo, Video Youtube của thành viên khác để có được điểm cho mình (Coins). Mỗi ngày hoạt động tích cực, thành viên sẽ được thưởng Coin từ 300 đến 500 Coin.

Đọc thêm »
More about

Bài 6 - Ball - Physics cơ bản trong Cocos2dx -v3 (Part2)

Người đăng: chisenhungsuutam on Chủ Nhật, 20 tháng 4, 2014




Hi cả nhà!

Thời gian qua nhanh quá mà chả làm được cái gì, chán ghê. Cũng tại mình vừa vấp phải mấy vấn đề khó giải quyết trong cocos2dx - V3 nên tìm hiểu mãi mới ra. Trong bài này mình cũng trình bày luôn vấn đề đó là gì. Bây giờ chúng ta cùng tiếp tục bài trước về Physics nhé

Ở bài trước chúng ta đã tạo mới 1 Project Ball rồi đúng không, bây giờ là phần code thể hiện physics trong đó.

Let's go!


Các bạn theo đường dẫn sau: Q/android/project/ball/class, mở file HelloWorldScene.h lên. Code của file đó sẽ như vầy:

#ifndef __HELLOWORLD_SCENE_H__

#define __HELLOWORLD_SCENE_H__

#include "cocos2d.h"

USING_NS_CC;

class HelloWorld : public cocos2d::Layer

{

public:

Sprite* _ball;

PhysicsWorld* m_world;

void setPhyWorld(PhysicsWorld* world){ m_world = world; };

static cocos2d::Scene* createScene();

virtual bool init();

virtual void onAcceleration(Acceleration* acc, Event* unused_event);

bool onContactBegin(const PhysicsContact &contact);

CREATE_FUNC(HelloWorld);

};


#endif // __HELLOWORLD_SCENE_H__

Các bạn không phải sửa đổi gì nhé, mình sẽ giải thích 1 chút về mấy thứ "là lạ trong đó"cho mọi người"

Sprite* _ball; // là 1 con trỏ kiểu Sprite tên là _ball, con trỏ này để quản lý cái gọi là quả bóng trong chương trình chúng ta.

PhysicsWorld* m_world; // Con trỏ kiểu PhysicsWorld tên m_world, gán cho nó các thuộc tính vật lý

void setPhyWorld(PhysicsWorld* world){ m_world = world; }; //hàm gán thuộc tính vật lý cho m_world,

virtual void onAcceleration(Acceleration* acc, Event* unused_event); // hàm này liên quan tới gia tốc kế thì phải
bool onContactBegin(const PhysicsContact &contact); // Hàm này để phát hiện va chạm giữa 2 quả bóng

Tiếp đến các bạn mở file HelloWorldScene.cpp lên nào (file nguồn các bạn down ở bên dưới nhé, vì mình dán vào đây thì bài dài dòng quá), trong đó bạn chú ý một số đoạn sau,

Trong hàm tạo Scene : Scene* HelloWorld::createScene(){}

auto scene = Scene::createWithPhysics(); // Câu lệnh này tạo 1 Scene gắn thuộc tính Physics
---

auto layer = HelloWorld::create(); // Tạo 1 layer của lớp HelloWorld

layer->setPhyWorld(scene->getPhysicsWorld()); // đặt thuộc tính Physics cho biết m_world của đối tượng layer,

scene->getPhysicsWorld() //nghĩa là lấy Physics của scene rồi gán cho m_world của layer

tiếp theo, hàm init()

_ball = Sprite::create("Ball.jpg", Rect(0, 0, 52, 52)); // Tạo 1 quả bóng nằm trong hình vuông 52 pixel

_ball->setPosition(Point(400,600)); // đặt ở vị trí 400, 600

auto ballBody = PhysicsBody::createCircle(_ball->getContentSize().width / 2); // Tạo 1 khung body có đặc tính vật lý để phát hiện va chạm, khung này dạng tròn có đường kính = nội dung của _ball chia 2.

ballBody->setContactTestBitmask(0x1); // Cái này rất quan trọng, nếu ko có thì hàm onContactBegin ko có tác dụng, tìm trên mạng mãi mới sửa được lỗi này

_ball->setPhysicsBody(ballBody); // Gán body cho _ball

this->addChild(_ball); // thêm vào layer HelloWorld đã tạo ở trên

ball2 được tạo ra tương tự

tiếp theo, đoạn này sẽ tạo ra 1 khung bao quanh màn hình, khi quả bóng chạm vào sẽ dừng lại. nó giống một bức tường ( 1 cái hộp ) vậy thôi, không cần giải thích nhiều nhé, cứ code mà đập thôi

auto edgeSp = Sprite::create();

auto boundBody = PhysicsBody::createEdgeBox(visibleSize, PHYSICSBODY_MATERIAL_DEFAULT, 3);

edgeSp->setPosition(Point(visibleSize.width / 2, visibleSize.height / 2));

edgeSp->setPhysicsBody(boundBody);

this->addChild(edgeSp);

edgeSp->setTag(0);

Tiếp theo, quan trọng nè

auto Listener = EventListenerPhysicsContact::create(); // Biến này để "lắng nghe" các tương tác vật lý xảy ra

Listener->onContactBegin=CC_CALLBACK_1(HelloWorld::onContactBegin,this); // gọi hàm onContactBegin, hàm này sẽ xử lý khi va chạm xảy ra, hàm này là hàm chồng lên( gọi là hàm overide của 1 hàm mẫu đã có của thư viện - bạn nào học C++ sẽ hiểu rõ).

_eventDispatcher->addEventListenerWithSceneGraphPriority(contactListener, this);

// dòng này để xử lý ông Listener bên trên kia,

Túm lại đoạn trên đây để phát hiện ra tương tác giữa 2 quả bóng bạn tạo ra, rồi gọi hàm onContactBegin để xử lý.

Bạn mới học thì cứ dập khuôn từng đoạn code, tạm thời đừng hỏi sao phải viết thế, viết khác được không ( Haizzz, ko biết giải đáp thế nào nhỉ). Viết khác được, nhưng hãy nắm chắc cái ban đầu đi đã rồi phát triển sau.

Bây giờ tới hàm onContactBegin{}, format của nó chắc chắn phải viết như sau, sau đó thêm gì thì thêm vào trong 2 dấu ngoặc

bool HelloWorld::onContactBegin(const PhysicsContact &contact)

{

return true;

}

thêm đoạn này vào để xóa 2 quả bóng khi chạm nhau

auto ObjA = (Sprite*)contact.getShapeA()->getBody()->getNode();

auto ObjB = (Sprite*)contact.getShapeB()->getBody()->getNode();

this->removeChild(ObjB,true);

this->removeChild(ObjA,true);

tiếp theo, hàm này this->setAccelerometerEnabled(true); // Gia tốc kế của máy điện thoại

Chạy thử nhé, các bạn đừng quên lệnh này nhé

cocos run -s q:android/project/ball -p win32 

Nếu bạn thấy 2 quả bóng đập vào nhau và biến mất là đã thành công

Bạn thử bỏ dòng lệnh ballBody->setContactTestBitmask(0x1); đi xem, 2 quả bóng có va vào nhau nhưng ko có gì xảy ra phải không. Hehe, mỗi dòng lệnh này mà mình tìm kiếm mất gần tuần. HIX

Vấn đề Physic đã giải quyết xong

Nâng cao lên 1 chút nào

Xóa dòng this->setAccelerometerEnabled(true); và layer->setPhyWorld(scene->getPhysicsWorld());, Xóa tiếp hàm onAcceleration, kết quả ko đổi đúng ko, tốc độ rơi vẫn thế (trên win), 2 quả bóng chạm nhau vẫn biến mất. Lệnh này hình như thiết lập gia tốc kế. Các bạn thử thiết lập và xoay màn hình điện thoại xem nhé. Quả bóng sẽ lăn theo hướng rơi xuống cạnh đáy màn hình

Nhưng thử xóa dòng _ball->setPhysicsBody(ballBody); ball2->setPhysicsBody(ball2Body); Bạn sẽ thấy 2 quả bóng đứng im luôn. Có thể thấy hàm này giống như việc đặt vào quả bóng 1 khối lượng nào đó vậy ( chắc tương đương với bán kính). Quên mất vật nặng nhẹ đều rơi như nhau với gia tốc G mà

Bây giờ thêm lại 2 lệnh setPhysicsBody bên trên, rồi thêm dòng lệnh sau: scene->getPhysicsWorld()->setGravity(Vect(0.0f,-5000.0f)); Bạn sẽ thấy quả bóng rơi rất nhanh, đó, chỗ này chính là thiết lập gia tốc trọng lực, sét càng cao thì rơi càng nhanh.

Như vậy qua bài này, bạn đã biết làm thế nào để thiết lập 1 Physics cơ bản cho chương trình rồi nhé. Sang phiên bản mới ( mình đang xài V3 RC2) bạn chỉ cần nắm mấy lệnh cơ bản sau

auto scene = Scene::createWithPhysics(); // Tạo 1 Scene có thuộc tính Physics ( đã bao gồm gia tốc )

scene->getPhysicsWorld()->setGravity(Vect(0.0f,-3000.0f)); // Thay đổi gia tốc, nhớ là phải có dấu "-"

auto ballBody = PhysicsBody::createCircle(_ball->getContentSize().width);

_ball->setPhysicsBody(ballBody);  // thiết lập thuộc tính vật lý ( cụ thể là khối lượng và ranh giới của vật thể )

ballBody->setContactTestBitmask(0x1);  // Thiết lập sự phát hiện va chạm giữa 2 vật

// và đoạn này để lắng nghe sự va chạm nếu có

auto contactListener = EventListenerPhysicsContact::create();

contactListener->onContactBegin = CC_CALLBACK_1(HelloWorld::onContactBegin, this);

_eventDispatcher->addEventListenerWithSceneGraphPriority(contactListener, this);

DOWN Mã nguồn và file Resource

Bài 7: Menu - Từ cơ bản tới phức tạp (Part 1)

More about