AndEngine可以为Camera设置Chase entity来使得镜头随entity移动, 而entity始终在屏幕中间位置。
但有个问题, 如果Player出现在(0,CAMERA_HEIGHT-PLAYER_HEIGHT)的位置,屏幕中3/4的位置可能出现黑屏。

这就需要创建自己的Camera,并更改原有的追随方式(以冒险岛游戏中镜头追随方式为例)
MapleStoryCamera.java
- public class MapleStoryCamera extends Camera {
-
- private Sprite mChaseEntity;
- private float mBoundsXMax = 16*80;
- private float mBoundsYMax = 16*50;
-
- public MapleStoryCamera(float pX, float pY, float pWidth, float pHeight) {
- super(pX, pY, pWidth, pHeight);
- }
-
- public MapleStoryCamera(float pX, float pY, float pWidth, float pHeight, float boundsXMax, float boundsYMax){
- super(pX, pY, pWidth, pHeight);
- this.mBoundsXMax = boundsXMax;
- this.mBoundsYMax = boundsYMax;
- }
-
- public void updateChaseEntity() {
- if(mChaseEntity != null) {
- final float[] centerCoordinates = mChaseEntity.getSceneCenterCoordinates();
- float x = centerCoordinates[Constants.VERTEX_INDEX_X];
- float y = centerCoordinates[Constants.VERTEX_INDEX_Y];
- if(x < this.getWidth()/2){
- x = this.getWidth()/2;
- }
- if(x > mBoundsXMax - this.getWidth()/2){
- x = mBoundsXMax - this.getWidth()/2;
- }
- if(y < this.getHeight()/2){
- y = this.getHeight()/2;
- }
- if(y > mBoundsYMax - this.getHeight()/2){
- y = mBoundsYMax - this.getHeight()/2;
- }
- super.setCenter(x, y);
- }
- }
-
- public void setChaseEntity(final Sprite pChaseEntity) {
- super.setChaseEntity(pChaseEntity);
- this.mChaseEntity = pChaseEntity;
- }
- }
修改后得到理想效果

|