Войти на сайт

Авторизация, ждите ...
×
Правила раздела:
1 Задавайте конкретные вопросы. Для болтовни есть свободный раздел.
2 По возможности давайте конкретные ответы.
3 Один вопрос=одна тема. Если хотите задать ещё вопрос, то начинайте новую тему.
4 Название темы должно составлять сам вопрос, и быть максимально конкретным. Рекомендуется начинать тему словами "Как", "Что", "Почему". А первый пост повторяет вопрос и даёт расширенные сведения.
5 Рекомендуется указывать версию мейкера (2000, 2003, RMXP, RMVX, ACE, IGM, и.т.д.. Это важно, и всё равно ведь спросят.
6 Темы "Пара вопросов", "Помогите", и подобные им - самый лёгкий путь к бану.
7 Поиск находится вверху справа.
А. Названия подразделов этого раздела уточняются. Советы принимаются.

ТЕМА: RGSS: Работа с файлами и папками; чтение текстового файла.

RGSS: Работа с файлами и папками; чтение текстового файла. 16 года 4 мес. назад #22358

  • Equilibrium Keeper
  • Equilibrium Keeper аватар
  • Вне сайта
  • Мастер
  • Скриптер
  • Сообщений: 119
  • Спасибо получено: 3
Нужна помощь. Создал еще один класс в модуле RPG, на подобие Animation. Соответственно нужно создать по нему объекты и добавить в базу.
Таки вот:
1. Нужно получить количество файлов в папке.
2. Нужно получить файл с таким-то индексом в этой папке.
3. Нужно получить имя этого файла.

Так же интересует чтение из кастомного текстового файла.
Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме.
В себя самого загляни, открой свою дорогу в Ничто.
В Ничто ты войди, во тьму, и пойми:
Пока ты во тьме, не может она быть Ничем - ведь там ты.
Администратор запретил публиковать записи гостям.

RGSS: Работа с файлами и папками; чтение текстового файла. 16 года 4 мес. назад #22359

  • Arykray
  • Arykray аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 595
  • Спасибо получено: 52
Довольно интересный вопрос, но в этом плане логичнее будет обращатся к Руби, нежели к ргсс. Постараюь что нить придумать, но только на выходных
Чем сложнее задача - тем проще ее не решать.

Администратор запретил публиковать записи гостям.

RGSS: Работа с файлами и папками; чтение текстового файла. 16 года 4 мес. назад #22389

  • Equilibrium Keeper
  • Equilibrium Keeper аватар
  • Вне сайта
  • Мастер
  • Скриптер
  • Сообщений: 119
  • Спасибо получено: 3
Ок. Если подскажешь как пользоваться всеми возможностями Руби в мейкере - цены тебе нет! (=
P.S. На этих выходных или на следующих? (=
Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме.
В себя самого загляни, открой свою дорогу в Ничто.
В Ничто ты войди, во тьму, и пойми:
Пока ты во тьме, не может она быть Ничем - ведь там ты.
Администратор запретил публиковать записи гостям.

RGSS: Работа с файлами и папками; чтение тексто&#10 16 года 4 мес. назад #22390

  • Arykray
  • Arykray аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 595
  • Спасибо получено: 52
Ы... на прошлых)))).
Не пугайся, посмотрю, я уже когда-то пробовал работать с файлами через мейкер, корочь это изврашение))). Но попробую. Могу дать совет, смотри как происходит сохранение и загрузка игры, от этого и надо плясать.
Чем сложнее задача - тем проще ее не решать.

Администратор запретил публиковать записи гостям.

RGSS: Работа с файлами и папками; чтение текстового файла. 16 года 4 мес. назад #22447

  • Equilibrium Keeper
  • Equilibrium Keeper аватар
  • Вне сайта
  • Мастер
  • Скриптер
  • Сообщений: 119
  • Спасибо получено: 3
