Sunday, December 14, 2014

Coso2d-x: Thêm một sô lỗi khi build Cocos2d-x 3.3 trên Android (Eclipse)

1. Lỗi Android SDK Content Loader luôn 0% và treo IDE

Khi mới mở Eclipse và load lại các dự án cũ, chúng ta thường hay gặp lỗi này "Android SDK Content Loader 0%" và đứng mãi như vậy.
Đây có lẽ chỉ là lỗi của Eclipse chứ không liên quan đến Cocos2d-x.

Với lỗi này thì đa số các bài hướng dẫn là open lại Eclipse với tham số clean
/Volumes/DATA/DevTools/AndroidDev/adt/eclipse/Eclipse.app/Contents/MacOS/eclipse -clean -refresh
Nếu vẫn không giải quyết được thì chúng ta xóa file:
/Volumes/DATA/Projects/workspace/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi
Sau đó khởi động lại Eclipse.

2. Lỗi "Unable to execute dex: Multiple dex files define Lorg/cocos2dx/lib/Cocos2dxAccelerometer"

Lỗi này xuất hiện khi mình thực hiện build với Cocos2d-x 3.3


Lỗi này là do thư viện engine game Cocos2d-x bị duplicate trong các khai báo của project.
Khắc phục lỗi này như sau

Chọn Project\Properties

Chọn Java Build Path\Libraries


Chọn tiếp Android Dependencies, chúng ta thấy libcocos2dx.jar ở đây, và đây là lý do gây ra tình trạng duplicate khi mà chúng ta đã add project thư viện cocos2dx ở mục Android build.
Sau khi chọn Android Dependencies, click Remove, thao tác này sẽ remove gói cocos2dx để tránh tình trạng duplicate, tuy nhiên một mặc nó cũng xóa đi các thư viện khác, như trong hình là facebook và google-play-service, chúng ta phải add lại 2 gói jar của 2 thư viện này.

Sau đó chỉ cần Bulid lại và Run là hết thấy lỗi.

Thursday, December 11, 2014

iOS: Auto Layout trong lập trình iOS

Hôm nay chúng ta tìm hiểu qua một chút về Auto Layout trong lập trình iOS.
Đến thời điểm hiện tại, sau khi iPhone 5, 5s và rồi iPhone 6, iPhone 6+ xuất xưởng, vấn đề làm thế nào để ứng dụng iOS có thể hỗ trợ tốt tất cả các kích thước màn hình trở thành là điều tất yếu không thể bỏ qua.
Thật ra, một thời gian dài trước đó, bằng cách viết code, mình vẫn có thể xử lý tốt việc này, một phần là mình muốn tận dụng ứng dụng trên các phiên bản iOS cũ từ 5.x trở về trước. Tuy nhiên trong thời điểm này, cùng với việc bắt đầu có nhiều kích thước màn hình, iOS 8 ra đời là động lực để mình có thể chia tay iOS 5.x. Và vậy thì tại sao chúng ta không tận dụng tính năng Auto Layout rất hay của Apple bắt đầu từ phiên bản iOS 6.0.

Friday, November 28, 2014

Cocos2d-x: Sử dụng Coco Studio để xây dựng UI cho game (Phần 1)

Hôm nay chúng ta sẽ tìm hiểu một chút về Cocos Studio, công cụ UI Editor của Cocos2d-x trong việc xây dựng các giao diện cho game.
Hiện tại trong phạm vi bài viết này, mình đang sử dụng:
- Coco Studio 2.0.2, phiên bản cho Mac OS, tải ở trang chủ Cocos2d-x
- Cocos2d-x 3.3rc0 (để Cocos2d-x có thể load được các file của Coco Studio 2.0.2 export ra, chúng ta cần phải sử dụng Cocos2d-x bản 3.3)
- Xcode 6.1

Giả sử đến đây chúng ta đã xong các bước cài đặt, thiết lập môi trường hoạt động cho Cocos2d-x.

