Установить смещение для BitmapDrawable при повторении в направлении x и y? - PullRequest
0 голосов
/ 29 мая 2020

Я делаю 2D платформер. Я создал текстуру для платформы, которая должна повторяться снова и снова, чтобы заполнить всю платформу, не переходя через край. Моя первая попытка заключалась в том, чтобы нарисовать все пиксели из растрового изображения вручную, но это привело к мерцанию фона при перемещении платформы (потоки движения и рисования разделены, поэтому движение может выполняться с определенной скоростью c, в то время как FPS страдать не надо). Я обнаружил, что этот метод работает лучше:

// Init
bitmap = new BitmapDrawable(res, Texture.PLATFORM.getBitmap());
bitmap.setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);

// Drawing loop
int x = getX() + (isStill() ? 0 : (int)MainActivity.offsetX);
int y = getY() + (isStill() ? 0 : (int)MainActivity.offsetY);

bitmap.setBounds(x, y, x + getWidth(), y + getHeight());
bitmap.draw(canvas);

Однако растровое изображение, похоже, остается неизменным c, в то время как платформа действует как «смотровое отверстие» для просмотра растрового изображения. Единственное, что я могу придумать, - это каким-то образом "сместить" stati c bitmap:

bitmap.offset(x, y);

Очевидно, это не функция. Я не смог найти тот, который делал бы то, что я хочу, просматривая документацию.

Чтобы вызвать что-то, BitmapDrawable заставляет фон не перемещаться вместе с платформой, что делает его очень странным.

Заранее спасибо!

1 Ответ

0 голосов
/ 29 мая 2020

Попробуйте эти советы в своем коде: (я предполагал, что игра движется вперед в горизонтальном направлении)

  1. ПАРЕНЬ должен только двигаться вверх и вниз (при соответствующем прикосновении вход) и не вперед, а назад , так как вы хотите, чтобы фокус (или камера в качестве альтернативы) был исключительно на ГИ. Я заметил, что СТЕНА двигалась вверх в вашем видео, когда ПАРЕНЬ переместился из исходного более высокого положения стены немного ниже, исправьте это, потому что ПАРЕНЬ должен двигаться вниз (попробуйте реализовать эффект гравитации).
  2. СТЕНА должна двигаться только вперед (в основном) и назад (реже я угадайте). СТЕНА не должна нормально двигаться вверх и вниз. Не применяйте к ней эффект гравитации. Вы можете создать не менее 2 BitmapDrawable экземпляров WALL для экрана. Они будут повторно использоваться последовательно (например: если 1-й полностью выходит за пределы экрана, повторно покажите его в желаемом положении, используя метод setBounds()) и продолжите то же самое для других всю игру.
  3. в настоящее время СИНИЙ ФОН, если он является частью большой карты, то он должен быть соответствующим образом смещен.
  4. Одно из препятствий, которое я мог придумать на момент написания этого, - переместить карту Стены вниз , пока он не выйдет за пределы экрана, что приведет к смерти ПАРЕНЯ.
  5. В тех местах, где я использовал слово перемещение , вам нужно использовать setBounds(a, b, c, d) метод для внесения необходимых изменений на основе позиции, поскольку я не нашел другого способа обновить позицию экземпляра BitmapDrawable. Я думаю, вам нужно использовать игровой фреймворк, например libGdx, чтобы получить такой роскошный метод, как setOffset(x, y) или аналогичный.

Извините, что я смог представить вам идеи только без указания кода c У меня нет опыта работы в подобном проекте. Надеюсь, это поможет вам в любом случае.

...