Yêu cầu:
1. Bạn phải cài đặt Java, SDK, Eclipse, ADT...........Đã có hướng dẫn nhiều google.com
2. Bạn phải add AndEngine Git Plugin vào Eclipse:
ANDROID, OPEN GLES2.0, ANDENGINE....: Hướng dẫn Add AndEngine 2.0 cho Eclipse
3. Bạn phải cấu hình lại Emulator --GPU để phục vụ cho chạy GLES 2.X
ANDROID, OPEN GLES2.0, ANDENGINE....: Chạy AndEngine trong Emulator


OK! Bây giờ việc chuẩn bị đã xong. Chúng ta bắt đầu đi từng bước để tạo ra 1 game thú vị nho nhỏ

(KẺ XÂM CHIẾM KHÔNG GIAN: <Hình minh họa> nguồn: https://en.wikipedia.org/wiki/Space_invaders
Đây không phải là toàn bộ về trò chơi nhưng chỉ minh họa một chút ít và sẽ hoàn thiện sau. Trong game này ta không sử dụng bất kỳ hình ảnh bên ngoài nào.
Ta không sử dụng Sprite (Sử dụng Sprite ưu điểm giảm bộ nhớ sử dụng), trong project này hình ảnh hơi xấu xí 1 chút.


Trước tiên đi vào bài tôi nói qua một số chức năng của các thành phần trong AndEngine một chút


  • SimpleBaseGameActivity: Là một lớp chính của game, nó chứa và quản lý 1 Engine để tạo ra SurfaceView với các nội dung của Engine sẽ được vẽ ra màn hình. Có 1 điều chính sách là 1 Engine cho 1 SimpleBaseGameActivity.
  • Engine: làm trò chơi được sử lý từng bước riêng biệt theo thời gian, nó quản lý đồng bộ hóa việc vẽ ra màn hình và updating the scene. Nó chứa các nội dung mà game của bạn có hiện thời, Có 1 Scene trên mỗi Engine trừ trường hợp SplitScreenEngines.
  • IResolutionPolicy: Một cài đặt của giao diện IResolutionPolicy là một phần của EngineOptions. Nó nói cho AndEngine làm thế nào để xử lý với các size khác nhau của màn hình thiết bị. RatioResolutionPolicy sẽ tối đa hóa SurfaceView với kích thước hạn chế của màn hình, trong khi đó nó vẫn giữ được tỉ lệ của màn hình. Nghĩa là đối tượng không bị méo mó trong SurfaceView.
  • Camera: Một Camera định nghĩa 1 khung hình chữ nhật của Scene mà được vẽ trên màn hình, thông thường có 1 Camera trên mỗi Scene trừ trường hợp SplitScreenEngines. Có lớp con cho phép phóng to, thu nhỏ vị trí của Camera.
  • Scene: Lớp Scene là 1 lớp cha (root) chứa tất cả các đối tượng mà được vẽ lên trên màn hình.
  • Entity: Là các đối tượng sẽ được vẽ bên trong Scene, các đối tượng này có thể ratation, scale....
  • Texture: Một Texture là 1 "image" trong bộ nhớ của chip đồ họa. Trong Android với chiều rộng và chiều cao của 1 texture phải là mũ của 2 ví dụ hình ảnh có kích thước là 60x128 chẳng hạn, thì texture bạn phải tạo là 64x128.
  • ITextureSource: Một cài đặt của giao diện ITextureSource giống như AssetTextureSource quản lý để load 1 ảnh vào 1 vị trí được chỉ rõ trong Texture.
  • TextureRegion: Load ảnh vào texture và cắt ra theo một khung hình chữ nhật, với kích thức bạn đặt trước. Được sử dụng trong Sprites
  • PhysicsConnector: Quản lý để cập nhật AndEngine-Shapes(giống như Rectangle,Sprites, ).....


OK! Let's start! Chúng ta tạo 1 project và đặt tên là AndEngineTutorial2 chẳng hạn và tên Activity là AndEngineTutorial2Activity. Lớp này chúng ta kế thừa từ SimpleBaseGameActivity class của AndEngine và ta xóa bỏ toản bộ nội dung bên trong lớp. Và ta cài đặt 3 method abstract của superclass bằng cách click vào unimplements trên lớp activity--> Nó sẽ tự dộng Gen ra 3 method. Tiếp theo trong Activity này chúng ta khai báo các biến như sau

Mã:
        public static final int CAMERA_WIDTH = 800;
    public static final int CAMERA_HEIGHT = 480;


    public Font mFont;
    public Camera mCamera;


    public Scene mCurrentScene;
    public static AndEngineTutorial2Activity instance;
Chú ý rằng tôi sử dụng biến tĩnh cho CAMERA_WIDTH, CAMERA_HEIGHT. Việc sử dụng biến tĩnh này sẽ rất tốt vì nó phụ thuộc vào kích thước màn hình của thiết bị (tỷ lệ chiều cao, rông....) cho nên bạn không bận tâm chiều cao, rộng của màn hình thiết bị (Điều này tôi sẽ giải thích rõ phần cuối bài).


Sau đó chúng ta sử dụng Font để viết chữ lên trên màn hình giới thiệu <Việc này cũng rất cần thiết trong các trò game>
mCurrentScene là 1 đối tượng kiểu Scene. Nó được sử dụng để chuyển đến Scene trên cùng, nó rất là hữu dụng bạn sẽ biết nó hữu dụng như thế nào trong những phần sau.
Và biến cuối cùng là Activity của chính lớp này.


trong method onCreateEngineOptions() chúng ta thực hiện như sau:


Mã:
        @Override
    public EngineOptions onCreateEngineOptions() {
        // TODO Auto-generated method stub
        instance = this;


        mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);


        return new EngineOptions(true, ScreenOrientation.LANDSCAPE_SENSOR,
                new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), mCamera);
    }
