На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Следующие правила действуют в данном разделе в дополнение к общим Правилам Форума
1. Здесь обсуждается Java, а не JavaScript! Огромная просьба, по вопросам, связанным с JavaScript, SSI и им подобным обращаться в раздел WWW Masters или, на крайний случай, в Многошум.
2. В случае, если у вас возникают сомнения, в каком разделе следует задать свой вопрос, помещайте его в корневую ветку форума Java. В случае необходимости, он будет перемещен модераторами (с сохранением ссылки в корневом разделе).

3. Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
4. Не рекомендуется создавать несколько несвязанных вопросов в одной теме. Пожалуйста, создавайте по одной теме на вопрос.
Модераторы: dark_barker, wind
  
> TiledLayer.Не могу разобраться
    Даже не предполагал ,что конкретно застряну на этом. Вобщем не могу въехать в логику компановки игровой карты.У меня е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.Не могу разобраться"
      Даже не предполагал ,что конкретно застряну на этом. Вобщем не могу въехать в логику компановки игровой карты.У меня е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.Я понимаю,что в первом случае выбрасывает ошибку выхода за пределы массива,а во втором - ругается на неверный аргумент.Но дело в том ,что я не могу понять саму логику того,как выбирается количество строк и столбцов,а также ширина и высота одной ячейки исходя из размеров используемого изображения.Что и чему должно быть кратно? Разъясните пожалуйста
        Попытаюсь вам помочь. :rolleyes:

        Вот так выглядит прототип конструктора класса 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);
        Надеюсь помог вам? :victory:
          :good: Спасибо,studentus,вы мне помогли.От себя хочу добавить,что описанный вами метод является частным случаем компоновки карты и что необязательно сумма ячеек как по ширине так и по высоте должна быть равна ширине и высоте изображения соответственно.В общем же случае,если считать,что Width & Height - ширина и высота используемого изображения,а tileWidth & tileHeight - соответственно - ширина и высота ячейки,Width должна быть кратна tileWidth(),аналогично Height должна быть кратна tileHeight,в противном случае при создании объекта типа TiledLayer рискуем схлопотать IllegalArgumentException
            Цитата spaik @
            Спасибо,studentus,вы мне помогли.От себя хочу добавить,что описанный вами метод является частным случаем компоновки карты и что необязательно сумма ячеек как по ширине так и по высоте должна быть равна ширине и высоте изображения соответственно


            Почему же это частный случай. Вы можете разбить фоновое изображение только на ячейки одинакового размера. То есть нельзя чтобы в первом ряду было, например, 5 ячеек, а во втором 10.

            Вы правильно говорите:
            Цитата spaik @
            В общем же случае,если считать,что Width & Height - ширина и высота используемого изображения,а tileWidth & tileHeight - соответственно - ширина и высота ячейки,Width должна быть кратна tileWidth(),аналогично Height должна быть кратна tileHeight


            Но, коэффициент пропорциональности как раз и будет числом строк и столбцов, то есть мы возвращаемся к формуле:
            columns*tileWidth=Width;
            rows*tileHeigth=Heigth;
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0316 ]   [ 16 queries used ]   [ Generated: 18.04.24, 04:46 GMT ]