Ок, гляну, но и на твою помощь рассчитываю. (=
Глянул. Собственно, так и делаю. Сейчас реализую кривинько - придется изначально прописывать в массив параметры видео, такие как, например, имя папки с кадрами. Зато можно будет давать любые названия видяхам, а не video001, video002 и т.д.

Хм... а нельзя написать на руби библиотеку и подцепить ее к мейкеру? (=
Если бы можно было пользоваться всеми возможностями руби... ^^
В общем, сделал вот так:
RPG::DataLoad
module RPG
  class DataLoad
    #==========================================================================
    # Кастомные базы данных
    #--------------------------------------------------------------------------
    # Видео
    #--------------------------------------------------------------------------
    # Массив, индекс которого принимается за id видео. Первый элемент - nil.
    # Каждый последующий элемент так же представляет из себя массив:
    # [0 : string]  - Собственное имя видео
    # [1 : string]  - Название папки с набором кадров, каждого кадра, без нумерации
    # [2 : integer] - Номер первого кадра
    # [3 : integer] - Количество знаков в номере кадра
    # [4] : integer - Одномерный массив, указывающий расположение видео [x, y] 
    # [5 : integer] - Оттенок изображения (0..360)
    VIDEO = [nil,
      [ Стартовое видео ,  start , 1, 4, [0, 0], 0],
    ]
    #==========================================================================
    # Метод подгружает кастомную базу данных $data_video
    def video
      $data_video    = []                  # Создаем глобальный массив
      $data_video[0] = nil                 # Первый элемент, традиционно, nil.
      for i in 1..VIDEO.size - 1           # Перебираем элементы массива VIDEO
        $data_video[i] = RPG::Video.new    # Создаем новый объект на основе RPG::Video
        $data_video[i].id = i              # В качестве id берем и записываем индекс в массиве
        $data_video[i].name = VIDEO[i][0] # Записываем имя видео
        # Записываем имя каждого кадра и подсчитываем их количество
        frame_index = VIDEO[i][2]
        path =  Graphics/Video/  + VIDEO[i][1] +  / 
        n = 0
        loop do
          counter = $EKLib.intToString(frame_index, VIDEO[i][3])
          filename = VIDEO[i][1] +  _  + counter
          if FileTest.exist?(path + filename +  .png )
            $data_video[i].frames[n] = path + filename +  .png 
          elsif FileTest.exist?(path + filename +  .jpg )
            $data_video[i].frames[n] = path + filename +  .jpg 
          else
            break
          end
          n += 1
          frame_index += 1
        end
        $data_video[i].frame_max = frame_index - 1 # Записываем количество кадров
        $data_video[i].position = VIDEO[i][4] # Записываем положение видео
        $data_video[i].video_hue = VIDEO[i][5] # Записываем оттенок видео
      end
    end
  end
end

RPG::Video
module RPG
  class Video
    def initialize
      @id = 0
      @name =   
      @frames = [  ]
      @frame_max = 1
      @position = [0, 0]
      @video_hue = 0
    end
    attr_accessor :id
    attr_accessor :name
    attr_accessor :frames
    attr_accessor :frame_max
    attr_accessor :position
    attr_accessor :video_hue
  end
end

EKLib
#==============================================================================
# EK Lib v.1.3b
#------------------------------------------------------------------------------
# Created by: Equilibrium Keeper [[email protected]]
# Created on: 11.07.2008 23:11:45
# Отдельное спасибо: insider, Рольф
#          А так же: rpgmaker.sk6.ru, rpg-maker.info, gdsa.rpgmaker.ru
#==============================================================================
# Описание: Библиотека содержит несколько наиболее часто используемых мной
#           функций. При желании вы можете воспользоваться ими, но делайте
#           это на свой страх и риск.
#------------------------------------------------------------------------------
# Установка: В редакторе скриптов создайте чистую страницу над  Main  и
#            скопируйте туда данный скрипт.
#==============================================================================
class EKLib
 
  # Метод ворвращает фрагмент изображения.
  # filename : string   - имя файла, относительно папки проекта.
  # index    : integer - порядковый номер изображения
  # width    : integer - ширина фрагмента
  # height   : integer - высота фрагмента
  # Примечание: Счет ведется слева направо, сверху вниз.
  def getImagePartByIndex (filename, index, width, height)
    bitmap = Bitmap.new (filename)
    bitmap_result = Bitmap.new (width, height)
    n = bitmap.width / width
    x = (index * width - width) - ((index - 1) / n) * width * n
    y = ((index - 1) / n) * height
    rect = Rect.new(x, y, width, height)
    bitmap_result.blt(0, 0, bitmap, rect)
    return bitmap_result
  end
 
  # Метод преобразует целое число в строку с заданным количеством знаков.
  # number         : integer - число, которое требуется преобразовать
  # digits         : integer - количество знаков в возвращаемой строке
  # filling_symbol : string   - символ, заполняющий не достающие знаки
  def intToString (number, digits = 3, filling_symbol =  0 )
    i = number
    counter = number.to_s
    for i in number.to_s.size..digits - 1
      counter = filling_symbol + counter
      i += 1
    end
    return counter
  end
 
  # Метод построчно рисует заданный text на bitmap, перенося непомещающиеся слова
  # text         : string   - строка (длина не важна), которую требуется записать
  # bitmap       : bitmap   - изображение, на котором будем рисовать
  # width        : integer - максимальная надписи строк
  # x            : integer - Координата x начала первой строки
  # y            : integer - Координата y начала первой строки
  # stringheight : integer - Высота строки; -1 - высота будет высчитана автоматически
  # correct      : integer - Коректеровка длины строки (количество байт); +/-
  # fontsize     : integer - Размер шрифта. Используется только для вычеслений.
  def hyphenDrawText (text, bitmap, width, x = 20, y = 20, stringheight = -1, correct = 0, fontsize = bitmap.font.size)
    n = 0
    index = 0
    strings = []
    # Если высота строки не была задана, высчитываем ее исходя из размера шрифта
    if stringheight == -1 then stringheight = 24 - 0.2 * (24 - fontsize) end
    # Высчитываем примерное количество знаков на строку исходя из размера шрифта
    if fontsize   24 then const = 2 else const = 6 end
    maxchar = width / fontsize * 5 - (24 - fontsize) * const + correct
    maxchar = maxchar / 2 * 2
    # Делим строку на несколько
    while n   text.size
      # Записываем в массив фрагмент строки начиная с n байта длиной maxchar байт
      strings[index] = text[n, maxchar]
      lenght = maxchar # Временная переменная для переноса слов
      # Пока на конце строки не окажется пробела или она не закончится...
      while strings[index][lenght - 1, 1] !=     && strings[index][lenght - 1, 1] !=   
        # ...урезаем строку на один байт
        lenght -= 1
        strings[index] = strings[index][0, lenght]
      end
      n += lenght - 1 # Задаем новый начальный байт для следующей строки
      index += 1 # Переходим к следующему элементу массива
    end
    for i in 0..strings.size - 1
      # Отрезаем пробелы в начале строки
      if strings[i][0, 1] ==     then strings[i] = strings[i][1, strings[i].size] end
      # Записываем все получившиеся строки на понравившийся bitmap
      bitmap.draw_text(x, y + stringheight * i, width, stringheight, strings[i])
    end
  end
 
  # Метод рисует геометрические фигуры на заданном изображении
  # bitmap : bitmap - изображение, на котором будем рисовать
  # type   : string - тип фигуры, которую будем рисовать
  # color  : color  - цвет, который будем использовать, к примеру Color.new(255,255,255,255)
  # Прочие параметры изменяются от фигуры к фигуре - смотрим скрипт
  # Доступные типы фигур: square =  квадрат;
  def drawFigure (bitmap, type, color, param1 = 0, param2 = 0, param3 = 0, param4 = 0, param5 = 0, param6 = 0)
    case type
    when  square 
      filling = param1 # : Integral [0, 1] Будем ли заливать квадрат или оставим его пустым
      gauge   = param2 # : Integral Толщина линии, в случае заливки принципиального значения не имеет
      x       = param3 # : Integral Координата x верхнего левого угла квадрата
      y       = param4 # : Integral Координата y верхнего левого угла квадрата
      width   = param5 # : Integral Ширина квадрата
      height  = param6 # : Integral Высота квадрата
      if filling != 0
        bitmap.fill_rect(x, y, width, height, color)
      else
        bitmap.fill_rect(x, y, width, gauge, color)
        bitmap.fill_rect(x, y, gauge, height, color)
        bitmap.fill_rect(x, y + height - gauge, width, gauge, color)
        bitmap.fill_rect(x + width - gauge, y, gauge, height, color)
      end
    end
  end
 
end

В Main вставил:
$EKLib    = EKLib.new
$DataLoad = RPG::DataLoad.new

В Scene_Title вставил:
$DataLoad.video

Ваши комментарии. (=
Все-таки не нравятся мне эти массивы-константы... _ Хотелось бы просто перебрать файлы\папки и автоматом все записать... -_-
Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме.
В себя самого загляни, открой свою дорогу в Ничто.
В Ничто ты войди, во тьму, и пойми:
Пока ты во тьме, не может она быть Ничем - ведь там ты.
Администратор запретил публиковать записи гостям.
Время создания страницы: 0.339 секунд