Cocos2d-x
Giới thiệu Hiện nay có rất nhiều các bạn trẻ thích tự làm một game nho nhỏ riêng cho mình, vừa là để trải nghiệm sản phẩm game của mình, vừa là trải nghiệm các ngôn ngữ mới. như các bạn cũng biết hiện nay có rất nhiều các ngôn ngữ để phát triển ra một game đa nền tảng ví dụ như HTML5, ...
Giới thiệu
Hiện nay có rất nhiều các bạn trẻ thích tự làm một game nho nhỏ riêng cho mình, vừa là để trải nghiệm sản phẩm game của mình, vừa là trải nghiệm các ngôn ngữ mới. như các bạn cũng biết hiện nay có rất nhiều các ngôn ngữ để phát triển ra một game đa nền tảng ví dụ như HTML5, CoCos-2dx… sau đây mình xin được giới thiệu về ngôn ngữ Cocos 2dx, theo mình nó là một ngôn ngữ khá dễ sử dụng để phát triển một game 2D theo ý muốn, không chỉ thế mà chúng ta có thể build ra đa cho nhiều nền tảng khác nhau. Rất phù hợp cho những ai muốn tiết kiệm thời gian cũng như công sức mà vẫn muốn tạo ra game ở các nền tảng khác nhau.
Các thành phần cơ bản
Action: Là một lớp đối tượng được xây dựng trong Cocos2d-x nhằm mục đích thay đổi thuộc tính đối tượng sau một khoảng thời gian nhất định. Ví dụ:
auto spriteSins = Sprite::create(“hailua.png”); spriteSins->setPossition(Vec2(100, 100)); auto moveTo = MoveTo::create(2, Vec2(200, 200)); spriteSins->runAction(moveTo);
Animation: Là một loại action của đối tượng. ví dụ một bộ phim thì được tập hợp bởi nhiều tấm ảnh được chụp liên tiếp, khi chiếu bộ phim người ta sẽ cho chạy những tấm ảnh này liên lục trong thời gian ngắn nhằm tạo ảo giác mắt cho mắt người xem. animation trong Cocos2d-x cũng hoạt động tương tự như thế. Có kiểu animation:
- Tạo Animation bằng một loạt đối tượng nối tiếp nhau (sheets animation)
- Tạo Animation bằng Skeleton Animation
Khi bạn tạo một Animation bạn nên sử dụng một file Sprite Sheet chứa tất cả các đối tượng cần thiết để tạo Animation thay cho nhiều file đối tượng nhằm tăng hiệu suất của game. Bạn có một file Sheet đối tượng có tên là animation.png và một file format Sheet của đối tượng là animation.plist.
ObjectFrameCache::getInstance()->addObjectFramesWithFile("animation.plist", "animation.png"); const int numberObject = 5; const int maxWord = 50; auto gameObject = Object::createWithObjectFrameName("Object0.png"); gameObject -> setPosition(300, 300); this->addChild(gameObject); Vector<ObjectFrame*> animFrames; animFrames.reserve(numberObject); char ObjectFrameByName[maxWord ] = { 0 }; for (int index = 1; index < numberObject; index++) { sprintf(ObjectFrameByName, "Object%d.png", index); auto frame = ObjectFrameCache::getInstance()->getObjectFrameByName(ObjectFrameByName); animFrames.pushBack(frame); } Animation* animation = Animation::createWithObjectFrames(animFrames, 0.5f); Animate* animate = Animate::create(animation); gameObject->runAction(RepeatForever::create(animate));
Event Dispactch Nhiệm vụ cơ bản của cơ chế Event Dispacth.
- Event listen: Nhận hay lắng nghe sự kiện của người chơi và đóng gói sự kiện đó thành một mã.
- Event dispacth: Thông báo về loại sự kiện của người dùng là loại sự kiện nào.
- Event object: Những đối tượng nào trong game có chứa thông tin về sự kiện này.
Để respone lại các sự kiện của người chơi, trước tiên bạn phải tạo ra một Event Listener. Có năm loại Event Listener trong Cocos2d-x.
- EventListenTouch: Phản ứng với các sự kiện chạm cảm ứng.
- EventListenKeyboard: Phản ứng với các sự kiện bàn phím
- EventListenAcceleration: Phản ứng với các gia tốc sự kiện.
- EventListenMouse: Phản ứng với các sự kiện từ con chuột.
- EventListenCustom: Phản ứng với các sự kiện tùy chỉnh.
Touch Event là sự kiện quan trọng nhất trong game di động, nó dễ tạo ra và cung cấp nhiều chức năng. Khi bạn chạm vào một màn hình(Cảm ứng) của một điện thoại di động, lúc này điện thoại sẽ nhận sự kiện này và xử lý nó. Mỗi sự kiện trên có một khoảng thời gian riêng biệt.
- onTouchBegin sự kiện được kích hoạt khi bạn nhấn xuống.
- onTouchMoved sự kiện được kích hoạt nếu bạn di chuyển các đối tượng và vẫn nhấn xuống.
- onTouchEnded sự kiện được kích hoạt khi bạn thả tay ra khỏi màn hình cảm ứng.
Với các game trên desktop, bạn có thể muốn sử dụng bàn phím cơ học để thao tác với trò chơi của bạn Hàm CC_CALLBACK_2 có chức năng gọi một hàm có hai tham số. Tương tự CC_CALLBACK_0 và CC_CALLBACK_1 là gọi một hàm không có tham số và gọi một hàm có một tham số.
auto listener = EventListenerKeyboard::create(); listener->onKeyPressed = CC_CALLBACK_2(KeyboardTest::onKeyPressed, this); listener->onKeyReleased = CC_CALLBACK_2(KeyboardTest::onKeyReleased, this); _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this); void KeyboardTest::onKeyPressed(EventKeyboard::KeyCode keyCode, Event* event) { // code here. } void KeyboardTest::onKeyReleased(EventKeyboard::KeyCode keyCode, Event* event) { // code here. }
Parallax Scrolling là hiện tượng được tạo ra bởi mắt của người nhìn so với các vất thể xa, gần khác nhau. Vật nào ở càng xa (so với mắt) thì góc nhìn càng nhỏ, vật nào ở gần thì góc nhìn càng rộng. Khi hai vật di chuyển cùng vật tốc thì vật ở xa (có vẻ) di chuyển chậm hơn vật ở gần.
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, 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 đối tượng 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. 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.
auto emitter = ParticleFireworks::create(); addChild(emitter, 10);
Tổng kết
Trên đây là phần giới thiệu về ngôn ngữ Cocos 2dx dùng để xây dựng và phát triển một ứng dụng game 2D đa nền tảng. Chúng ta hoàn toàn có thể sử dụng nó để xây dựng cũng như phát triển game 2D đa nền tảng một cách nhanh chóng và hiệu quả. Do giới hạn của bài viết nên có rất nhiều tính năng khác của Cocos2dx mà mình chưa đề cập trong bài viết này, các bạn có thể tham khảo thêm tại http://www.cocos2d-x.org/ Các bạn có thể sử dụng và phát triển theo mục đích và mong muốn riêng của mình. Chúc các bạn thành công!