Mới tìm hiểu thằng AndEngine thì thấy nó có 2 class để các bạn có thể kế thừa khi viết code cho 1 class mới là : SimpleBaseGameActivity và BaseGameActivity.
Sau khi tìm hiểu thì mình đưa ra nhận xét như sau.
Trước đây, khi các bạn code AndEngine cũ sẽ sử dụng GLES1, khi đó class sẽ kế thừa là BaseGameActivity. Tuy nhiên khi download bản AndEngine GLES2, các bạn có thêm lựa chọn là sử dụng
SimpleBaseGameActivity. Class này extends từ BaseGameActivity, và có 2 abstract class mới, gọi các phương thức nằm trong BaseGameActivity. Chính vì điều này mà các bạn sẽ yên tâm hơn khi viết code và chạy chương trình. Có lúc chỉ vì quên không gọi 1 hàm trong BaseGameActivity mà chương trình chạy sai, không hiểu vì sao? @@
Cùng là class để hiển thị text ra màn hình, nhưng mình sẽ demo sử dụng 2 class, để các bạn thấy được sự khác nhau giữa chúng.
Tips:
Các bạn ấn Ctrl + O để import các library liên quan vào trong project nhé!
Sử dụng SimpleBaseGameActivity
Mã:
public class TextExample extends SimpleBaseGameActivity { // =========================================================== // Constants // =========================================================== private static final int CAMERA_WIDTH = 720; private static final int CAMERA_HEIGHT = 480; // =========================================================== // Fields // =========================================================== private Font mFont; // =========================================================== // Constructors // =========================================================== // =========================================================== // Getter & Setter // =========================================================== // =========================================================== // Methods for/from SuperClass/Interfaces // =========================================================== @Override public EngineOptions onCreateEngineOptions() { final Camera camera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT); return new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), camera); } @Override public void onCreateResources() { this.mFont = FontFactory.create(this.getFontManager(), this.getTextureManager(), 256, 256, Typeface.create(Typeface.DEFAULT, Typeface.BOLD), 32); this.mFont.load(); } @Override public Scene onCreateScene() { this.mEngine.registerUpdateHandler(new FPSLogger()); final Scene scene = new Scene(); scene.setBackground(new Background(0.09804f, 0.6274f, 0.8784f)); final VertexBufferObjectManager vertexBufferObjectManager = this.getVertexBufferObjectManager(); final Text centerText = new Text(100, 40, this.mFont, "Hello AndEngine!
You can even have multilined text!", new TextOptions(HorizontalAlign.CENTER), vertexBufferObjectManager); final Text leftText = new Text(100, 170, this.mFont, "Also left aligned!
Lorem ipsum dolor sit amat...", new TextOptions(HorizontalAlign.LEFT), vertexBufferObjectManager); final Text rightText = new Text(100, 300, this.mFont, "And right aligned!
Lorem ipsum dolor sit amat...", new TextOptions(HorizontalAlign.RIGHT), vertexBufferObjectManager); scene.attachChild(centerText); scene.attachChild(leftText); scene.attachChild(rightText); return scene; } // =========================================================== // Methods // =========================================================== // =========================================================== // Inner and Anonymous Classes // ===========================================================}
Ví dụ trên mình lấy trong example của AndEngine, như các bạn có thể thấy, với class SimpleBaseGameActivity, các bạn sẽ phải viết code trong 2 method cần viết là:
Mã:
public void onCreateResources() {
...
}
public Scene onCreateScene() {
...
}
Ở đây chúng ta chỉ việc viết các hàm liên quan cần thiết mà không cần quan tâm tới tham số của hàm, vì nó không có @@.
Nhưng các bạn sẽ phải tự override hàm onCreateEngineOptions, nó không hiển thị sẵn ra cho mình đâu.[IMG]images/smilies/redface.png[/IMG]
Nhìn code thì thấy sẽ ngắn gọn hơn đi một chút.
Sử dụng BaseGameActivity:
Mã:
public class TextExample extends BaseGameActivity { protected static int CAMERA_WIDTH = 720; protected static int CAMERA_HEIGHT = 480; private Camera mCamera; private Font mFont; @Override public EngineOptions onCreateEngineOptions() { mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT); EngineOptions engineOptions = new EngineOptions(true, ScreenOrientation.LANDSCAPE_SENSOR, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), mCamera); return engineOptions; } @Override public void onCreateResources(OnCreateResourcesCallback pOnCreateResourcesCallback) throws Exception { mFont = FontFactory.create(getFontManager(), getTextureManager(), 256, 256, Typeface.create(Typeface.DEFAULT, Typeface.BOLD), 32); mFont.load(); pOnCreateResourcesCallback.onCreateResourcesFinished(); } @Override public void onCreateScene(OnCreateSceneCallback pOnCreateSceneCallback) throws Exception { this.mEngine.registerUpdateHandler(new FPSLogger()); Scene mScene = new Scene(); mScene.setBackground(new Background(0.09804f, 0.6274f, 0.8784f)); Text centerText = new Text(100, 40, mFont, "Hello AndEngine!", getVertexBufferObjectManager()); mScene.attachChild(centerText); pOnCreateSceneCallback.onCreateSceneFinished(mScene); } @Override public void onPopulateScene(Scene pScene, OnPopulateSceneCallback pOnPopulateSceneCallback) throws Exception { pOnPopulateSceneCallback.onPopulateSceneFinished(); } }
Với class BaseGameActivity thì sẽ có 4 method mà chúng ta cần phải viết code trong đó, phương thức chung giữa 2 class này là onCreateEngineOptions().
Để ý các method còn lại sẽ có 1 callback làm tham số, các bạn bắt buộc phải viết code trả về :
Mã:
pOnCreateResourcesCallback.onCreateResourcesFinished();
pOnCreateSceneCallback.onCreateSceneFinished(mScene);
pOnPopulateSceneCallback.onPopulateSceneFinished();
Để báo hiệu rằng tôi đã hoàn thành xong các code, AndEngine hãy tự xử lý phần còn lại đi!!
OK, vậy sự khác biệt lớn nhất là ở đây, giả sử 1 lúc đãng trí nào đó mà bạn chỉ chăm chăm viết code trong : onCreateEngineOptions, onCreateResources, onCreateScene mà quên gọi callback trong
onPopulateScene giống mình hum qua thì kết quả đúng là méo mặt.
Method onPopulateScene là nơi chúng ta sẽ thêm một số đối tượng, ví dụ như: quân địch,để cảnh của chúng tôi, thêm một cầu thủ, chơi nhạc, tùy chọn trình đơn thiết lập, hoặc bất cứ điều gì khác bạn có thể nghĩ đến.
Vậy là hết rồi, hy vọng các bạn sẽ hiểu được sự khác biệt khi sử dụng SimpleBaseGameActivity và BaseGameActivity ( cho GLES2 và GLES1).
Các bài viết sau mình sẽ tập trung vào việc tạo ra các tùy chọn, thiết lập camera, load resouce ảnh, font chữ. Hy vọng các bạn sẽ đón nhận!
Mọi góp ý hay bổ sung các bạn có thể comment bên dưới nhé!
Rocket 1h là thực phẩm chức năng giúp tăng cường sinh lý nam có nguồn gốc hoàn toàn từ dược liệu tự nhiên. Rất nhiều nam giới đã tuyển lựa Rocket 1h như một phương thuốc hữu hiệu để cải thiện tình...
Nguyên nhân của cặp đôi nam nữ mua...