Showing posts with label Andengine. Show all posts
Showing posts with label Andengine. Show all posts

Monday, December 2, 2013

Flip 3D - LoopEntityModifier And SequenceEntityModifier

Để một Sprite có được hiệu ứng 3d bạn làm như sau :
  1. yoursprite.registerEntityModifier(new LoopEntityModifier(
  2.  new SequenceEntityModifier(new DelayModifier(0.3f),new  ScaleModifier(0.5f, 1.0f, 0f, 1.0f, 1.0f, new  IEntityModifierListener() { 
  3.       @Override 
  4.       public void onModifierStarted(
  5.           IModifier pModifier, IEntity pItem) {
  6.           } 
  7.       @Override 
  8.       public void onModifierFinished( IModifier pModifier, IEntity  pItem) {
  9.           } 
  10.  })  
  11.  , new ScaleModifier(0.5f, 0f, 1.0f, 1.0f, 1.0f),new DelayModifier(0.3f))));
Giải thích 1 chút :
 - LoopEntityModifier dùng để lặp một Modifier.
SequenceEntityModifier được dùng để thực hiện các modifier một cách liên tiếp : nó sẽ thực hiện hết modifier này đến modifier khác.

Wednesday, September 11, 2013

Tổng hợp các lỗi và cách xử lí !

Updating...

Saturday, September 7, 2013

Bài 2.1 : Entity Modifier - Removing Entity - TouchEvent

1. Entity Modifier :- Bạn có thể sử đổi trạng thái của Entity như : dịch chuyển, xoay, phóng to, thu nhỏ, đôi màu v.v. Mọi class hổ trợ việc này nằm trong gói org.andengine.entity.modifier  bạn có thể vào tìm hiểu. Bài viết này mình chỉ hướng dẫn đăng ký Modifier.
- Để đăng ký một Modifier cho entity bạn làm như sau :
     - Tạo một Modifier và đắng ký cho Entity:
  1. MoveXModifier x = new MoveXModifier(200f,fromX,toX);
  2. x.setAutoUnregisterWhenFinished(true);//tự động hủy đăng ký khi kết thúc
  3. entity.registerEntityModifier(x);
     - Để một Modifier lặp đi lặp lại nhiều lần, sử dụng bạn sửa dòng 3 lại như sau :
  1. entity.registerEntityModifier(new LoopEntityModifier(x));
    - Ngoài ra, bạn có thể thêm các sự kiện khi bắt đâu, hoặc kết thúc Modifier bằng cách tạo một IEntityModifier.IEntityModifierListener lúc này bạn sẽ phải override 2 phương thức onModifierStarted và onModifierFinished. Và truyền vào tham số cuối cùng của modifier.