Trong phạm vi bài viết này, chúng ta sẽ tìm hiểu việc tạo UI cho một Scene: MainMenuScene, các bài viết tiếp theo chúng ta sẽ tiếp tục tìm hiểu về UIWidget, Animation....


iOS: Unique Identifiers - Lấy ID duy nhất theo thiết bị




Một bài viết rất hay mình đọc được từ nguồn:

Hôm nay tạm dịch lại để mọi người cùng tham khảo.


Kể từ khi Apple không cho phép sử dụng hàm lấy UUID trong iOS, thì việc các lập trình viên muốn có được 1 ID duy nhất theo thiết bị để phục vụ cho một số mục đích trong ứng dụng của mình đã trở nên khó khăn. Apple đã đưa ra cho chúng ta 2 lựa chọn khác "Vendor hoặc Advertising identifiers". Bên cạnh đó, chúng ta còn có một số các phương thức khác nữa. Mỗi cách đều có những đặc điểm khác nhau và chúng ta phải quyết định chọn sử dụng cách nào cho mục đích trong ứng dụng của mình.


Tuesday, October 7, 2014

Cocos2d-x: Game Sky Defense (Phần cuối)


1.1 Action và Animation

1.1.1 Action


Mỗi Node trong Cocos2d-x có các thông tin thuộc tính về: position, rotation, scale, visibility, opacity. Action trong Cocos2d-x sẽ thay đổi một trong các thuộc tính này theo thời gian.

Trong file InGameScene.h


class InGameScene : public Layer

{

private:

      void createActions();

      void shockWaveFinish();

      void animationFinish(Node *sender);

private:

      Action *swingAction_;

      Action *shockwaveAction_;

      Action *growBombAction_;

      Action *rotateAction_;

      Action *groundHitAction_;

      Action *explosionAction_;

};

Cocos2d-x: Game Sky Defense (Phần 3)

1.1 Các Sprite trong lớp InGameScene

class InGameScene : public Layer

{

public:

      static Scene *createScene();

public:

      virtual bool init();

      CREATE_FUNC(InGameScene);

      ~InGameScene();

      virtual void onEnter();

. . .

}

Cocos2d-x: Game Sky Defense (Phần 2)


1 Chuẩn bị Resource

1.1 Hình ảnh game




Các hình ảnh trong game, chúng ta sử dụng một công cụ hỗ trợ để tạo ra Sprite như trên, đó là một trong các công cụ Texture Atlas có tên là Zwoptex. Công cụ này sẽ hỗ trợ tạo ra file ảnh dạng sheet như trên cùng với file .plist ánh xạ vị trí của từng loại sprite, giúp Cocos2d-x có thể đọc được từng ảnh.

Cocos2d-x: Game Sky Defense (Phần 1)

 1 Tổng quan

Phần này chúng ta tiếp tục phát triển game có tên là Sky Defense. Các thiên thạch sẽ rơi xuống từ bầu trời, phá hủy thành phố bên dưới, nhiệm vụ của người chơi là sẽ đặt bom phá hủy các thiên thạch này, bảo vệ thành phố.

Thursday, October 2, 2014

Cocos2d-x: Cấu hình Game AirHockey trên môi trường Android - Eclipse


Cấu hình Game AirHockey  trên Eclipse cho Android

- Chúng ta có thể tham khảo lại bài viết "Cocos2d-x: Làm game đầu tiên - Air Hockey" để nắm tiếp phần này.
- Mở lại dự án AirHockey mà ta đã Import ở các bài trước bằng Eclipse.

- Sau khi build dự án ta sẽ nhận được thông báo lỗi không tìm thấy các file class mà chúng ta định nghĩa thêm, ví dụ như: InGameScene chẳng hạn.




Wednesday, October 1, 2014

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

1.1 Định nghĩa lớp InGameScene

