Используйте mCamera.setCenter(CAMERA_WIDTH / 2, CAMERA_HEIGHT / 2);
. Это сбросит положение камеры.
Кстати, я вижу, что вы продолжаете изменять стрелки меню в соответствии с положением камеры. Вы знаете, у AndEngine есть класс для обработки этого случая :) У вас нет причин делать это вручную ...
Он называется HUD
, что означает Head-Up Display . Вы можете расширить HUD класс , HUD - это просто сцена, которая находится на экране в постоянной позиции. Вы можете добавить к ней столько объектов, сколько захотите. Затем просто позвоните mCamera.setHUD(Your HUD object here);
и все готово, не нужно возиться с движущимися объектами по камере.
Другая проблема, которую я вижу, это то, что вы звоните mCamera.offsetCenter(0, 0);
. offsetCenter
просто добавляет параметры к текущим координатам центра. Добавление 0
не имеет никакого влияния , поэтому этот вызов бесполезен. Чего ты пытаешься достичь? Сбросить камеру обратно в (0, 0)?
EDIT:
Вот пример HUD из моей собственной игры:
public class AttackControl extends HUD {
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Fields
// ===========================================================
private Sprite mSprite;
private IAttackControlClickListener mListener;
// ===========================================================
// Constructors
// ===========================================================
public AttackControl(final float pX, final float pY, final Camera pCamera, final TextureRegion pTextureRegion, final IAttackControlClickListener pListener) {
super.setCamera(pCamera);
this.mListener = pListener;
this.mSprite = new Sprite(pX, pY, pTextureRegion) {
@Override
public boolean onAreaTouched(final TouchEvent pTouchEvent, final float pX, final float pY) {
AttackControl.this.mListener.onClick();
return true;
}
};
super.attachChild(this.mSprite);
super.registerTouchArea(this.mSprite);
}
// ===========================================================
// Getter & Setter
// ===========================================================
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
// ===========================================================
// Methods
// ===========================================================
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
public interface IAttackControlClickListener {
public void onClick();
}
}
Затем вы создаете экземпляр этого класса:
final AttackControl attackControl = new AttackControl(...);
и установите его в качестве HUD камеры:
mCamera.setHUD(attackControl);
В любом случае, если вы хотите использовать более 1 HUD, вы устанавливаете 1 в качестве HUD, а затем делаете следующую дочернюю сцену первой. Например, если у меня есть другой HUD с именем DisplayStats
, и я создал его следующим образом:
final DisplayStats displayStats = new DisplayStats(...);
Затем просто установите его как дочернюю сцену элемента управления атакой. Помните - HUD - это сцена! Все операции на сцене разрешены здесь.
attackControl.setChildScene(displayStats);
А теперь следующим HUD может быть детская сцена displayStats
... И так далее.