Войти на сайт

Авторизация, ждите ...
×

ТЕМА: PickUpM@ster Message

PickUp Massage 7 года 11 мес. назад #95586

  • Paranoid
  • Paranoid аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 683
  • Спасибо получено: 350
Можно ли настраивать вид окна?

И офф-топчик: ты где учился прогать? А то я тоже хочу.
Администратор запретил публиковать записи гостям.

PickUp Massage 7 года 11 мес. назад #95587

  • Волчонок
  • Волчонок аватар
  • Вне сайта
  • Просветлённый
  • Волчонок
  • Сообщений: 277
  • Спасибо получено: 247
  • 2 место 3 место в Кодировке3 местоОрганизатор конкурсов
Paranoid пишет:
Можно ли настраивать вид окна?
Пока нет. Положение, рамка и фон пока не настраиваются, сделаю на неделе, если смогу.
Paranoid пишет:
И офф-топчик: ты где учился прогать? А то я тоже хочу.
Учился в ссузе по специальности инженер-кодер, спецом что бы потом игры делать... Пять лет чалил.
Ленивый волчонок с большими амбициями

Рассказ "Рождение мага", периодически обновляется
РПГ История Егеря. Основной текущий проект.

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Paranoid

PickUp Massage 7 года 11 мес. назад #95588

  • Paranoid
  • Paranoid аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 683
  • Спасибо получено: 350
Волчонок пишет:
Учился в ссузе по специальности инженер-кодер, спецом что бы потом игры делать... Пять лет чалил.
Ну рили, хочется на руби лабать, а только с простыми операциями аля бейсик могу сладить
Администратор запретил публиковать записи гостям.

PickUp Massage 7 года 11 мес. назад #95606

  • I_LORD
  • I_LORD аватар
  • Вне сайта
  • Светлый дракон
  • ;)
  • Сообщений: 779
  • Спасибо получено: 732
  • ВетеранПроект месяца 2 местоРазработчикПроект месяца 3 местоПаладинПроект месяца 1 местоОраторПроект года 2 место
Добавь пожалуйста звуковой эффект, когда подбираешь предметы.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Волчонок

PickUp Massage 7 года 11 мес. назад #95616

  • Волчонок
  • Волчонок аватар
  • Вне сайта
  • Просветлённый
  • Волчонок
  • Сообщений: 277
  • Спасибо получено: 247
  • 2 место 3 место в Кодировке3 местоОрганизатор конкурсов
Добавил, пользуйся =)
Ленивый волчонок с большими амбициями

Рассказ "Рождение мага", периодически обновляется
РПГ История Егеря. Основной текущий проект.

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
Администратор запретил публиковать записи гостям.

PickUp Massage 7 года 11 мес. назад #95618

  • DarkKel
  • DarkKel аватар
  • Вне сайта
  • Мастер
  • Сообщений: 173
  • Спасибо получено: 24
Огромная просьба, тоже самое, но для МВ )

P.S. Эм.. mAssage? ))
Администратор запретил публиковать записи гостям.

PickUp Massage 7 года 11 мес. назад #95620

  • Волчонок
  • Волчонок аватар
  • Вне сайта
  • Просветлённый
  • Волчонок
  • Сообщений: 277
  • Спасибо получено: 247
  • 2 место 3 место в Кодировке3 местоОрганизатор конкурсов
DarkKel пишет:
Огромная просьба, тоже самое, но для МВ )

Патоооом.
DarkKel пишет:
P.S. Эм.. mAssage? ))

В следующем году исправлю.
Ленивый волчонок с большими амбициями

Рассказ "Рождение мага", периодически обновляется
РПГ История Егеря. Основной текущий проект.

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
Администратор запретил публиковать записи гостям.

PickUp Message 7 года 10 мес. назад #96539

  • Волчонок
  • Волчонок аватар
  • Вне сайта
  • Просветлённый
  • Волчонок
  • Сообщений: 277
  • Спасибо получено: 247
  • 2 место 3 место в Кодировке3 местоОрганизатор конкурсов
Мини-обновление!

Добавлено:
- Возможность настраивать размер текста во всплывающем окне. Изменяйте параметр TextSize в секции настроек.
- Возможность задавать звук подбора предмета. Указывайте название файла (без расширения) в параметре SEName.
Ленивый волчонок с большими амбициями

Рассказ "Рождение мага", периодически обновляется
РПГ История Егеря. Основной текущий проект.

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
Администратор запретил публиковать записи гостям.

PickUpM@ster Message 7 года 10 мес. назад #96576

  • Волчонок
  • Волчонок аватар
  • Вне сайта
  • Просветлённый
  • Волчонок
  • Сообщений: 277
  • Спасибо получено: 247
  • 2 место 3 место в Кодировке3 местоОрганизатор конкурсов
Мини-обновление!

