Cách sử dụng PhysicsEditor trong cocos2d-x
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 ...
- 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
https://github.com/AndreasLoew/PhysicsEditor-Cocos2d-x-Box2d/blob/master/Demo/generic-box2d-plist/GB2ShapeCache-x.ccp
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