Hiển thị các bài đăng có nhãn Video. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Video. Hiển thị tất cả bài đăng

Bài 14 - Tạo khung vật lý của đối tượng phức tạp bằng PhysicsBody Editor - Import vào Game (Part 2)

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

Hi mọi người!

Trong bài 13, mình đã giới thiệu qua với các bạn cách sử dụng phần mềm Physicsbody Editor để detect khung body physic từ 1 hình ảnh có dạng phức tạp. Phần mềm sẽ tạo ra 1 file .JSON để lưu thông tin về physics body đó. Công việc của chúng ta bây giờ là sử dụng file .JSON có sẵn để import vào game mà thôi.

Công việc trong phần này như sau:
+ Tìm hiểu một chút về cách phân tích file .JSON
+ Tạo ra physics body từ file JSON và import vào game.

Thế thôi nhỉ, chúng ta bắt đầu,

Đầu tiền, hãy down file nguồn ở đây nhé, file JSON mọi người tự tao như hướng dẫn ở bài trước nha. Mình chỉ up file Class lên thôi

B1 - Phân tích file .JSON

Bước này mình cũng nói luôn là chúng ta chỉ "Cưỡi ngựa xem hoa thôi nhé", vì mình thấy nó giống như là giải thích 1 số hàm sẵn có trong thư viện hàm vậy. Hãy mặc nhiên sử dụng có lẽ tốt hơn.. Thôi thì cứ ngó qua cho biết chút.

Mở file MyBodyParser.h , trong này khai báo 1 lớp MyBodyParser với các hàm cần thiết để phân tích file JSON, chủ yếu là mấy hàm đọc chuỗi, ví dụ
bool parseJsonFile(const std::string& pFile); // Đọc thông tin từ 1 file pFile

bool parse(unsigned char* buffer, long length); // Đọc thông tin vào 1 buffer có độ dài length

Và hàm quan trọng nhất, nên nhớ.

PhysicsBody* bodyFormJson(Node* pNode, const std::string& name); // Tạo ra 1 cái physic body và gắn cho Node nào đó ( thường là Sprite).

MyBodyParser.cpp sẽ định nghĩa các hàm ở trên nhé, chỗ này cũng khá phức tạp để giải thích ( trình cũng chưa tới nên cũng hơi bị khó hiểu ) Tạm thời chúng ta nhớ mấy hàm này về sau cứ thể sử dụng như 1 hàm trong thư viện có sẵn thôi. ( Tất nhiên là phải bê nguyên cả 2 file này vào Class của Project rồi)

B2 - Cách Import vào Game

Mở file HelloWorleScene.h nghiêng ngó chút
+ Trong này khai báo mấy hàm bắt sự kiện Touch
+ Khai báo 1 con trỏ Sprite*, 1 con trỏ LabelTTF*
+ Khai báo 1 hàm nodeUnderTouch(), để xác định vị trí Node khi Touch lên màn hình

Mở file HelloWorleScene.cpp
+ Phần Inlcude có #include "MyBodyParser.h"
+ Hãy chú ý từ phần này
sp_2dx = Sprite::create("2dx.png"); // Thêm vào 1 Sprite ảnh 
sau đó là lệnh setPosition quen thuộc nhé.

Và chúng ta tập trung chú ý vào đoạn lệnh quan trọng sau

//Import file bodies.JSON để phân tích
MyBodyParser::getInstance()->parseJsonFile("bodies.json");

// Tạo ra 1 physic body bằng lệnh bodyFormJson của lớp MyBodyParser, hàm này nhận 2 đối số, 1 là sprite ở trên, 2 là tên của project tạo bởi Physicbody Editor ( hãy nhớ lúc ta dùng phần mềm có tạo 1 project là "2dx")

auto _body = MyBodyParser::getInstance()->bodyFormJson(sp_2dx, "2dx");
// Kiểm tra có tồn tại không?
    if (_body != nullptr) {
        _body->setDynamic(false); // Thiết lập body tĩnh, khi vật bị va chạm sẽ đứng im không nhúc nhích gì hết
        _body->setCollisionBitmask(0x000000); // Thiết lập không va chạm vật khác
        sp_2dx->setPhysicsBody(_body); // Đặt body vào sprite, đã quen thuộc
    }

// Đặt Sprite vào layer của Scene
this->addChild(sp_2dx, 0);

Đoạn lệnh bên dưới là tạo Listener lắng nghe sự kiện Chạm màn hình, đã quá quen thuộc nhé, các bạn trở lại các bài 9-12 để nhớ lại.

Xong rồi các mem, với đoạn lệnh trên chúng ta đã biết cách đặt 1 khung physic body từ 1 file JSON vào đối tượng Sprite rồi nhé, quá đơn giản rồi ( Nếu ko xét lớp MyBodyParser). Tiếp theo chúng ta nâng cao hơn 1 chút là kiếm tra xem, có đúng là physic body áp vào có khớp với phần viền của sprite hay ko