Добавлено:
- Возможность включать / отключать отображение иконок предметов. Если высота иконка меньше, чем высота строки текста, иконка обрезается снизу!
- Возможность менять цвет подложки (цвет берётся из системных настроек, а точнее из настроек тона окна на вкладке "Система" Базы Данных игры)
Ленивый волчонок с большими амбициями

Рассказ "Рождение мага", периодически обновляется
РПГ История Егеря. Основной текущий проект.

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
Последнее редактирование: 7 года 10 мес. назад от Волчонок.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: yuryol

PickUpM@ster Message 7 года 9 мес. назад #96587

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Проект месяца 1 местоПрограммист Ruby3 место1 место в ГотвПроект месяца 2 местоВетеранУчительПисатель 3 местоОрганизатор конкурсов
Поставил, попробовал.
У меня добавление предметов сделано автораном, так что при старте карты всё отразилось на экране и... FPS просел с 60 до 6 кадров в секунду. По завершении отображения взятых предметов потерянные кадры вернулись.

Что ты такого сделал, что оно столько памяти жрет? О.о Пойду вычитывать код.

Ага, нашел.
Волчонок, ты в курсе, что обращения к функциям, перерисовывающим что-то на картинке - самые "тяжелые"? Их выполнение происходит настолько медленно, что в официальной документации, если не ошибаюсь, рекомендовали их использовать настолько редко, насколько это вообще возможно. А у тебя refresh со всей перерисовкой идет каждый кадр! Причем, без видимых на то причин!

Перепишу и вышлю сюда исправленный код.

А вот и готовый код, переписанный и исправленный. Удалил из него кучу откровенного мусора и едва ли не параноидальных проверок на то, что тру есть тру.

На данный момент код пожирает 1-2 кадра в секунду вместо 54-58, как было в оригинале.
#==============================================================================
# PickUp Message
#------------------------------------------------------------------------------
# Написал: Urban.Wolfling
# Внёс исправления: DeadElf79
#------------------------------------------------------------------------------
#  For both commercial and non-commercial use as long as credit is given to
#  Urban.Wolfling.  Licensed under Creative Commons CC BY 4.0 -
#  http://creativecommons.org/licenses/by/4.0/
#==============================================================================
#  Для коммерческого и не коммерческого использования, при условии указания
#  авторства Urban.Wolfling. Лицензировано под Creative Commons CC BY 4.0 -
#  http://creativecommons.org/licenses/by/4.0/
#==============================================================================
 
class Game_System
#==============================================================================
#  Setting Section / Секция настроек
#==============================================================================
 
  TextShowTime = 120  # дительность показа строки о подборе предмета в кадрах
  TextFadeTime = 60   # длительность плавного удаления строки в кадрах
  SEName = "Equip3"   # название звука подбора (должен лежать в Audio\SE\)
  UseIcons = true    # отображать (true) или нет (false) иконки предметов
  TextSize = 20       # размер текста в окне
  TextFontColor = Color.new(255,255,255) # цвет текста (специально для тех)
 
#==============================================================================
#  End Setting Section / Конец секции настроек
#==============================================================================
 
  attr_accessor :pickup_sound
  attr_accessor :pickup_list
 
  alias pum_initialize initialize
  def initialize
    pum_initialize
    @pickup_list = []
    @pickup_sound = RPG::SE.new(Game_System::SEName, 10, 100)
  end
 
end
 
class Game_Party < Game_Unit 
  def push_pickuped_item(icon, amount, name)
    $game_system.pickup_list.push({
    	:icon => icon,
    	:amount => amount,
    	:name => name,
    	:time => Game_System::TextShowTime
    })
  end
 
  def gain_item(item, amount, include_equip = false)
    container = item_container(item.class)
    return unless container
    last_number = item_number(item)
    new_number = last_number + amount
    container[item.id] = [[new_number, 0].max, max_item_number(item)].min
    push_pickuped_item(item.icon_index,amount,item.name)
    $game_system.pickup_sound.play
    container.delete(item.id) if container[item.id] == 0
    if include_equip && new_number < 0
      discard_members_equip(item, -new_number)
    end
    $game_map.need_refresh = true
  end
end
 
