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;
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); }
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 onCreateScene()
Mã:
public void setCurrentScene(Scene scene){ mEngine.registerUpdateHandler(newFPSLogger()); mCurrentScene = newScene(); mCurrentScene.setBackground(newBackground(0.09804f, 0.7274f, 0.8f)); returnmCurrentScene; }
Mã:
public static AndEngineTutorial2Activity getSharedInstance(){ return instance; } //De thay doi scene hien tai public void setCurrentScene(Scene scene){ mCurrentScene=scene; getEngine().setScene(scene); }
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>
Mã:
private AndEngineTutorial2Activity activity;
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();
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; }
Post a Comment Blogger Facebook
Post a Comment