Học đánh phím nhanh liên quan tới việc làm thơ ra sao thì học lập trình liên quan đến việc thiết kế phần mềm cũng như vậy. Ted Nelson
STDIO Tiếp tục loạt bài viết giới thiệu về thư viện vật lý trò chơi Chipmunk. Trong bài viết này tôi sẽ giới thiệu về constraints và các loại constraint còn lại có sẵn trong thư viện chipmunk.
Nội dung bài viết

Giới thiệu

Trong bài viết Chipmunk - Phần 3: Constraints :: www.stdio.vn/articles/read/323/chipmunk-phan-3-constraints, tôi đã giới thiệu về thành phần constriants và các loại joint có sẵn trong thư viện vật lý trò chơi Chipmunk. Trong bài viết này tôi sẽ tiếp tục giới thiệu các loại joint còn lại có sẵn trong Chipmunk.

Tiền đề bài viết

Bạn cần mô phỏng vật lý trong games. Với các thư viện vật lý trò chơi sẽ giúp bạn việc này. Bài viết này nằm trong loạt bài viết của tôi giới thiệu về thư viện vật lý trò chơi Chipmunk.

Bài viết nằm trong những loạt bài viết của chương trình Tự Học Cocos2d-x 3.x.x:: www.stdio.vn/programs/content/2/lap-trinh-game-voi-cocos2dx của Stdio.vn :: www.stdio.vn.

Đối tượng hướng đến

Bài viết tôi hướng đến các lập trình viên đã có các kiến thức cơ bản về lập trình games 2D và chưa có kiến thức tương đương.

Nội dung

Trong bài viết này, tôi sẽ giới thiệu các loại joint sau:

  • Rotary spring joints
  • Rotary limit joints
  • Ratchet joints
  • Gear joints
  • Motor joints

Rotary spring joints

Giống như Spring Joints, nhưng làm việc với các trục quay. 

m_world->addJoint(PhysicsJointPin::construct(paddleBody1, boundBody, Vec2(300, 300)));
m_world->addJoint(PhysicsJointPin::construct(paddleBody2, boundBody, Vec2(600, 300)));

PhysicsJointRotarySpring* jointRotarySpring = PhysicsJointRotarySpring::construct(paddleBody1, 
                                                              paddleBody2, stiffness, damping);

m_world->addJoint(jointRotarySpring);

Với boundBody là Physics Body của cái khung bao quanh màn hình.

 

ss_1

Rotary limit joints

Giống như Limit Joint, nhưng làm việc với các trục quay.

m_world->addJoint(PhysicsJointPin::construct(paddleBody1, boundBody, Vec2(300, 300)));
m_world->addJoint(PhysicsJointPin::construct(paddleBody2, boundBody, Vec2(600, 300)));

PhysicsJointRotaryLimit* jointRotaryLimit = PhysicsJointRotarySpring::construct(paddleBody1,
                                                                       paddleBody2, min, max);

m_world->addJoint(jointRotarySpring);

Ratchet joints

Làm việc như một ổ khóa. Nếu bạn xoay một trong các bodies. Body còn lại sẽ quay cùng chiều với body ban đầu. Bạn quay càng nhanh thì body còn lại sẽ quay theo càng nhanh. Nhưng nếu bạn quay ngược lại thì body còn lại vẫn quay theo chiều ban đầu. 

m_world->addJoint(PhysicsJointPin::construct(paddleBody1, boundBody, Vec2(300, 300)));
m_world->addJoint(PhysicsJointPin::construct(paddleBody2, boundBody, Vec2(600, 300)));

PhysicsJointRatchet* jointRotarySpring = PhysicsJointRachet::construct(paddleBody1, 
                                                           paddleBody2, phase, ratchet);

m_world->addJoint(jointRotarySpring);

Gear joints

Giữ tỷ lệ vận tốc góc của cặp bodies tham gia vào joint liên tục. Tỷ lệ luôn luôn được đo trong điều kiện tuyệt đối. 

m_world->addJoint(PhysicsJointPin::construct(paddleBody1, boundBody, Vec2(300, 300)));
m_world->addJoint(PhysicsJointPin::construct(paddleBody2, boundBody, Vec2(600, 300)));

PhysicsJointGear* jointRotarySpring = PhysicsJointGear::construct(paddleBody1, paddleBody2,
                                                                             phase, ratio);

m_world->addJoint(jointRotarySpring);

Motor joints

Giữ vận tốc góc tương đối của hai đối tượng tham gia vào joint liên tục.

m_world->addJoint(PhysicsJointPin::construct(paddleBody1, boundBody, Vec2(300, 300)));
m_world->addJoint(PhysicsJointPin::construct(paddleBody2, boundBody, Vec2(600, 300)));

PhysicsJointMotor* jointRotarySpring = PhysicsJointRotarySpring::construct(paddleBody1, 
                                                                     paddleBody2,rate);

m_world->addJoint(jointRotarySpring);

Tông kết

  • Ở bài viết này tôi đã giới thiệu về các joints còn lại có sẵn trong Chipmunk. Ở phần download là project của tôi ví dụ về Rotary Spring Joints. Với các joint còn lại chỉ còn là việc bạn thiết lập các tham số sao cho đúng với mục đích thiết kế của bạn
  • Bạn có thể thêm nhiều joint giữa hai body, nhưng bạn hay chắc chắn rằng các joints sẽ không cạnh tranh hay chiến đấu lẫn nhau vì có thể làm cho các bodies quay một cách không kiểm soát,...

Mọi thắc mắc bạn có thể bình luận tại bài viết hoặc liên hệ với Trương Đạt :: www.stdio.vn/users/index/11/truong-dat.

Download

Constraints_Example_2

Tham khảo

http://www.cocos2d-x.org

Bạn cần hỗ trợ các dự án kết nối không dây?

Quí doanh nghiệp, cá nhân cần hỗ trợ, hợp tác các dự án IoT, kết nối không dây. Vui lòng liên hệ, hoặc gọi trực tiếp 0942.111912.

  • TỪ KHÓA
  • Arduino
  • ESP32
  • ESP8266
  • Wifi
  • Bluetooth
  • Zigbee
  • Raspberry Pi
THẢO LUẬN
ĐÓNG