PlayN iOS Ландшафтный режим

Моя игра предназначена только для ландшафта (разрешение экрана 1024*768 - разрешение iPad).

Моя игровая сцена правильно отображается на всех платформах, поддерживаемых PlayN (Android, html и т. д.). Проблема только с iOS.

Я подготовил все ресурсы для разрешения экрана iPad, настроил файл info.plist, зарегистрировал платформу с помощью IOSPlatform.register(app, IOSPlatform.SupportedOrients.LANDSCAPES);

Когда я запускаю свое приложение, все, что касается ориентации устройства, правильно, но игровая сцена не полностью визуализируется. Рендерится для разрешения 768*768 (видны не все объекты сцены - видны только объекты, принадлежащие прямоугольнику 768*768) и оставшееся пространство экрана черное.

Я исследовал проблему следующим образом:

  1. Применено преобразование масштаба к rootLayer (чтобы обеспечить визуализацию всей сцены). PlayN.graphics().rootLayer().setScale(0.75f, 0.75f); Результат - игровая сцена помещается в прямоугольник 768*768 и я вижу все объекты игровой сцены.
  2. Применено преобразование перевода к rootLayer (чтобы убедиться, что PlayN не отображает сцену за пределами прямоугольника 768 * 768). PlayN.graphics ().rootLayer().setTranslation(1024.0f - 768.0f, 0.0f); Результат - игровая сцена переведена, но объекты, не принадлежащие прямоугольнику экрана 768*768, не видны.

Я предполагаю, что PlayN подготавливает свой контекст рисования для разрешения экрана 768*1024 (разрешение ориентации iPad по умолчанию). При рендеринге экрана объекты, расположенные за пределами прямоугольника 768*1024, обрезаются (не рендерятся).

Любая помощь или идеи, которые могут вызвать такое странное поведение, будут очень признательны.

Спасибо!


person Pleskach Yuriy    schedule 15.10.2012    source источник


Ответы (2)


Проблема в следующем:

  • iOS не меняет рамку главного окна и корневую рамку после поворота устройства (в отличие от Android — я проверял).
  • Код PlayN предполагает, что размер представления после поворота должен измениться с 768*1024 (ориентация по умолчанию) на 1024*768.

Фактический результат: PlayN трансформирует игровую сцену, используя матрицу преобразования, но не меняет размер фреймбуфера OpenGL (размер фреймбуфера по-прежнему 768*1024)

Я исправил эту проблему, добавив следующий фрагмент кода в IOSGLContext:

@Override
public void setSize (int width, int height)
{
    if (UIDeviceOrientation.LandscapeLeft == orient || UIDeviceOrientation.LandscapeRight == orient)
    {
        Console.WriteLine("Swap IOSGLContext width and height for " + UIDeviceOrientation.wrap(orient));
        viewWidth = height;
        viewHeight = width;
    }
    else
    {
        viewWidth = width;
        viewHeight = height;
    }
    super.setSize(viewWidth, viewHeight);
}

Теперь все работает как положено!

Если у вас есть другие идеи, как решить эту проблему, буду рад их обсудить)

Спасибо!

person Pleskach Yuriy    schedule 22.10.2012

загрузите последний снимок PlayN-1.5 (из -> https://github.com/threerings/playn не из гугл кода). Эта проблема исправлена ​​в этой версии

person Thiago Born    schedule 23.10.2012