- Màn hình game trong Cocos2d-x là các scene, do vậy chúng ta phải định nghĩa một scene cho game của mình.

- InGameScene, đây là lớp mang theo scene để chứa các đối tượng của game. Thông thường, chúng ta không cần phải định nghĩa một lớp scene riêng biệt mà ta sẽ chú trọng vào định nghĩa một lớp Layer (là vùng chứa thực sự) và trong lớp này có một hàm tĩnh khởi tạo ra scene chứa Layer này.

- Trong file InGameScene.h
#include <stdio.h>

#include "cocos2d.h"

using namespace cocos2d;

class InGameScene : Layer
{
public:
    static Scene* createScene();
   
public:
    virtual bool init();
   
    CREATE_FUNC(InGameScene);

};

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

1 Xây dựng game

1.1 Chuẩn bị môi trường và Resource

- Chúng ta sẽ phát triển game này cho iPad và iPad Retina, sử dụng IDE Xcode

- Resource
  • Âm thanh: các file âm thanh và nhạc nền cho game
  • Hình ảnh: ảnh của sân bóng, mallet, puck. Vì ta phát triển cho 2 loại kích thước nên sẽ có 2 thư mục ảnh sd và hd. Lưu ý khi add resource ảnh cho 2 thư mục này vào Xcode, không như add âm thanh hay font, chúng ta chỉ add tham chiếu 2 thư mục này để tránh bị báo lỗi trùng tên file bên trong 2 thư mục.


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

Tuesday, September 30, 2014

Cocos2d-x: Eclipse báo lỗi “Android Library Update” , “C/C++ Indexer” sau khi Import dự án

Một lỗi rất hay xảy đối với nền tảng Android trong Eclipse, sau khi Import dự án, thiết lập NDK_ROOT và build được dự án trên MAC. Chúng ta thoát Eclipse, sau đó mở lại thì bị báo lỗi như sau:

Monday, September 29, 2014

Cocos2d-x: Tìm hiểu các khái niệm cơ bản (Phần cuối)

1 Game Main Loop trong Cocos2d-x

1.1 Update Loop

- Trong lập trình game, thường là game action, có nhiều chuyển động, ví dụ như một đám mây trôi dần trên màn hình, kẻ địch di chuyển ngược chiều lại nhân vật chính của người chơi… Để hỗ trợ thực hiện các action như vậy, chúng ta cần biết đến khái niệm “vòng lặp game”, đây thường là 1 “main loop” của game, vòng lặp này sẽ hoạt động liên tục để cập nhật lại các trạng thái của các đối tượng game. Ví dụ như: cập nhật lại vị trí của đám mây, tiếp tục như thế chúng ta sẽ có được hình ảnh đám mây đang trôi.

Cocos2d-x: Tìm hiểu các khái niệm cơ bản (Phần 1)


1 Khái niệm Node, Scene, Layer

- Node, Scene, Layer là 3 khái niệm cơ bản nhất và cũng khá mơ hồ nhất khi tiếp cận Cocos2d-x. Do vậy ở phần đầu chúng ta sẽ cùng tìm hiểu qua các khái niệm này như thế nào.

- Trước hết chúng ta tạm chấp nhận cấu trúc kế thừa các lớp





Saturday, September 27, 2014

Cocos2d-x - Cài đặt và thiết lập môi trường trên MAC OS


Cài đặt Cocos2d-x và các công cụ liên quan

  • Cocos2d-x là một cross-platform dùng để phát triển Game đa nền tảng dành cho iOS, Mac OS, Android, Window Phone, Window Desktop.
  • Chúng ta sẽ tìm hiểu các bước cài đặt và cấu hình Cocos2d-x trên máy MAC để phát triển game cho 2 nền tảng Mobile thông dụng là iOS và Android.
  • Trước hết chúng ta cần download Cocos2d-x và các công cụ hỗ trợ cần thiết liên quan: