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
- private BitmapTextureAtlas mBitmapTextureAtlas;
- 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:
- mBitmapTextureAtlas = new BitmapTextureAtlas(this.getTextureManager(), 214, 320);
- //214 chiều rộng + độ cao của ảnh
- mPlayerTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mBitmapTextureAtlas, this, "minion.png", 0, 0);
- 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 :
- BitmapTextureAtlasTextureRegionFactory
- .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:
- Sprite image = new Sprite(0, 0, mPlayerTextureRegion, mEngine.getVertexBufferObjectManager());
Và vẽ ảnh này lên scene:
- 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 :
- public class MyGameActivity extends BaseGameActivity {
- private Camera mCamera;// tạo camera, lưu ý camera không thể thay đổi
- private int CAMERA_HEIGHT = 720;// khai báo chiều cao cho camera
- private int CAMERA_WIDTH = 480;// khai báo chiều dọc cho camera
- private BitmapTextureAtlas mBitmapTextureAtlas;
- private ITextureRegion mPlayerTextureRegion;
- @Override
- public EngineOptions onCreateEngineOptions() {
- // 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
- mCamera = new BoundCamera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
- EngineOptions eni = new EngineOptions(true,
- ScreenOrientation.PORTRAIT_SENSOR, new FillResolutionPolicy(),
- this.mCamera); // set fullscreen = true , theo chiều dọc =
- // PORTRAIT_SENSOR, full màn hình = new
- // FillResolutionPolicy()
- eni.getAudioOptions().setNeedsMusic(true);// set game có music
- eni.getAudioOptions().setNeedsSound(true);// set game có Sound
- eni.getTouchOptions().setNeedsMultiTouch(true);
- if (MultiTouch.isSupported(this)) {
- if (MultiTouch.isSupportedDistinct(this)) {
- } else {
- }
- } else {
- Toast.makeText(
- this,
- "Sorry your device does NOT support MultiTouch!\n\n(Falling back to SingleTouch.)\n\nControls are placed at different vertical locations.",
- Toast.LENGTH_LONG).show();
- } // set game co multi touch
- return eni;
- }
- @Override
- public void onCreateResources(
- OnCreateResourcesCallback pOnCreateResourcesCallback)
- throws Exception {
- mBitmapTextureAtlas = new BitmapTextureAtlas(this.getTextureManager(),
- 214, 320);
- // 214 chiều rộng + độ cao của ảnh
- mPlayerTextureRegion = BitmapTextureAtlasTextureRegionFactory
- .createFromAsset(this.mBitmapTextureAtlas, this, "minion.png",
- 0, 0);
- mBitmapTextureAtlas.load();
- // Tạo tất cả các Resources. Load các Resourt như ảnh, font chữ,
- // music,sound.
- // Phần này mình sẽ hướng dẫn ở các bài sau. Thêm câu lệnh sau
- pOnCreateResourcesCallback.onCreateResourcesFinished();
- }
- @Override
- public void onCreateScene(OnCreateSceneCallback pOnCreateSceneCallback)
- throws Exception {
- // Tạo scene và attach các thứ mà bạn vẽ vào scene
- Sprite image = new Sprite(0, 0, mPlayerTextureRegion,
- mEngine.getVertexBufferObjectManager());
- Scene currentScene = new Scene();
- currentScene.attachChild(image);
- pOnCreateSceneCallback.onCreateSceneFinished(currentScene);
- }
- @Override
- public void onPopulateScene(Scene pScene,
- OnPopulateSceneCallback pOnPopulateSceneCallback) throws Exception {
- // Attach các thứ mà bạn thường xuyên hiển thị trên Scene.
- pOnPopulateSceneCallback.onPopulateSceneFinished();
- }
- }