Game Studio
Liên kế mạng xã hội

Game Studio


Lập Trình Hiệu Ứng Trong Cocos2d-x 3.x.x

Giới thiệu

Nếu trong trò chơi của bạn cần hiệu ứng đốt lửa, hay các vụ nổ,...Làm thế nào để có những hiệu ứng phức tạp như vậy. Việc bạn thiết kế Animation có thể làm được điều này nhưng để mô phỏng nó chi tiết thì rất cần nhiều Sprite. Đừng lo lắng về vấn đề này, trong Cocosd-x bạn có thể thậm chí là hiện thực được những hiệu ứng đó rất đẹp. Trong bài viết này tôi và các bạn sẽ cùng tìm hiểu về lập trình hiệu ứng trong Cocos2d-x.

Tiền đề bài viết

Bài viết này là bài viết nằm trong những loạt bài viết của tôi về tổng quan làm game 2D sử dụng Cocos2d-x 3.4. 

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

Bài viết này tôi hướng đến những lập trìnhviên mới bắt đầu, hay những ai yêu thích tìm hiểu và học tập làm game 2D bằng Cocos2d-x.

Particle System

Để tạo ra một hiệu ứng như đốt lửa hay đốt lửa,...bạn cần sử dụng một Particle System(Hệ thống hạt). Các hệ thông hạt này là một kỹ thuật trong đồ họa máy tính và vật lý trò chơi sử dụng một số lượng lớn các Sprites rất nhỏ hoặc các đối tượng đồ họa khác để mô phỏng một số loại hiện tượng fuzzy. Vì các hiệu ứng như đốt lửa hay nổ là một hệ thống rất hỗn loạn nên bạn phải cần những hạt nhỏ sẽ dễ dàng mô phỏng được nó.

Thuộc tính của Particle System

Dưới đây là một số thuộc tính của các particle, với một số thuộc tính sau bạn có thể tự hiện thực cho bạn một hiệu ứng đơn giản nào đó.

  • Energy: Khoảng thời gian các hạt tồn tại trong game cho đến khi nó biến mất.
  • Looping: Số lượng các hạt sẽ được khởi tạo lại khi hạt cuối cùng biến mất.
  • Speed, direction, rotation: Mỗi hạt đều có hướng di chuyển khác nhau, tùy theo điều chỉnh tốc độ, hướng di chuyển hay góc độ quay của từng hạt.
  • Constant: Các hạt đều mang các thông số tùy chỉnh giống nhau.
  • Curve: Các thông số của các hạt sẽ thay đổi dựa theo độ lồi lõm của đồ thị. Ví dụ các hạt ban đầu từ từ to hơn theo thời gian hoặc ngược lại).

Chú ý: Mỗi hiệu ứng đều có một đồ thị tổng quát của nó, các hạt sẽ di chuyển tương đối theo đồ thị này. Ví dụ như hiệu ứng "vòi nước" được tạo bởi nhiều đồ thị Parabol.

Một số công cụ để tạo hiệu ứng hạt

Việc bạn có thể tạo ra một hiệu ứng sử dụng Particle System bằng định nghĩa của chính bạn, thiết kế theo ý thích của bạn nhưng đây là việc làm rất tốn thời gian, có thể kết quả lại không được như ý. Những có một số tools giúp bạn có thể tạo ra hiệu ứng.

  • Particle Disigner: Một ứng dụng tạo Particle Effect rất mạnh trên Mac.
  • V-play particle editor: Một cross-flatform thiết kệ Particle Effect cho Cocos2d-x.
  • Particle2dx: Một công cụ thiết kế Particle Effect online.

Những công cụ này tạo ra một file có định dạng .plist và cocos2d-x có thể đọc được chúng để có thể tạo ra hiệu ứng trong game của bạn.

Khởi tạo Particle System

Trong cocos2d-x, việc bạn sử dụng một hiệu ứng từ file format .plist là chuyện dễ dàng.

  1. // Khởi tạo một Particle System có tên là particleSystem.
  2. auto particleSystem = ParticleSystem::create("SpinningPeas.plist");

Một số Particle System trong Cocos2d-x

Có thể bạn chưa sẵn sàng với việc tự tạo ra một hiệu ứng cho game của bạn. Vì vậy bạn có thể sử dụng những hiệu ứng được thiết kế sẵn trong cocos2d-x để sử dụng. Dưới đây là một số hiệu ứng có sẵn.

  • ParticleFire
  • ParticleFireworks
  • ParticleSun
  • ParticleGalaxy
  • ParticleFlower
  • ParticleMeteor
  • ParticleSpiral
  • ParticleExplosion
  • ParticleSmoke
  • ParticleSnow
  • ParticleRain

Ví dụ sử dụng PraticleFireWorks trong cocos2d-x

Khởi tạo hiệu ứng ParticleFireWorks.

  1. // Khởi tạo.
  2. auto emitter = ParticleFireworks::create();
  3. // Thêm vào Scene hiện tại.
  4. addChild(emitter, 10);

Bạn có thể thao tác các hiệu ứng có sẵn trong cocos2d-x. Dưới đây là một số thao tác với nó.

  1. auto emitter = ParticleFireworks::create();
  2.  
  3. // Thiết lập thời gian
  4. emitter->setDuration(ParticleSystem::DURATION_INFINITY);
  5.  
  6. // Chế độ bán kính.
  7. emitter->setEmitterMode(ParticleSystem::Mode::RADIUS);
  8.  
  9. // Chế độ bán kính: 100 pixels từ trung thâm.
  10. emitter->setStartRadius(100);
  11. emitter->setStartRadiusVar(0);
  12. emitter->setEndRadius(ParticleSystem::START_RADIUS_EQUAL_TO_END_RADIUS);
  13. emitter->setEndRadiusVar(0);
  14.  
  15. // Thêm vào Scene hiện tại.
  16. addChild(emitter, 10);

Tham khảo

http://www.cocos2d-x.org

Theo: Stdio