AndEngine: масштабированная сцена - как преобразовать координаты сцены в локальную сущность объекта в сцене - PullRequest
1 голос
/ 08 января 2012

Я использую свой трюк для масштабирования всей сцены в соответствии с разрешением экрана.

Тогда я застрял с проблемой с масштабированной сценой.

Мне не удалось преобразовать координаты 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, но в этом случае он не может работать, потому что моя сцена масштабирована, как указано выше. Я пытался пересчитать реальную позицию в местном, но, кажется, я пропустил некоторые важные вещи. Не могли бы вы дать мой совет :) Очень благодарен и ценится И извините за мой английский !!!

...