Я использую свой трюк для масштабирования всей сцены в соответствии с разрешением экрана.
Тогда я застрял с проблемой с масштабированной сценой.
Мне не удалось преобразовать координаты pSceneTouchEvent в локальные координаты объекта
В моей BaseGameActivity я делаю так:
minScale = getMinScaleToMatchDeviceResolution();
mainScene.setScale(minScale);
sceneXposition = -(minScale*screenWidth-screenWidth)/2.0f;
sceneYposition = -(minScale*screenHeight-screenHeight)/2.0f;
mainScene.setPosition(screenWidth, screenHeight);
У меня есть два слоя в сцене:
1) mBaseEntity - это сущность, непосредственно принадлежащая Scene
mBaseEntity = new Entity (lativeBaseEntityXposition ,lativeBaseEntityYposition);
mainScene.attachChild (mBaseEntity);
2) вторая сущность принадлежит mBaseEntity
mSecondLayer = new Entity ();
mBaseEntity.attachChild (mSecondLayer);
И мой дочерний спрайт был создан во втором слое:
Sprite stickerySprite = new StickerySprite (stickeryXposition, stickeryYposition, stickeryTextureRegion)
mSecondLayer.attachChild (stickerySprite);
Теперь моя цель - переместить stickerySprite после касания.
Моя идея состоит в том, чтобы преобразовать pSceneTouchEvent в локальную позицию, но он не работает
Локальная координата неверна!
StickerySprite(stickeryXposition, stickeryYposition, stickeryTextureRegion)
{
@Override
public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
float pTouchAreaLocalX,
float pTouchAreaLocalY)
{
float[] realPosition =
mSecondLayer.convertSceneToLocalCoordinates(
(pSceneTouchEvent.getX() - this.getWidth() / 2),
(pSceneTouchEvent.getY() this.getHeight() / 2)/);
this.setPosition(realPostion[0], realPosition[1]);
}
Я использовал примеры AndEngine, но в этом случае он не может работать, потому что моя сцена масштабирована, как указано выше.
Я пытался пересчитать реальную позицию в местном, но, кажется, я пропустил некоторые важные вещи.
Не могли бы вы дать мой совет :) Очень благодарен и ценится
И извините за мой английский !!!