Bitmap отображается за пределами экрана

У меня есть игра, в которой пользователь должен собирать падающие на него капли. Блобы — это растровые изображения. Проблема, с которой я сталкиваюсь, заключается в том, что некоторые капли поступают из-за пределов экрана. Так, например, нижняя часть блоба будет отображаться в самом верху экрана, поэтому я не смогу увидеть полное растровое изображение. Я хочу, чтобы они просто появлялись между верхней и нижней частью экрана, а не за его пределами. Мой вопрос: может ли кто-нибудь помочь мне сделать так, чтобы капли появлялись только на экране? Любая помощь будет принята с благодарностью!

Просто отметить: blobOffsetY = координата нижнего края капли.

Мой код:

for (int j = 0; j < AppConstants.numberOfBlobs; j++) {
    if (blobs.get(j).getBlobX() < -AppConstants.getBitmapBank().getBlobWidth()) {
        blobs.get(j).setBlobX(blobs.get(j).getBlobX() +
                              AppConstants.numberOfBlobs * AppConstants.distanceBetweenBlob);
        int blobOffSetY = AppConstants.minBlobOffsetY +
                          random.nextInt(AppConstants.maxBlobOffsetY - AppConstants.minBlobOffsetY + 1);
        blobs.get(j).setBlobOffsetY(blobOffSetY);
        blobs.get(j).newScore = true;
    }
    blobs.get(j).setBlobX(blobs.get(j).getBlobX() - AppConstants.blobVelocity);
}

На всякий случай, если вы хотите попрактиковаться в голосовании... получайте от этого удовольствие.

GhostCat 22.05.2019 16:31
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
37
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не показываете соответствующий код, но я думаю, ваша проблема начинается здесь:

blobs.get(j)

Кажется, что ваша единственная структура данных, которая «знает» большие двоичные объекты, представляет собой своего рода список. Как следствие, вам всегда нужно повторять все из них, чтобы затем решить, какие из них в настоящее время находятся на вашем видимом экране.

Ответ: придумайте более подходящий способ хранения этих данных. Например, вы можете:

  • как-то Сортировать капли в этом списке (например, «географически»), так что, когда вы найдете первый «за кадром», вы знаете, что вам не нужно обрабатывать какие-либо из последующих.
  • используйте несколько списков, чтобы ваши капли были как-то «сгруппированы», так что вам сразу нужно зациклить только меньшую группу BLOB-объектов
  • использовать различные структуры данных, такие как карты. Ключом может быть какая-то координата, значением может быть список BLOB-объектов, присутствующих в этой координате, чтобы вы могли быстро добраться до затронутых BLOB-объектов.

Но поскольку ваш вопрос довольно широкий и общий, не просите более конкретного ответа.

Другие вопросы по теме