class Window_NewItems < Sprite
  def initialize(x, y, width, height)
    super(nil)
    self.x, self.y = x, y
    self.z = 200
 
    @font_size = Game_System::TextSize
    @w_c = $data_system.window_tone
    @t_ui = Game_System::UseIcons
    @iconset = Cache.system("Iconset")
 
    @last_size = -1
 
    self.bitmap = Bitmap.new(width, height)
    self.bitmap.font.size = @font_size
    if Game_System::TextFontColor
      self.bitmap.font.color = Game_System::TextFontColor
    end
 
    redraw_back
    refresh
  end
 
  def draw_item_icon(icon_index, x, y)
    return unless icon_index != 0
    rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
    self.bitmap.blt(x, y, @iconset, rect)
  end
 
  def draw_text(x,y,text)
    self.bitmap.draw_text(x,y,width,@font_size,text)
  end
 
  def refresh
    self.bitmap.clear
    redraw_back
 
    $game_system.pickup_list.each do |pickup|
    	index = $game_system.pickup_list.index(pickup)
      if @t_ui
        draw_item_icon(pickup[:icon], 4, index * @font_size)
        tab = 32
      else
      	tab = 4
      end
      draw_text(
      	tab,
        index * @font_size,
        [ pickup[:amount], pickup[:name] ].join(" ")
      )
    end
  end
 
  def update
    plist = $game_system.pickup_list
 
    plist.each_index do |index|
    	pickup = plist[index]
    	pickup[:time] -= 1
    	if pickup[:time] <= 0
    		$game_system.pickup_list.delete_at(index)
    		$game_system.pickup_list.compact!
    	end
    end
 
    if @last_size != plist.size
      refresh
      @last_size = plist.size
    end
  end
 
  def redraw_back
    puts :redraw_back
  	rect = Rect.new(
  		0,
  		0,
  		self.bitmap.width,
  		$game_system.pickup_list.size * @font_size
  	)
    red =   ( @w_c.red   + 255 ) / 2
    green = ( @w_c.green + 255 ) / 2
    blue =  ( @w_c.blue  + 255 ) / 2
    bg0 = Color.new(red, green, blue, 255)
    bg1 = Color.new(red, green, blue, 0)
    self.bitmap.gradient_fill_rect(rect, bg0, bg1)
  end
end
 
class Scene_Map < Scene_Base
 
  alias pum_update_scene update_scene
  def update_scene
    pum_update_scene
    @new_items_window.update
  end
 
  alias pum_create_all_windows create_all_windows
  def create_all_windows
    pum_create_all_windows
    create_pum_window
  end
 
  def create_pum_window
    @new_items_window = Window_NewItems.new(
    	0,
      0,
      Graphics.width / 2,
      Graphics.height / 2
    )
  end
end
Последнее редактирование: 7 года 9 мес. назад от DeadElf79.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Волчонок

PickUpM@ster Message 7 года 9 мес. назад #96595

  • Волчонок
  • Волчонок аватар
  • Вне сайта
  • Просветлённый
  • Волчонок
  • Сообщений: 277
  • Спасибо получено: 247
  • 2 место 3 место в Кодировке3 местоОрганизатор конкурсов
DeadElf79 пишет:
Волчонок, ты в курсе, что обращения к функциям, перерисовывающим что-то на картинке - самые "тяжелые"? Их выполнение происходит настолько медленно, что в официальной документации, если не ошибаюсь, рекомендовали их использовать настолько редко, насколько это вообще возможно. А у тебя refresh со всей перерисовкой идет каждый кадр! Причем, без видимых на то причин!

Теперь в курсе, и буду следить за этим и впредь :silly:
Ленивый волчонок с большими амбициями

Рассказ "Рождение мага", периодически обновляется
РПГ История Егеря. Основной текущий проект.

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DeadElf79

PickUpM@ster Message 7 года 9 мес. назад #96599

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Проект месяца 1 местоПрограммист Ruby3 место1 место в ГотвПроект месяца 2 местоВетеранУчительПисатель 3 местоОрганизатор конкурсов
Убрал лишний вывод в консоль и добавил шутку, которую хотел добавить, но упустил: возможность выставить нулевой звук при поднятии вещи. Специально для тех, кому звук не нужен.
#==============================================================================
# PickUp Message
#------------------------------------------------------------------------------
# Написал: Urban.Wolfling
# Внёс исправления: DeadElf79
#------------------------------------------------------------------------------
#  For both commercial and non-commercial use as long as credit is given to
#  Urban.Wolfling.  Licensed under Creative Commons CC BY 4.0 -
#  http://creativecommons.org/licenses/by/4.0/
#==============================================================================
#  Для коммерческого и не коммерческого использования, при условии указания
#  авторства Urban.Wolfling. Лицензировано под Creative Commons CC BY 4.0 -
#  http://creativecommons.org/licenses/by/4.0/
#==============================================================================
 
class Game_System
#==============================================================================
#  Setting Section / Секция настроек
#==============================================================================
 
  TextShowTime = 120  # дительность показа строки о подборе предмета в кадрах
  TextFadeTime = 60   # длительность плавного удаления строки в кадрах
  SEName = nil # название звука подбора (должен лежать в Audio\SE\)
  UseIcons = true    # отображать (true) или нет (false) иконки предметов
  TextSize = 20       # размер текста в окне
  TextFontColor = Color.new(255,255,255) # цвет текста
 
