Растровое изображение появляется за пределами экрана - PullRequest
1 голос
/ 22 мая 2019

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

Только на заметку : 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);
}

1 Ответ

1 голос
/ 22 мая 2019

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

blobs.get(j)

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...