Я пытался найти лучший способ перемещать камеру, перетаскивая фоновую сцену. Я еще не нашел никакого ресурса, чтобы помочь. Я довольно новичок в программировании для Android и использовании andEngine.
Вот мой код до сих пор
public class MainActivity extends SimpleBaseGameActivity{
private static final int CAMERA_WIDTH = 800;
private static final int CAMERA_HEIGHT = 480;
private SmoothCamera mSmoothCamera;
private BitmapTextureAtlas mBitmapTextureAtlas;
private TextureRegion mFaceTextureRegion;
private Sprite face;
private float lastXmove;
private float lastYmove;
@Override
public EngineOptions onCreateEngineOptions() {
mSmoothCamera = new SmoothCamera(0, 0, CAMERA_WIDTH-200, CAMERA_HEIGHT-200, 400, 400, 2);
mSmoothCamera.setBounds(0f,0f,CAMERA_WIDTH, CAMERA_HEIGHT);
cameraLastX = mSmoothCamera.getCenterX();
cameraLastY = mSmoothCamera.getCenterY();
return new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), mSmoothCamera);
}
@Override
public void onCreateResources() {
this.mBitmapTextureAtlas = new BitmapTextureAtlas(this.getTextureManager(), 28, 247, TextureOptions.BILINEAR);
this.mFaceTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mBitmapTextureAtlas, this, "tower.png", 0, 0);
this.mBitmapTextureAtlas.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 float centerX = (CAMERA_WIDTH-100 - this.mFaceTextureRegion.getWidth()) / 2;
final float centerY = (CAMERA_HEIGHT-100 - this.mFaceTextureRegion.getHeight()) / 2;
face = new Sprite(centerX, centerY, this.mFaceTextureRegion, this.getVertexBufferObjectManager()) {
@Override
public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
this.setPosition(pSceneTouchEvent.getX() - this.getWidth() / 2, pSceneTouchEvent.getY() - this.getHeight() / 2);
return true;
}
};
scene.attachChild(face);
scene.registerTouchArea(face);
scene.setTouchAreaBindingOnActionDownEnabled(true);
scene.setOnSceneTouchListener(new IOnSceneTouchListener() {
@Override
public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
if (pSceneTouchEvent.isActionDown()) {
lastXmove = pSceneTouchEvent.getX();
lastYmove = pSceneTouchEvent.getY();
}
if (pSceneTouchEvent.isActionMove()) {
float differenceX = pSceneTouchEvent.getX() - lastXmove;
float differenceY = pSceneTouchEvent.getY() - lastYmove;
mSmoothCamera.setCenter(mSmoothCamera.getCenterX() - differenceX, mSmoothCamera.getCenterY() - differenceY);
lastXmove = pSceneTouchEvent.getX();
lastYmove = pSceneTouchEvent.getY();
}
if (pSceneTouchEvent.isActionUp()) {
}
return true;
}
});
return scene;
}
В настоящее время этот код будет создавать ограниченный вид камеры, и когда я попытаюсь протестировать и перетащить фон, спрайт будет трястись. Я попытался создать порог, чтобы слишком маленькое движение не вызывало перетаскивания. Но чтобы порог не трясся, спрайт начинает немного дергаться.
Если есть лучший способ сделать это или какой-то ресурс, который я еще не видел, чтобы лучше панорамировать камеру, мы будем очень признательны за подталкивание в правильном направлении.