#==============================================================================
#  End Setting Section / Конец секции настроек
#==============================================================================
 
  attr_accessor :pickup_sound
  attr_accessor :pickup_list
 
  alias pum_initialize initialize
  def initialize
    pum_initialize
    @pickup_list = []
    if Game_System::SEName
      @pickup_sound = RPG::SE.new(Game_System::SEName, 10, 100)
    else
      @pickup_sound = nil
    end
  end
 
end
 
class Game_Party < Game_Unit 
  def push_pickuped_item(icon, amount, name)
    $game_system.pickup_list.push({
    	:icon => icon,
    	:amount => amount,
    	:name => name,
    	:time => Game_System::TextShowTime
    })
  end
 
  def gain_item(item, amount, include_equip = false)
    container = item_container(item.class)
    return unless container
    last_number = item_number(item)
    new_number = last_number + amount
    container[item.id] = [[new_number, 0].max, max_item_number(item)].min
    push_pickuped_item(item.icon_index,amount,item.name)
    $game_system.pickup_sound.play unless $game_system.pickup_sound.nil?
    container.delete(item.id) if container[item.id] == 0
    if include_equip && new_number < 0
      discard_members_equip(item, -new_number)
    end
    $game_map.need_refresh = true
  end
end
 
class Window_NewItems < Sprite
  def initialize(x, y, width, height)
    super(nil)
    self.x, self.y = x, y
    self.z = 200
 
    @font_size = Game_System::TextSize
    @w_c = $data_system.window_tone
    @t_ui = Game_System::UseIcons
    @iconset = Cache.system("Iconset")
 
    @last_size = -1
 
    self.bitmap = Bitmap.new(width, height)
    self.bitmap.font.size = @font_size
    if Game_System::TextFontColor
      self.bitmap.font.color = Game_System::TextFontColor
    end
 
    redraw_back
    refresh
  end
 
  def draw_item_icon(icon_index, x, y)
    return unless icon_index != 0
    rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
    self.bitmap.blt(x, y, @iconset, rect)
  end
 
  def draw_text(x,y,text)
    self.bitmap.draw_text(x,y,width,@font_size,text)
  end
 
  def refresh
    self.bitmap.clear
    redraw_back
 
    $game_system.pickup_list.each do |pickup|
    	index = $game_system.pickup_list.index(pickup)
      if @t_ui
        draw_item_icon(pickup[:icon], 4, index * @font_size)
        tab = 32
      else
      	tab = 4
      end
      draw_text(
      	tab,
        index * @font_size,
        [ pickup[:amount], pickup[:name] ].join(" ")
      )
    end
  end
 
  def update
    plist = $game_system.pickup_list
 
    plist.each_index do |index|
    	pickup = plist[index]
    	pickup[:time] -= 1
    	if pickup[:time] <= 0
    		$game_system.pickup_list.delete_at(index)
    		$game_system.pickup_list.compact!
    	end
    end
 
    if @last_size != plist.size
      refresh
      @last_size = plist.size
    end
  end
 
  def redraw_back
  	rect = Rect.new(
  		0,
  		0,
  		self.bitmap.width,
  		$game_system.pickup_list.size * @font_size
  	)
    red =   ( @w_c.red   + 255 ) / 2
    green = ( @w_c.green + 255 ) / 2
    blue =  ( @w_c.blue  + 255 ) / 2
    bg0 = Color.new(red, green, blue, 255)
    bg1 = Color.new(red, green, blue, 0)
    self.bitmap.gradient_fill_rect(rect, bg0, bg1)
  end
end
 
class Scene_Map < Scene_Base
 
  alias pum_update_scene update_scene
  def update_scene
    pum_update_scene
    @new_items_window.update
  end
 
  alias pum_create_all_windows create_all_windows
  def create_all_windows
    pum_create_all_windows
    create_pum_window
  end
 
  def create_pum_window
    @new_items_window = Window_NewItems.new(
    	0,
      0,
      Graphics.width / 2,
      Graphics.height / 2
    )
  end
end

И на этом всё, возвращаю скрипт автору, дальше все обновления ждите только от него! ^_^
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Волчонок

PickUpM@ster Message 7 года 9 мес. назад #96680

  • Волчонок
  • Волчонок аватар
  • Вне сайта
  • Просветлённый
  • Волчонок
  • Сообщений: 277
  • Спасибо получено: 247
  • 2 место 3 место в Кодировке3 местоОрганизатор конкурсов
Мини-обновление!

Багфикс:
- Исправлена ошибка, когда при открытии менюшек пикап лист не скрывался.
Ленивый волчонок с большими амбициями

Рассказ "Рождение мага", периодически обновляется
РПГ История Егеря. Основной текущий проект.

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
Последнее редактирование: 7 года 9 мес. назад от Волчонок.
Администратор запретил публиковать записи гостям.
Модераторы: NeKotZima
Время создания страницы: 0.255 секунд