2.Removing Entity
Để xóa một Entity ra khỏi scene bạn làm như sau :

  1. activity.runOnUpdateThread(new Runnable() {
  2. @Override
  3. public void run() {
  4. entity.clearEntityModifiers();
  5. entity.clearUpdateHandlers();
  6. mScene.unregisterTouchArea(entity);//nếu đã được đăng ký Touch Event
  7. entity.detachSelf();
  8. entity.dispose();
  9. }
  10. }
3. TouchEvent
Đăng ký Touch Event cho Entity:
   - Để đăng ký một sự kiện khi người chơi chạm vào  Entity. Lúc khởi tạo Entity bạn override lại phương thức onAreaTouched. Ví dụ khí touch vào sprite thì xóa sprite đó :

  1. Sprite image = new Sprite(0, 0, mPlayerTextureRegion,
  2. mEngine.getVertexBufferObjectManager()){
  3.    @Override
  4.    public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
  5. float pTouchAreaLocalX, float pTouchAreaLocalY) {
  6.            if (pSceneTouchEvent.isActionDown()) {
  7.               activity.runOnUpdateThread(new Runnable() {
  8. @Override
  9. public void run() {
  10. image.clearEntityModifiers();
  11. image.clearUpdateHandlers();
  12. scene.unregisterTouchArea(image);
  13. image.detachSelf();
  14. image.dispose();
  15.                  image.reset();
  16. }
  17.            }
  18. };
  19. scene.registerTouchArea(image);

Wednesday, September 4, 2013

Bài 2 : Entity - Làm việc với Sprite

Sprite là một phần mở rộng của Entity (xem bài mở đâu). Thường được dùng để vẽ các bức ảnh tỉnh lên scene. Bài này mình sẽ hướng dẫn cách vẽ một sprite lên scene và các phương thức thường dùng của nó.
Download ảnh bên dưới và copy vào thư mục assets trong project.
Lấy ví dụ ở bài hướng dẫn trước .Đầu tiên, mình sẽ load resources của sprite mà mình muốn vẽ như sau :
- Khởi tạo 2 biến
  1. private BitmapTextureAtlas mBitmapTextureAtlas;
  2. private ITextureRegion mPlayerTextureRegion;
    -BitmapTextureAtlas đinh nghĩa một vùng kết cấu hình chữ nhật với chiều dài và chiều rộng xác định. TextureRegion đinh nghĩa cụ thể hình ảnh được hiển thị trong BitmapTextureAtlas  . Bạn có thể hiểu BitmapTextureAtlas giống như một cái hộp, và TextureRegion là vật màn trong cái hộp đó. Vì vậy TextureRegion không thể có kích thước lớn hơn BitmapTextureAtlas. Vì vậy kích thước hình ảnh mà bạn định nghĩa trong TextureRegion phải bé hơn kích thước của BitmapTextureAtlas.
    - Trong phương thức onCreateResources khởi tạo các biến như sau:
  1. mBitmapTextureAtlas = new BitmapTextureAtlas(this.getTextureManager(), 214, 320);
  2. //214 chiều rộng + độ cao của ảnh
  3. mPlayerTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mBitmapTextureAtlas, this, "minion.png", 0, 0);
  4.  mBitmapTextureAtlas.load();
Lưu ý : 0,0 tọa độ được vẽ trên BitmapTextureAtlas. Bạn có thể hình dung như sau :
     - Màu đỏ là vùng được BitmapTextureAtlas định nghĩa. Màu vàng là vùng TextureRegion được hiển thị theo các tọa độ khác nhau.

Nếu bạn đặt ảnh trong folder con của assets thêm phương thức sau để xác định đường dẫn cho anh :
  1. BitmapTextureAtlasTextureRegionFactory
  2. .setAssetBasePath("path");


Sau khi đã load texture tạo một đối tượng Sprite .Có rất nhiều contructor cho bạn lựa chọn mình thường tạo Sprite sử dụng contructor như sau:

  1. Sprite image = new Sprite(0, 0, mPlayerTextureRegion, mEngine.getVertexBufferObjectManager());

Và vẽ ảnh này lên scene:

  1. currentScene.attachChild(image);
Sau đây mình liệt kê một số phương thức thường dùng để hỗ trợ trong việc vẽ sprite lên scene :
- setPosition : set theo vị trí của Entity khác hoặc theo tọa độ x,y.
- setAlpha : chỉnh độ trong suốt .
- setScale : phóng to, thu nhỏ.
- setFlipped : lật ảnh 180 độ theo chiều x và y.
- setSize : chỉnh size của sprite.
- setVisible : ẩn hoặc hiển thị sprite.
- setZIndex : chỉnh vị trí sprite theo tọa độ Z khá quan trong khi bạn làm với nhiều layer.

Sau đây là toàn bộ code sau khi hoàn thành :

  1. public class  MyGameActivity extends BaseGameActivity {
  2. private Camera mCamera;// tạo camera, lưu ý camera không thể thay đổi
  3. private int CAMERA_HEIGHT = 720;// khai báo chiều cao cho camera
  4. private int CAMERA_WIDTH = 480;// khai báo chiều dọc cho camera
  5. private BitmapTextureAtlas mBitmapTextureAtlas;
  6. private ITextureRegion mPlayerTextureRegion;

  7. @Override
  8. public EngineOptions onCreateEngineOptions() {
  9. // Cài đặt EngineOptions với 1 camera. Ngoài ra bạn có thể tùy chọn có
  10. // music,sound hay có Multi Touch

  11. mCamera = new BoundCamera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
  12. EngineOptions eni = new EngineOptions(true,
  13. ScreenOrientation.PORTRAIT_SENSOR, new FillResolutionPolicy(),
  14. this.mCamera); // set fullscreen = true , theo chiều dọc =
  15. // PORTRAIT_SENSOR, full màn hình = new
  16. // FillResolutionPolicy()
  17. eni.getAudioOptions().setNeedsMusic(true);// set game có music
  18. eni.getAudioOptions().setNeedsSound(true);// set game có Sound
  19. eni.getTouchOptions().setNeedsMultiTouch(true);
  20. if (MultiTouch.isSupported(this)) {
  21. if (MultiTouch.isSupportedDistinct(this)) {
  22. } else {
  23. }
  24. } else {
  25. Toast.makeText(
  26. this,
  27. "Sorry your device does NOT support MultiTouch!\n\n(Falling back to SingleTouch.)\n\nControls are placed at different vertical locations.",
  28. Toast.LENGTH_LONG).show();
  29. } // set game co multi touch
  30. return eni;
  31. }

  32. @Override
  33. public void onCreateResources(
  34. OnCreateResourcesCallback pOnCreateResourcesCallback)
  35. throws Exception {
  36. mBitmapTextureAtlas = new BitmapTextureAtlas(this.getTextureManager(),
  37. 214, 320);
  38. // 214 chiều rộng + độ cao của ảnh
  39. mPlayerTextureRegion = BitmapTextureAtlasTextureRegionFactory
  40. .createFromAsset(this.mBitmapTextureAtlas, this, "minion.png",
  41. 0, 0);
  42. mBitmapTextureAtlas.load();
  43. // Tạo tất cả các Resources. Load các Resourt như ảnh, font chữ,
  44. // music,sound.
  45. // Phần này mình sẽ hướng dẫn ở các bài sau. Thêm câu lệnh sau
  46. pOnCreateResourcesCallback.onCreateResourcesFinished();
  47. }

  48. @Override
  49. public void onCreateScene(OnCreateSceneCallback pOnCreateSceneCallback)
  50. throws Exception {
  51. // Tạo scene và attach các thứ mà bạn vẽ vào scene
  52. Sprite image = new Sprite(0, 0, mPlayerTextureRegion,
  53. mEngine.getVertexBufferObjectManager());
  54. Scene currentScene = new Scene();
  55. currentScene.attachChild(image);
  56. pOnCreateSceneCallback.onCreateSceneFinished(currentScene);
  57. }

  58. @Override
  59. public void onPopulateScene(Scene pScene,
  60. OnPopulateSceneCallback pOnPopulateSceneCallback) throws Exception {
  61. // Attach các thứ mà bạn thường xuyên hiển thị trên Scene.
  62. pOnPopulateSceneCallback.onPopulateSceneFinished();
  63. }
  64. }

Friday, August 30, 2013

Andengine - Bài 1: Cài đặt BaseGameActivity

BaseGameActivity là activity bạn phải khởi tạo khi làm việc với andengine. Giống như các Activity thông thường BaseGameActivity cũng có life cycle . Sau đây, mình sẽ giới thiệu các thành phần cũng như các phương thức mà bạn phải cài đặt.
Đầu tiên tạo class MyGameActivity extends BaseGameActivity. Lúc này bạn sẽ phải triển khai một vài phương thức, mình sẽ comment chức năng của phương thức đó.

  1. public class MyGameActivity extends BaseGameActivity{

  2. @Override
  3. public EngineOptions onCreateEngineOptions() {
  4. // Cài đặt EngineOptions với 1 camera. Ngoài ra bạn có thể tùy chọn có music,sound hay có Mult iTouch
  5. return null;
  6. }

  7. @Override
  8. public void onCreateResources(
  9. OnCreateResourcesCallback pOnCreateResourcesCallback)
  10. throws Exception {
  11. //Tạo tất cả các Resources. Load các Resourt như ảnh, font chữ, music,sound.
  12. }

  13. @Override
  14. public void onCreateScene(OnCreateSceneCallback pOnCreateSceneCallback)
  15. throws Exception {
  16. //Tạo scene và attach các thứ mà bạn vẽ vào scene
  17. }

  18. @Override
  19. public void onPopulateScene(Scene pScene,
  20. OnPopulateSceneCallback pOnPopulateSceneCallback) throws Exception {
  21. // Attach các thứ mà bạn thường xuyên hiển thị trên Scene.
  22. }
  23. }
Tiếp theo mình sẽ triển khai các phương thức trên :
  1. public class MyGameActivity extends BaseGameActivity{
  2.       private Camera mCamera ;//tạo camera, lưu ý camera không thể thay đổi
  3.       private int CAMERA_HEIGHT = 720;// khai báo chiều cao cho camera
  4.       private int CAMERA_WIDTH = 480;//khai báo chiều dọc cho camera
  5. @Override
  6. public EngineOptions onCreateEngineOptions() {
  7. // Cài đặt EngineOptions với 1 camera. Ngoài ra bạn có thể tùy chọn có music,sound hay có Multi Touch
  8. mCamera = new BoundCamera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
  9. EngineOptions eni = new EngineOptions(true,
  10. ScreenOrientation.PORTRAIT_SENSOR, new FillResolutionPolicy(),
  11. this.mCamera); //set fullscreen = true , theo chiều dọc = PORTRAIT_SENSOR, full màn hình =  new FillResolutionPolicy()
  12. eni.getAudioOptions().setNeedsMusic(true);//set game  có music
  13. eni.getAudioOptions().setNeedsSound(true);//set game có Sound
  14. eni.getTouchOptions().setNeedsMultiTouch(true);
  15. if (MultiTouch.isSupported(this)) {
  16. if (MultiTouch.isSupportedDistinct(this)) {
  17. } else {
  18. }
  19. } else {
  20. Toast.makeText(
  21. this,
  22. "Sorry your device does NOT support MultiTouch!\n\n(Falling back to SingleTouch.)\n\nControls are placed at different vertical locations.",
  23. Toast.LENGTH_LONG).show();
  24. } //set game co multi touch
  25. return eni;
  26. }

  27. @Override
  28. public void onCreateResources(
  29. OnCreateResourcesCallback pOnCreateResourcesCallback)
  30. throws Exception {
  31. //Tạo tất cả các Resources. Load các Resourt như ảnh, font chữ, music,sound.
  32.                 //Phần này mình sẽ hướng dẫn ở các bài sau. Thêm câu lệnh sau
  33.                 pOnCreateResourcesCallback.onCreateResourcesFinished();
  34. }

  35. @Override
  36. public void onCreateScene(OnCreateSceneCallback pOnCreateSceneCallback)
  37. throws Exception {
  38. //Tạo scene và attach các thứ mà bạn vẽ vào scene
  39.                 Scene currentScene= new Scene();
  40.                pOnCreateSceneCallback.onCreateSceneFinished(currentScene);
  41. }

  42. @Override
  43. public void onPopulateScene(Scene pScene,
  44. OnPopulateSceneCallback pOnPopulateSceneCallback) throws Exception {
  45. // Attach các thứ mà bạn thường xuyên hiển thị trên Scene.
  46.                 pOnPopulateSceneCallback..onPopulateSceneFinished();
  47. }
  48. }
Oke. Đến đây bạn đã triển khai xong BaseGameActivity. Việc còn lại bạn phải load các resourt lên và từ resourt đó tạo các hình ảnh để vẽ lên scene. Mình sẽ hướng dẫn cụ thể vào các bài sau.

Wednesday, August 28, 2013

Các thành phần cơ bản andengine.


Tài liệu về andengine các bạn có thể tìm thấy rất nhiều trên mạng. Mình chỉ liệt kê một số thành phần chính trong andengine và chức năng của nó.
1. Camera : - Xác định một hình chữ nhật với chiều dài và chiều rộng xác định trước để vẽ lên màn hình. Có thể tất cả các thứ trong game sẽ được nhìn thấy trên camera hoặc camera chỉ hiển thị một phần của khung cảnh, bạn phải di chuyển camera để nhìn thấy các phần còn lại (Boundcamera) . Hoặc một camera có thể phóng to, thu nhỏ hoặc cuộn gọi là ZoomCamera.
2. Engine : - Trong game có nhiều tiến trình nhỏ chạy song song. Engine sẽ quản lí tất cả các tiến trình đó. Cái này bạn không cần phải quan tâm nhiều vì andengine sẽ làm việc đó.
3. Scene: - Chứa tất cả các đối tượng mà bạn vẽ trên màn hình. Nó giống như một tờ giấy, trên đó bạn có thể vẻ tất cả các hình, cập nhật chúng và có thế chứa các tờ giấy khác.
4. Entiy : Là những Object sẽ vẽ các bức ảnh của bạn lên scene. Có thể một bức ảnh tỉnh (Sprite), một bức ảnh động (AnimatedSprite), hoặc một bức ảnh có nhiều bức ảnh con trong nó (TitledSprite).
Trên đây là một số thành cơ bản, ngoài ra andengine còn có các gói mở rộng khác, mình sẽ đề cập sau.
Ở các bài viết sau mình sẽ có các hướng dẫn cụ thể, các cài đặt và sử dụng thành phần trong andengine.