+ Xét hàm Node* HelloWorld::nodeUnderTouch(cocos2d::Touch *touch)

   Node* node = nullptr;
    auto location = this->convertTouchToNodeSpace(touch); // Lấy vị trí
    auto scene = Director::getInstance()->getRunningScene(); // Lấy Scene đang chạy
    auto arr = scene->getPhysicsWorld()->getShapes(location); // Trả về 1 mảng <PhysicsShape*> của các hình khối vật lý có tọa độ là location, 

    for (auto& obj : arr) // Vòng lặp kiểm tra trong mảng đó có Node nào là Sprite sp_2dx không
    {
        // Nếu có
        if ( obj->getBody()->getNode() == sp_2dx)
        {
            node = obj->getBody()->getNode(); // Lưu lại node
            break; // Kết thúc vòng lặp luôn nếu tìm thấy
        }
    }
    return node; // Trả lại giá trị là node cho hàm

+ Xét hàm onTouchBegan()

auto current_node = nodeUnderTouch(touch); // Gọi hàm nodeUnderTouch để trà về 1 node

    // Nếu nốt đó đúng là sp_2dx hoặc ko là sp_2dx thì "kêu lên" như sau
    if (current_node == sp_2dx)
    {
        status_label->setColor(Color3B::GREEN); // đặt màu xanh
        status_label->setString("Ohoo, DUNG CHAM VAO EM!");
    }
    else
    {
        status_label->setColor(Color3B::RED);
        status_label->setString("Haha, RA NGOAI ROI ANH!");
    }

    return true; // phải trả về true

Còn hàm onTouchEnded, onTouchMoved thì đơn giản rồi, các bạn tự tìm hiểu nhé.

Bây giờ biên dịch và chạy thử xem thành quả nào



Kết thúc bài 14, chúng ta đã học được cách tạo physic body khá hay từ file JSON, và cách nạp nó vào game.

Ngoài cách import từ file JSON để tạo khung vật lý từ hình phức tạp, ta còn 1 cách khác là import từ file PLIST được tạo bởi phần mềm PHYSICS EDITOR, Hoặc Cocos Studio

Hẹn gặp lại các bạn ở bài sau!

Bài 15: Box2D - Một thư viện vật lý khác của Cocos2d-x (Part 1)

More about

Bài 13: Tạo khung vật lý của đối tượng phức tạp bằng phần mềm Physicbody Editor (Part 1)

Người đăng: chisenhungsuutam on Thứ Bảy, 17 tháng 5, 2014

Hi cả nhà!

Ở bài 5 và bài 6, chúng ta đã biết cách tạo physic trong Cocos2d-x V3.0 rồi phải không? Nhưng trong trường hợp đó chỉ  là 1 hình tròn, nên việc tạo khung body khá dễ dàng. Vậy nếu như đối tượng của chúng ta có đường bao phức tạp thì làm như thế nào?. Sau đây mình sẽ trình bày với các bạn 1 cách, thật ra là viết lại từ 1 bài Tut trên mạng, viết lại cho nhớ thôi mà, hêhê

Bài này có 2 phần như sau:
+ Tạo PhysicsBody Polygons ( Khung vật lý đa giác ) từ hình ảnh bằng phần mềm Box2d-Editor
+ Import vào game và để cho hệ thống Physic của Engine xử lý thông qua các hàm phân tích.



Vậy nhé, ở bài này chúng ta sẽ đi khảo sát 1 phần đầu tiên nhé

Phần 1: Tạo PhysicsBody Polygons ( Khung vật lý đa giác )

1/ Trước tiên phải down phần mềm PhysicBody Editor về, ở đây PhysicsBody Editor, down bản 2.9.2 nhé
giải nén và chạy file physics-body-editor.jar (click đúp). Nếu bạn đã cài JDK thì sẽ chạy thôi.

2/ Phần này định viết bằng chữ, nhưng quyết định quay video hướng dẫn cho nhanh, Bạn dowload file hình ảnh ở đây nhé


Video cho máu nha



Quên mất không giới thiệu trong video là Nếu bạn ko dùng tính năng Auto- Trace thì có thể chọn bằng tay, tuy nhiên sẽ lâu hơn chút

Mình kết thúc bài 13 ở đây nhé, vì bài sau có thể sẽ hơi dài một chút

Hẹn gặp lại vào bài sau!

Bài 14 : Tạo khung vật lý của đối tượng phức tạp bằng Physicbody Editor - Import vào game (Part 2)
More about

Thêm 1 Kênh Video hướng dẫn Cocos2d-x V3.0 rất hữu ích trên Youtube nhé

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

Hi cả nhà!

Lâu lâu không viết Tut mới, cơ bản là cũng đang nghiên cứu. Nhưng các bạn yên tâm, hiện đã có nhiều nhóm viết Tut = Video trên Youtube rồi, rất tường tận và tỉ mỉ.

Các bạn có thể tham khảo tại link sau


Đây là của Tut của nước ngoài nhé, chỉ có 1 chút tiếng Anh thôi, nhưng mà toàn chủ yếu xem code thôi. Các bài Tút rất rõ ràng dễ hiểu, cơ bản là ra rất nhanh nữa, mới 1 tuần mà ra được 35 bài rồi ( bài ngắn thôi ).



Trên Blog này có khá nhiều hạn chế, không tập trung nên mình mới Create 1 cái fanpage để mọi người vào trao đổi và thảo luận nhé.

https://www.facebook.com/mycocos2dx?ref=hl
More about

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