게임을 만들다 보니까 이런저런 스크립트 쓰면서 맵에 이벤트도 많다보니까
렉이 심해져서 렉을 줄일 방법이 없을까 찾아보다 발견한건데
사용법을 잘모르겠네요 주석을 읽어봐도 스크립트의 사용효과 정도는 알겠는데
정확한 'How to use' 안써져있는 것 같아서 질문드립니다.
(내가 발견못한건가...?;;)
일단 효과는 맵에 많은 이벤트가 존재할때 발생하는 렉을
해당 맵에서 플레이할때 화면 밖에 존재하는 이벤트를 생략함으로 렉을 줄여준다는 것 같은데
잘몰라서 그냥 붙여넣고 사용해봤더니 아래에 메세지만 뜨고 게임이 종료되네요..ㅜㅠ
ps. 스크립트 원문을 올린 것이 문제가 될 경우 삭제하겠습니다.
#==============================================================================
# ** Victor Engine - Anti Lag
#------------------------------------------------------------------------------
# Author : Victor Sant
#
# Version History:
# v 1.00 - 2012.08.03 > First release
# v 1.01 - 2012.08.04 > Fixed issue when teleport to the same map
#------------------------------------------------------------------------------
# This script was designed to reduce the lag cause by many events on map.
# Most anti lag script just skip the update of events that outside the screen
# while still loops though all of them. This one, instead, dinamically manage
# the list of events for update, and keeps events that aren't going to be
# updated outside of the list.
#------------------------------------------------------------------------------
# Compatibility
# Requires the script 'Victor Engine - Basic Module' v 1.00 or higher
#
# * Overwrite methods
# class Game_Map
# def update_events
# def event_list
#
# class Spriteset_Map
# def update_characters
#
# * Alias methods
# class Game_Map
# def setup(map_id)
# def refresh
#
# class Game_Event < Game_Character
# def setup_page_settings
#
# class Spriteset_Map
# def create_characters
#
#------------------------------------------------------------------------------
# Instructions:
# To instal the script, open you script editor and paste this script on
# a new section bellow the Materials section. This script must also
# be bellow the script 'Victor Engine - Basic'
#
#------------------------------------------------------------------------------
# Comment boxes note tags:
# Tags to be used on events Comment boxes. They're different from the
# comment call, they're called always the even refresh.
#
# <always update>
# Events with this comment on the active page will be always updated
#
# <never update>
# Events with this comment on the active page will be never updated
# Useful for decoration only events.
#
#------------------------------------------------------------------------------
# Additional instructions:
#
# Parallel process events and auto start events will be always updated no
# matter their positions.
#
# Remember that your hardware specification still have influence on the
# performance
#==============================================================================
#==============================================================================
# ** Victor Engine
#------------------------------------------------------------------------------
# Setting module for the Victor Engine
#==============================================================================
module Victor_Engine
#--------------------------------------------------------------------------
# * Setup the update buffer
# Setting values higher than 0, you increase the tile area of update
# By default, only events on the screen area or 1 tile near the visible
# área updates. Increasing the buff increase the update área, but also
# increase the potential lag.
#--------------------------------------------------------------------------
VE_UPDATE_BUFFER = 0
#--------------------------------------------------------------------------
# * required
# This method checks for the existance of the basic module and other
# VE scripts required for this script to work, don't edit this
#--------------------------------------------------------------------------
def self.required(name, req, version, type = nil)
if !$imported[:ve_basic_module]
msg = "The script '%s' requires the script\n"
msg += "'VE - Basic Module' v%s or higher above it to work properly\n"
msg += "Go to http://victorscripts.wordpress.com/ to download this script."
msgbox(sprintf(msg, self.script_name(name), version))
exit
else
self.required_script(name, req, version, type)
end
end
#--------------------------------------------------------------------------
# * script_name
# Get the script name base on the imported value
#--------------------------------------------------------------------------
def self.script_name(name, ext = "VE")
name = name.to_s.gsub("_", " ").upcase.split
name.collect! {|char| char == ext ? "#{char} -" : char.capitalize }
name.join(" ")
end
end
$imported ||= {}
$imported[:ve_anti_lag] = 1.01
Victor_Engine.required(:ve_anti_lag, :ve_basic_module, 1.00, :above)
#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
# This class handles maps. It includes scrolling and passage determination
# functions. The instance of this class is referenced by $game_map.
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# * Overwrite method: update_events
#--------------------------------------------------------------------------
def update_events
@update_list.each {|event| event.update }
@common_events.each {|event| event.update }
end
#--------------------------------------------------------------------------
# * Overwrite method: event_list
#--------------------------------------------------------------------------
def event_list
@event_list
end
#--------------------------------------------------------------------------
# * Alias method: setup
#--------------------------------------------------------------------------
alias :setup_ve_anti_lag :setup
def setup(map_id)
@event_list = []
@update_list = []
setup_ve_anti_lag(map_id)
end
#--------------------------------------------------------------------------
# * Alias method: refresh
#--------------------------------------------------------------------------
alias :refresh_ve_anti_lag :refresh
def refresh
refresh_ve_anti_lag
refresh_event_list
end
#--------------------------------------------------------------------------
# * New method: screen_moved?
#--------------------------------------------------------------------------
def screen_moved?
@last_screen_x != @display_x.to_i || @last_screen_y != @display_y.to_i
end
#--------------------------------------------------------------------------
# * New method: refresh_screen_position
#--------------------------------------------------------------------------
def refresh_screen_position
@last_screen_x = @display_x.to_i
@last_screen_y = @display_y.to_i
end
#--------------------------------------------------------------------------
# * New method: refresh_event_list
#--------------------------------------------------------------------------
def refresh_event_list
@event_list = events.values.select {|event| event.on_screen? }
@update_list = events.values.select {|event| event.update? }
end
end
#==============================================================================
# ** Game_CharacterBase
#------------------------------------------------------------------------------
# This class deals with characters. Common to all characters, stores basic
# data, such as coordinates and graphics. It's used as a superclass of the
# Game_Character class.
#==============================================================================
class Game_CharacterBase
#--------------------------------------------------------------------------
# * New method: update?
#--------------------------------------------------------------------------
def update?(*args)
return true
end
#--------------------------------------------------------------------------
# * New method: near_the_screen?
#--------------------------------------------------------------------------
def near_the_screen?(*args)
return true
end
#--------------------------------------------------------------------------
# * New method: on_buffer_area?
#--------------------------------------------------------------------------
def on_screen?(*args)
return true
end
end
#==============================================================================
# ** Game_Event
#------------------------------------------------------------------------------
# This class deals with events. It handles functions including event page
# switching via condition determinants, and running parallel process events.
# It's used within the Game_Map class.
#==============================================================================
class Game_Event < Game_Character
#--------------------------------------------------------------------------
# * Alias method: setup_page_settings
#--------------------------------------------------------------------------
alias :setup_page_settings_ve_anti_lag :setup_page_settings
def setup_page_settings
setup_page_settings_ve_anti_lag
@mode = nil
@mode = :always if note =~ /<ALWAYS UPDATE>/i
@mode = :never if note =~ /<NEVER UPDATE>/i
end
#--------------------------------------------------------------------------
# * New method: update?
#--------------------------------------------------------------------------
def update?
return false if @mode == :never
on_screen?(12, 8)
end
#--------------------------------------------------------------------------
# * New method: auto_event?
#--------------------------------------------------------------------------
def auto_event?
@mode == :always || @trigger == 3 || @trigger == 4
end
#--------------------------------------------------------------------------
# * New method: on_screen?
#--------------------------------------------------------------------------
def on_screen?(x = 14, y = 10)
z = [VE_UPDATE_BUFFER, 0].max
near_the_screen?(x + z, y + z) || auto_event?
end
end
#==============================================================================
# ** Spriteset_Map
#------------------------------------------------------------------------------
# This class brings together map screen sprites, tilemaps, etc. It's used
# within the Scene_Map class.
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
# * Overwrite method: update_characters
#--------------------------------------------------------------------------
def update_characters
refresh_characters if @map_id != $game_map.map_id
refresh_sprites if $game_map.screen_moved?
@screen_sprites.each {|sprite| sprite.update }
end
#--------------------------------------------------------------------------
# * Alias method: create_characters
#--------------------------------------------------------------------------
alias :create_characters_ve_anti_lag :create_characters
def create_characters
create_characters_ve_anti_lag
refresh_characters_sprites
end
#--------------------------------------------------------------------------
# * New method: refresh_characters_sprites
#--------------------------------------------------------------------------
def refresh_characters_sprites
@screen_sprites = []
@character_sprites.each do |sprite|
sprite.update
@screen_sprites.push(sprite) if sprite.character.on_screen?
end
end
#--------------------------------------------------------------------------
# * New method: refresh_sprites
#--------------------------------------------------------------------------
def refresh_sprites
refresh_characters_sprites
$game_map.refresh_event_list
$game_map.refresh_screen_position
end
end
- 출처 -
http://victorscripts.wordpress.com/