Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.141.202.54] |
|
Сообщ.
#1
,
|
|
|
Даже не предполагал ,что конкретно застряну на этом. Вобщем не могу въехать в логику компановки игровой карты.У меня еcть картинка Image image 240 X 440.Если делаю так - TiledLayer layer = new TiledLayer(20,20,image,24,40) - ругается java.lang.IndexOutOfBoundsException.Если так - TiledLayer layer = new TiledLayer(20,20,image,24,25) - ругается IllegalArgumentException.Я понимаю,что в первом случае выбрасывает ошибку выхода за пределы массива,а во втором - ругается на неверный аргумент.Но дело в том ,что я не могу понять саму логику того,как выбирается количество строк и столбцов,а также ширина и высота одной ячейки исходя из размеров используемого изображения.Что и чему должно быть кратно? Разъясните пожалуйста
Это сообщение было перенесено сюда или объединено из темы "TiledLayer.Не могу разобраться" |
Сообщ.
#2
,
|
|
|
Даже не предполагал ,что конкретно застряну на этом. Вобщем не могу въехать в логику компановки игровой карты.У меня еcть картинка Image image 240 X 440.Если делаю так - TiledLayer layer = new TiledLayer(20,20,image,24,40) - ругается java.lang.IndexOutOfBoundsException.Если так - TiledLayer layer = new TiledLayer(20,20,image,24,25) - ругается IllegalArgumentException.Я понимаю,что в первом случае выбрасывает ошибку выхода за пределы массива,а во втором - ругается на неверный аргумент.Но дело в том ,что я не могу понять саму логику того,как выбирается количество строк и столбцов,а также ширина и высота одной ячейки исходя из размеров используемого изображения.Что и чему должно быть кратно? Разъясните пожалуйста
|
Сообщ.
#3
,
|
|
|
Попытаюсь вам помочь.
Вот так выглядит прототип конструктора класса TiledLayer: TiledLayer (int columns, int rows, Image image, int tileWidth, int tileHeight) ; - columns - количество столбцов на которые разбивается фоновое изображение; - rows - количество строк на которые разбивается фоновое изображение; - image - собственно это и есть объект, в который вы предварительно должны загрузить фоновое изображение - tileWidth - tileHeight Добавлено Попытаюсь вам помочь. Вот так выглядит прототип конструктора класса TiledLayer: TiledLayer (int columns, int rows, Image image, int tileWidth, int tileHeight) ; - columns - количество столбцов на которые разбивается фоновое изображение; - rows - количество строк на которые разбивается фоновое изображение; - image - собственно это и есть объект, в который вы предварительно должны загрузить фоновое изображение; - tileWidth - ширина ячейки фонового изображение на которые разбиваете его столбцами и строками; - tileHeight- высота ячейки фонового изображение на которые разбиваете его столбцами и строками; Если высота вашего изображения Height, а ширина - Wigth, то нужно выбирать параметры так чтобы выполнялись следующие условия: columns*tileWidth=Width; rows*tileHeigth=Heigth; Для вашего изображения (240 Х 440)нужно выбрать например: TiledLayer layer = new TiledLayer(20,20,image,12,22); Таким образом вы разделите фоновое изображение на 40 ячеек размером 12 х 22. Если же нужно разделить изображение на конкретные ячейки например 40 х 40, соответственно с формулами конструктор будет выглядеть так: TiledLayer layer = new TiledLayer(6,11,image,40,40); Надеюсь помог вам? |
Сообщ.
#4
,
|
|
|
Спасибо,studentus,вы мне помогли.От себя хочу добавить,что описанный вами метод является частным случаем компоновки карты и что необязательно сумма ячеек как по ширине так и по высоте должна быть равна ширине и высоте изображения соответственно.В общем же случае,если считать,что Width & Height - ширина и высота используемого изображения,а tileWidth & tileHeight - соответственно - ширина и высота ячейки,Width должна быть кратна tileWidth(),аналогично Height должна быть кратна tileHeight,в противном случае при создании объекта типа TiledLayer рискуем схлопотать IllegalArgumentException
|
Сообщ.
#5
,
|
|
|
Цитата spaik @ Спасибо,studentus,вы мне помогли.От себя хочу добавить,что описанный вами метод является частным случаем компоновки карты и что необязательно сумма ячеек как по ширине так и по высоте должна быть равна ширине и высоте изображения соответственно Почему же это частный случай. Вы можете разбить фоновое изображение только на ячейки одинакового размера. То есть нельзя чтобы в первом ряду было, например, 5 ячеек, а во втором 10. Вы правильно говорите: Цитата spaik @ В общем же случае,если считать,что Width & Height - ширина и высота используемого изображения,а tileWidth & tileHeight - соответственно - ширина и высота ячейки,Width должна быть кратна tileWidth(),аналогично Height должна быть кратна tileHeight Но, коэффициент пропорциональности как раз и будет числом строк и столбцов, то есть мы возвращаемся к формуле: columns*tileWidth=Width; rows*tileHeigth=Heigth; |
Сообщ.
#6
,
Сообщение отклонено: Flex Ferrum -
|