Tiếp theo trong Method onCreateResources()

Mã:
        @Override
    protected void onCreateResources() {
        // TODO Auto-generated method stub
        mFont = FontFactory.create(getFontManager(), getTextureManager(), 256,                
                256, Typeface.create(Typeface.DEFAULT, Typeface.BOLD), 32);
        mFont.load();


    }
Ở trong Game này như tôi đã nói chúng ta không cần bất kỳ Image nào. Chúng ta chỉ khởi tạo mỗi mFont và load nó.

Trong onCreateScene()

Mã:
        public void setCurrentScene(Scene scene){
        mEngine.registerUpdateHandler(newFPSLogger());
        mCurrentScene = newScene();
             mCurrentScene.setBackground(newBackground(0.09804f, 0.7274f, 0.8f));
             returnmCurrentScene;
    }
OK! Đến đây coi như bước đầu tiên ta có thể chạy thử rồi, trước khi chạy thử ta chèn thêm 2 method này vào lớp Activity của chúng ta:

Mã:
        public static AndEngineTutorial2Activity getSharedInstance(){
        return instance;
    }
    //De thay doi scene hien tai
    
    public void setCurrentScene(Scene scene){
        mCurrentScene=scene;
        getEngine().setScene(scene);
    }
getSharedInstance() sẽ trả về Actitvity hiện tại của lớp AndEngineTutorial2Activity vì vậy chúng ta có thể truy cập tới lớp này. Và setCurrentScene() sẽ đặt lại Scene và update mCurrentScene tới Scene mới.

OK! Bây giờ ta chạy thử chương trình, nó sẽ hiển thị màu xanh và không có gì.




Tiếp theo chúng ta cùng nghiên cứu về Splash (Nó được sử dụng rất nhiều trong các Game)

Chúng ta sẽ tạo một Splash Screen với dòng chữ chạy từ 2 phía màn hình (Mục đích để giới thiệu về game, hoặc tác giả....)

Trong strings.xml chúng ta thêm 2 dòng sau vào trong file này: Nhớ chỉnh lại trong file utf-8

Mã:
    <string name="title_1">Tran</string>
    <string name="title_2">Thuan</string>
Tiếp theo chúng ta tạo ra 1 lớp mới và đặt tên là: SplashScreen và kết thừa từ Scene và sau đó chúng ta tạo ra 1 biến như sau:

Mã:
private AndEngineTutorial2Activity activity;
Bên trong phương thức khởi dụng của lớp này ta thêm vào như sau:
Mã:
                setBackground(new Background(0.09804f, 0.6274f, 0));


        activity = AndEngineTutorial2Activity.getSharedInstance();


        Text title1 = new Text(0, 0, activity.mFont,
                activity.getString(R.string.title_1),
                activity.getVertexBufferObjectManager());


        Text title2 = new Text(0, 0, activity.mFont,
                activity.getString(R.string.title_2),
                activity.getVertexBufferObjectManager());

Bây giờ chúng ta có đối tượng Activity tham chiếu tới lớp AndEngineTutorial2Activity của chúng ta, chúng ta tạo ra 2 đối tượng Text, và chúng đều ở vị trí là 0,0.

Tiếp theo chúng ta tạo sự chuyển động cho 2 Text này như sau:

Mã:
                title1.setPosition(-title1.getWidth(), activity.mCamera.getHeight() / 2);


        title2.setPosition(activity.mCamera.getWidth(),
                activity.mCamera.getHeight() / 2);


        attachChild(title1);
        attachChild(title2);


        title1.registerEntityModifier(new MoveXModifier(1, title1.getX(),
                activity.mCamera.getWidth()/2 - title1.getWidth()));
        title2.registerEntityModifier(new MoveXModifier(1, title2.getX(),
                 activity.mCamera.getWidth() / 2));


        //loadResource();
Ở đây chúng ta đã thay đổi vị trí của mỗi đối tượng Text, 2 Text này sẽ chạy từ 2 bên mà hình tới gặp nhau ở giữa màn hình.

OK! Bây giờ chúng ta hãy làm nó hoạt động, ...Bạn hãy trở lại lớp Activity và thay đổi trong onCreateScene() như sau:

Mã:
       protected Scene onCreateScene() {
        // TODO Auto-generated method stub
        mEngine.registerUpdateHandler(new FPSLogger());
        mCurrentScene = new SplashScene();
        //mCurrentScene.setBackground(new Background(1,1,1));
        
        return mCurrentScene;
    }
Đến đây bạn chạy thử và sẽ nhìn thấy Text chạy từ 2 bên màn hình như trong hình. (2 chữ chạy từ 2 góc màn hình tới center)

Post a Comment Blogger

 
Top