Wednesday, October 1, 2014

Cocos2d-x: Làm game đầu tiên - Air Hockey (Phần 1)

1 Tổng quan

Ở phần này chúng ta sẽ bắt đầu phát triển một game đơn giản để làm quen các bước lập trình với Cocos2d-x. Game chúng ta sẽ làm có tên là Air Hockey, mô phỏng một trò chơi khá phổ biến trong các siêu thị :)


Game này sẽ cho phép 2 người chơi, mỗi người điều khiển ở 1 nửa phần sân của mình để đánh bóng. Game sẽ được phát triển cho các dòng Tablet, mà ở phần này chúng ta sẽ tạm phát triển cho iPad và iPad retina. Qua game này chúng ta sẽ làm quen với các vấn đề sau:
  • Scene, Layer
  • Sprite
  • Vòng lặp Main loop
  • Xử lý Multi-touch
  • Âm thanh
  • Xử lý Multi-size

2 Phân tích sơ bộ

2.1 Phân tích Layer


Ta phân rã cấu trúc cắt lớp ban đầu của game về mặt hình ảnh như sau


- Scene: game chúng ta chỉ có duy nhất một màn hình game, do vậy chúng ta cần có 1 scene để “chứa” các đối tượng của game.

- Lớp cắt 1: chứa sân bóng và sẽ là lớp dưới cùng và luôn luôn cố định vị trí.

- Lớp cắt 2: chứa các đối tượng Mallet – tạm gọi là búa đánh, và Puck – tên gọi của loại bóng trong môn Hockey. Các đối tượng này sẽ chuyển động, thay đổi vị trí do tác động của người chơi.

- Lớp cắt 3: chứa các nhãn text ghi tỉ số của trận đấu, các đối tượng này sẽ luôn cố định vị trí, chỉ thay đổi giá trị text mỗi lần có bàn thắng được ghi.

Tuy nhiên, đó chỉ là cắt lớp về mặt hình ảnh của game, ta xét thấy các lớp này không cần thiết phải chia ra thành 3 lớp logic riêng biệt về mặt lập trình, vì chúng khá đơn giản, lớp 1 và 3 luôn cố định vị trí, cốt lõi của game nằm ở lớp 2. Do vậy ta có thể đặt tất cả các đối tượng này lên cùng 1 lớp, 1 Layer game, và các lớp (về mặt hình ảnh) sẽ được phân biệt dựa vào thuộc tính Z-Order của các node trên đó.


Các node có Z-Order càng cao thì sẽ ở phía trên các đối tượng thấp hơn khi hiển thị thành hình ảnh.

Việc chúng ta hạn chế phân chia thành nhiều Layer sẽ giúp cho quá trình render của game diễn ra nhanh hơn, nhằm tăng tốc độ của game.

2.2 Phân tích Class

Đối tượng sân bóng, bản thân nó sẽ là một đối tượng Sprite, sử dụng hình ảnh từ Resource để hiển thị, ngoài ra sẽ không có gì đặc biệt khác.

Các nhãn text tỉ số, sẽ là các đối tượng Label, với các nội dung text, font được thiết lập khi khởi tạo.

Riêng các đối tượng Mallet, Puck về bản chất cũng vẫn sẽ là các Sprite, tuy nhiên bản thân chúng sẽ có các thuộc tính đặc biệt, ví dụ:

- Vận tốc: thuộc tính này sẽ tham gia vào quá trình di chuyển đối tượng

- Vị trí mới: là vị trí của đối tượng sẽ di chuyển tới theo vận tốc hiện hành của nó.

Với các thuộc tính này của Mallet và Puck, ta quyết định sẽ định nghĩa một lớp mới cho chúng, và lớp này tất nhiên sẽ là một lớp con của Sprite để kế thừa tất cả các tính chất của một Sprite trong Cocos2d-x

No comments:

Post a Comment