Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 13

Тема: Корректное использование тайлов

  1. #1

    По умолчанию Корректное использование тайлов

    С этой проблемой сталкивались все, кто пытался загрузить в игру собственные материалы, будь то тайлы, персонажи или враги. Это корректный выбор именно того, что нужно. Если загрузить в игру, например персонажа, и при этом не верно расположить его на сетке, то он криво выберется, а если сам png будет не того разрешения, то точка выбора станет меньше или больше. Вот меня и интересует, исходя из каких параметров разрешения png RPG Maker решает этот вопрос?
    Вот загружаешь персонажа 3х4 (картинки), (96х128p), и выбирается один квадратик (32х32), если я верно помню. Чтобы выбиралось одновременно два квадратика, нужно увеличить в два раза общую площадь холста. Если я верно понимаю, или я так делал. Но меня интересует нельзя ли попроще это сделать чем вечно увеличивать холст?
    Вот например, мне для тайла нужен (или для точки действия) нечто с разрешением 200х300.
    Последний раз редактировалось edward; 19.06.2013 в 05:19.
    Люди считают важным написать, что они не будут во что-то играть. А зачем писать, если можно просто не играть?

  2. #2
    Маститый Аватар для Temendir13
    Информация о пользователе
    Регистрация
    12.07.2010
    Адрес
    в городе я проживаю, в Иркутске.
    Сообщений
    1,048
    Записей в дневнике
    1
    Репутация: 38 Добавить или отнять репутацию

    По умолчанию

    Попробуй в имени файла ставить в самом начале символы $ !. Поэкспериментируй с ними

  3. #3
    Хранитель Форума Аватар для Валера
    Информация о пользователе
    Регистрация
    15.04.2008
    Адрес
    Москва
    Сообщений
    14,006
    Записей в дневнике
    3
    Репутация: 166 Добавить или отнять репутацию

    По умолчанию

    В основе любого изображения на ивенте лежит квадрат 32х32 ( или 16х16 в 2000/3 ). Изображение может быть любого размера, но для мейкера это всегда один базовый квадрат. Потому, если у тебя будет огромный дом на одном ивенте, то он будет весь проходим, кроме этого базового квадрата. Придется для реалистичности окружать его непроходимыми тайлами.
    Увеличение же делается просто: в ХР - размером тайлсета ( кратного четырем ) и в Айсе - добавлением значков перед названием и увеличением ( кратного трем ). Как ставить значки можно посмотреть в РТП.

    Спойлер И как тебе не стыдно-то, а, Валера?:


    Оборона форта: http://rghost.ru/8kLGxFtD2
    Сделать, чтоб все происходило, как я хочу, - вот, собственно, и весь мейкер!
    Адский Рейд: http://rpgmaker.su/vbdownloads.php?d...downloadid=106

  4. #4

    По умолчанию

    Спасибо всем огромное, правда! А то я бы мучался.
    Люди считают важным написать, что они не будут во что-то играть. А зачем писать, если можно просто не играть?

  5. #5
    Бывалый Аватар для Гость
    Информация о пользователе
    Регистрация
    21.01.2013
    Сообщений
    837
    Записей в дневнике
    4
    Репутация: 10 Добавить или отнять репутацию

    По умолчанию

    Цитата Сообщение от edward Посмотреть сообщение
    Спасибо всем огромное, правда! А то я бы мучался.
    ТОлько в следующий раз, со всеми своими проблемами, в тему Ощие Вопросы

  6. #6
    Бывалый Аватар для Anxel
    Информация о пользователе
    Регистрация
    06.06.2011
    Адрес
    п.Солнечный, Хаб.край
    Сообщений
    942
    Записей в дневнике
    11
    Репутация: 23 Добавить или отнять репутацию

    По умолчанию

    Гость, убери эту огромную херню из подписи...

  7. #7
    Бывалый Аватар для Гость
    Информация о пользователе
    Регистрация
    21.01.2013
    Сообщений
    837
    Записей в дневнике
    4
    Репутация: 10 Добавить или отнять репутацию

    По умолчанию

    Цитата Сообщение от Anxel Посмотреть сообщение
    Гость, убери эту огромную херню из подписи...
    Неа

  8. #8
    Бывалый Аватар для caveman
    Информация о пользователе
    Регистрация
    15.02.2013
    Сообщений
    766
    Записей в дневнике
    47
    Репутация: 85 Добавить или отнять репутацию

    По умолчанию

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

    Спойлер код:

    Код:
    # BIG events script for XP
    # автор: caveman
    # версия 1.2.0 Добавлено задание Bounding Box в комментах события
    # версия 1.2.1. Исправлено несрабатывание события, когда оно лежит на непроходимом участке карты
    # Скрипт считает большие по размеру евенты как маленькие и позволяет
    # сталкиваться и взаимодействовать с ними адекватно
     
    class Game_Character
      # новые параметры - сдвиги относительно клетки события,
      # исходя из которых надо расчитывать столкновения
      #
      #            []
      #           []E[]
      #            []
      #
      attr_accessor :x_sub 
      attr_accessor :x_add
      attr_accessor :y_sub
      attr_accessor :y_add
     
      alias bigevent_initialize initialize
      def initialize
        @x_sub=0
        @x_add=0
        @y_sub=0
        @y_add=0
        bigevent_initialize
      end
     
      def setup_boxes(dispose)
        unless dispose && @list.nil?
          for command in @list
            if command.code == 108 && command.parameters[0].include?("[bbox")
              command.parameters[0].gsub(/\[[Bb][Bb][Oo][Xx]\|(.+?)\|(.+?)\|(.+?)\|(.+?)\]/) do
                @x_sub = $1.to_s.to_i
                @x_add = $2.to_s.to_i
                @y_sub = $3.to_s.to_i
                @y_add = $4.to_s.to_i
              end
            end
          end
        end
      end
     
      def set_touch_shifts(x_sub, x_add, y_sub, y_add)
        @x_sub=x_sub
        @x_add=x_add
        @y_sub=y_sub
        @y_add=y_add
        return
      end
     
      def event_touch(x, y)
        for i in @x - x_sub..@x + x_add
          for j in @y - y_sub..@y + y_add
            if x == i && y == j
              return true
            end
          end
        end
        return false
      end
     
      # так как положение события не всегда совпадает с местом столкновения -
      # то передадим координаты столкновения
      def over_trigger1?(x,y)
        if @character_name != "" and not @through
          return false
        end
        unless $game_map.passable?(x, y, 0)
          return false
        end
        return true
      end
     
      alias bigevent_passable? passable?
      def passable?(x, y, d)
        # 21 4
        new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
        new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
        unless $game_map.valid?(new_x, new_y)
          return false
        end
        if @through
          return true
        end
        unless $game_map.passable?(x, y, d, self)
          return false
        end
        unless $game_map.passable?(new_x, new_y, 10 - d)
          return false
        end
        for event in $game_map.events.values
          if event.event_touch(new_x, new_y)
            unless event.through
              if self != $game_player
                return false
              end
              if event.character_name != ""
                return false
              end
            end
          end
        end
        if $game_player.x == new_x and $game_player.y == new_y
          unless $game_player.through
            if @character_name != ""
              return false
            end
          end
        end
        return true
      end
    end
     
    # ===================================================================== #
    class Game_Player 
       #--------------------------------------------------------------------------
      alias big_event_check_event_trigger_here check_event_trigger_here
      def check_event_trigger_here(triggers)
        result = false
        if $game_system.map_interpreter.running?
          return result
        end
        for event in $game_map.events.values
          if event.event_touch(@x, @y) and triggers.include?(event.trigger)
            if not event.jumping? and event.over_trigger1?(@x,@y)
              event.start
              result = true
            end
          end
        end
        return result
      end
      #--------------------------------------------------------------------------
      alias big_event_check_event_trigger_there check_event_trigger_there
      def check_event_trigger_there(triggers)
        result = false
        if $game_system.map_interpreter.running?
          return result
        end
        new_x = @x + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
        new_y = @y + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
        for event in $game_map.events.values
          if  event.event_touch(new_x, new_y) and
             triggers.include?(event.trigger)
            if not event.jumping? and not event.over_trigger1?(@x,@y)
              event.start
              result = true
            end
          end
        end
        if result == false
          if $game_map.counter?(new_x, new_y)
            new_x += (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
            new_y += (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
            for event in $game_map.events.values
              if event.event_touch(new_x, new_y) and triggers.include?(event.trigger)
                if not event.jumping? and not event.over_trigger1?(@x,@y)
                  event.start
                  result = true
                end
              end
            end
          end
        end
        return result
      end
      #--------------------------------------------------------------------------
      alias big_event_check_event_trigger_touch check_event_trigger_touch
      def check_event_trigger_touch(x, y)
        result = false
        if $game_system.map_interpreter.running?
          return result
        end
        for event in $game_map.events.values
          if event.event_touch(x, y) and [1,2].include?(event.trigger)
            if not event.jumping? and not event.over_trigger?
              event.start
              result = true
            end
          end
        end
        return result
      end
    end
     
    # ===================================================================== #
    class Game_Map
     
       alias bigevent_passable? passable?
       def passable?(x, y, d, self_event = nil)
        unless valid?(x, y)
          return false
        end
        bit = (1 << (d / 2 - 1)) & 0x0f
        for event in events.values
          if event.tile_id >= 0 and event != self_event and
             event.event_touch(x, y) and not event.through
            if @passages[event.tile_id] & bit != 0
              return false
            elsif @passages[event.tile_id] & 0x0f == 0x0f
              return false
            elsif @priorities[event.tile_id] == 0
              return true
            end
          end
        end
        for i in [2, 1, 0]
          tile_id = data[x, y, i]
          if tile_id == nil
            return false
          elsif @passages[tile_id] & bit != 0
            return false
          elsif @passages[tile_id] & 0x0f == 0x0f
            return false
          elsif @priorities[tile_id] == 0
            return true
          end
        end
        return true
      end
     
      #--------------------------------------------------------------------------
      alias bigevent_check_event check_event
      def check_event(x, y)
        for event in $game_map.events.values
          if event.event_touch(x, y)
            return event.id
          end
        end
      end
     
      # Метод для назначения сдвигов столкновений
      def set_touch_shifts(ev_id, x_sub, x_add, y_sub, y_add)
        events[ev_id].set_touch_shifts(x_sub, x_add, y_sub, y_add)
        return
      end
    end
    И ссылка на пост на Светлой (там же есть еще ссылка на буржуинский вариант)
    http://rpg-maker.info/forum?view=top...id=85&id=58478
    back to the primitive

    http://cavemangame.blogspot.ru/ - разные идеи и новости
    http://cavescripts.blogspot.ru/ - мои скрипты
    http://cavecrusader.blogspot.ru/ - текущий проект

  9. #9
    Хранитель Форума Аватар для Валера
    Информация о пользователе
    Регистрация
    15.04.2008
    Адрес
    Москва
    Сообщений
    14,006
    Записей в дневнике
    3
    Репутация: 166 Добавить или отнять репутацию

    По умолчанию

    Интересный скрипт. Как он на практике? Он полностью делает изображение непроходимым? Но почти у всего есть высота, а, значит, за высотой должно быть проходимо? Но тогда нужно два изображения, непроходимое плоское и проходимое выше героя. Т.е. два ивента. Или это регулируется в скрипте?
    Собственно, воткнуть два ивента в один не сложно ( в момент захода героя в локацию ), но... трудоемко. Может, по старинке? Наложил непроходимых тайлов под "фундамент" и окей?

    Спойлер И как тебе не стыдно-то, а, Валера?:


    Оборона форта: http://rghost.ru/8kLGxFtD2
    Сделать, чтоб все происходило, как я хочу, - вот, собственно, и весь мейкер!
    Адский Рейд: http://rpgmaker.su/vbdownloads.php?d...downloadid=106

  10. #10
    Бывалый Аватар для caveman
    Информация о пользователе
    Регистрация
    15.02.2013
    Сообщений
    766
    Записей в дневнике
    47
    Репутация: 85 Добавить или отнять репутацию

    По умолчанию

    в описании скрипта и в ссылке все есть
    Ты пишешь у евента камент типа [bbox 1,1,1,2] и скрипт делает непроходимым прямоугольник [-1,-1,1,2] относительно этого ивента. Никакой ориентации на графику изображения.
    Также скрипт обрабатывает столкновение с ним, в смысле вызов события.
    back to the primitive

    http://cavemangame.blogspot.ru/ - разные идеи и новости
    http://cavescripts.blogspot.ru/ - мои скрипты
    http://cavecrusader.blogspot.ru/ - текущий проект

Страница 1 из 2 12 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
Корректное использование тайлов