Cách sử dụng PhysicsEditor trong cocos2d-x
Bài đăng này đã không được cập nhật trong 9 năm
- giớ thiệu về PhysicsEditor
PhysicsEditor là một phần mềm dùng để vẽ hình dạng cho các đối tượng vật lý trong các engine game . Đây là một phần mềm hữu dụng giúp chúng ta xác định hình dạng cho các đối tượng vật lý trong game một cách dễ dàng . Các điểm mạnh của phần mềm này :
- Vẽ hình cho các đối tượng vật lý trong một khoảng thời gian ngắn nhất ,chưa đến một phút .
- Nội dung hướng dẫn chi tiết dễ hiểu có source nguồn demo sẵn giúp chúng ta sử dụng dễ dàng. -Hỗ trợ nhiểu engine game như : cocos2d, cocos2d-x, ulity, andengine, Flash/As3 , html5 … Phần mềm này có thể chạy trên nền tảng MacOS từ 10.6 trở lên , windows XP , win 7, win 8 .
- cách dùng physicsEditor trong cocos2d-x
-
đầu tiên tải phần mềm từ http://www.codeandweb.com/physicseditor về cài đặt .
-
Tạo một project cocos2d-x box2d
-
Làm theo hướng dẫn để tạo một file .pes và public ra một file .plist sau đó lưu vào phần resouce trong project vừa tạo . http://www.codeandweb.com/physicseditor/features
-
Tải hai file này về project vừa tạo : https://github.com/AndreasLoew/PhysicsEditor-Cocos2d-x-Box2d/blob/master/Demo/generic-box2d-plist/GB2ShapeCache-x.h
hai file dùng để đọc dữ liệu từ file .plist để vẽ hình dạng cho các đối tượng vật lý.
- Trong hàm khởi tạo game ta thêm dòng code sau để load file .plist lên
// load physics shapes
GB2ShapeCache::sharedGB2ShapeCache()->addShapesWithFile(“filename.plist”);
Trong hàm addNewSpritePhysics thông thường ta phải viết thế này để tạo một đối tượng vật lý
CCSprite *sprite = CCSprite::create(“ninja_attack.png”);this->addChild(sprite, 1000);sprite->setPosition( CCPointMake( p.x, p.y) );
// Define the dynamic body.
//Set up a 1m squared box in the physics
worldb2BodyDef bodyDef;bodyDef.type = b2_dynamicBody;bodyDef.position.Set(p.x/PTM_RATIO, p.y/PTM_RATIO);
bodyDef.userData = sprite;
b2Body *body = world->CreateBody(&bodyDef);
// Define another box shape for our dynamic body.
b2PolygonShape dynamicBox;
//dưới đây là mảng toạ độ của các điểm tạo nên đa giác bao quanh đối tượng vật lý mà ta dùng làm hình dạng của nó
b2Vec2 vertices[4];
vertices[0].Set(-1.2f, -1.2f);
vertices[1].Set(1.2f, -1.2f);
vertices[2].Set(1.2f, 1.2f);
vertices[3].Set(-1.2f, 1.2f);
int32 count = 4;
b2PolygonShape polygon;
dynamicBox.Set(vertices, count);
// Define the dynamic body fixture.
b2FixtureDef fixtureDef;
fixtureDef.shape = &dynamicBox;
fixtureDef.density = 4.0f;
fixtureDef.friction = 1.0f;
fixtureDef.restitution = 0;
body->CreateFixture(&fixtureDef);
Nếu dùng PhysicEditor thì ta chỉ cần viết code ngắn gọn thế này :
CCSprite *sprite = CCSprite::create((name+”.png”).c_str());
sprite->setPosition(p);
addChild(sprite);
b2BodyDef bodyDef;
bodyDef.type = b2_dynamicBody;
bodyDef.position.Set(p.x/PTM_RATIO, p.y/PTM_RATIO);
bodyDef.userData = sprite;
b2Body *body = world->CreateBody(&bodyDef);
// add the fixture definitions to the body
GB2ShapeCache *sc = GB2ShapeCache::sharedGB2ShapeCache();
sc->addFixturesToBody(body, name);
sprite->setAnchorPoint(sc->anchorPointForShape(name));
Dưới đây là link source demo và hướng dẫn dùng PhysicsEditor
http://www.codeandweb.com/physicseditor
https://github.com/AndreasLoew/PhysicsEditor-Cocos2d-x-Box2d
All rights reserved