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;
}
}
修改后得到理想效果