- 7/7/11
- 952
- 1,123
Vừa moi ra cái Script giảm lag khi chạy nhiều Event trên map, thấy dùng khá ổn nên share lên đây cho anh em nào cần

Mã:
#==============================================================================#
# Deplete Lag Increase for PixelArt
# Author: Janrae Mendoza
# Compatibility: RPG Maker VX
# Date of Creation: July 2011
# Features: For a better pixel art game on VX (as it says on the product) and
# decrease event lagging (which happens when many animation are shown on map.
#==============================================================================#
module JMGS
module PixelArt
ENABLED = true #set to true to work, false not to work.
# Range of Sprite of Map.
MAP_SPRITE_UPDATE_RANGE = 80
end
end
#==============================================================================#
# Pixel Art
if JMGS::PixelArt::ENABLED
#==============================================================================#
$imported = {} if $imported == nil
$imported["PixelArt"] = true
#==============================================================================#
# Calls out for the Graphics System
#==============================================================================#
module Graphics
unless method_defined?(:resize_screen_JMGS_PixelArt)
class << Graphics
alias resize_screen_JMGS_PixelArt resize_screen
end
def self.resize_screen(width, height)
resize_screen_JMGS_PixelArt(width, height)
if $game_temp != nil
$game_temp.setup_lightening_value
end
end
end
end
#==============================================================================#
# Template
#==============================================================================#
class Game_Temp
#==============================================================================#
# Instance
#==============================================================================#
attr_accessor :valid_common_event_check
attr_reader :display_center_x
attr_reader :display_center_y
attr_reader :map_sprite_update_width
attr_reader :map_sprite_update_height
alias initialize_JMGS_PixelArt initialize
def initialize
initialize_JMGS_PixelArt
@valid_common_event_check = true
setup_lightening_value
end
#==============================================================================#
# Value
#==============================================================================#
def setup_lightening_value
@display_center_x = Graphics.width / 2
@display_center_y = Graphics.height / 2
@map_sprite_update_width = Graphics.width *
JMGS::PixelArt::MAP_SPRITE_UPDATE_RANGE / 100
@map_sprite_update_height = Graphics.height *
JMGS::PixelArt::MAP_SPRITE_UPDATE_RANGE / 100
end
end
#==============================================================================#
# Switch
#==============================================================================#
class Game_Switches
alias indexer_equal_JMGS_PixelArt []=
def []=(switch_id, value)
indexer_equal_JMGS_PixelArt(switch_id, value)
$game_temp.valid_common_event_check = true
end
end
#==============================================================================#
# Game Map
#==============================================================================#
class Game_Map
alias setup_JMGS_PixelArt setup
def setup(map_id)
setup_JMGS_PixelArt(map_id)
update_valid_common_event_list
end
def update_valid_common_event_list
@valid_common_events = {}
#==============================================================================#
# Processing through game switches...
#==============================================================================#
@common_events.each { |event_id, event|
if event.trigger == 2 && $game_switches[event.switch_id]
@valid_common_events[event_id] = event
end
}
$game_temp.valid_common_event_check = false
end
def update_events
for event in @events.values
event.update
end
if $game_temp.valid_common_event_check
update_valid_common_event_list
end
for common_event in @valid_common_events.values
common_event.update
end
end
end
class Game_Interpreter
@@_auto_start_common_event_list = nil
alias clear_JMGS_PixelArt clear
def clear
clear_JMGS_PixelArt
if @@_auto_start_common_event_list == nil
create_auto_start_common_event_list
end
end
def create_auto_start_common_event_list
@@_auto_start_common_event_list = []
$data_common_events.compact.each { |event|
# insert event to table if autostarting
@@_auto_start_common_event_list << event if event.trigger == 1
}
end
def setup_starting_event
if $game_map.need_refresh
$game_map.refresh
end
if $game_temp.common_event_id > 0
setup($data_common_events[$game_temp.common_event_id].list)
$game_temp.common_event_id = 0
return
end
for event in $game_map.events.values
if event.starting
event.clear_starting
setup(event.list, event.id)
return
end
end
for event in @@_auto_start_common_event_list
if $game_switches[event.switch_id]
setup(event.list)
end
end
end
end
class Sprite_Character < Sprite_Base
def within_update_range?
sx = @character.screen_x - $game_temp.display_center_x
sy = @character.screen_y - $game_temp.display_center_y
return (sx.abs <= $game_temp.map_sprite_update_width &&
sy.abs <= $game_temp.map_sprite_update_height)
end
end
class Spriteset_Map
def update_characters
for sprite in @character_sprites
sprite.update if sprite.within_update_range?
end
end
end
#==============================================================================
# ** Scene_Map
#==============================================================================
class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
super
$game_map.interpreter.update
$game_map.update
$game_player.update
$game_system.update
@spriteset.update
@message_window.update
unless $game_message.visible
update_transfer_player
update_encounter
update_call_menu
update_call_debug
if $game_temp.next_scene != nil
update_scene_change
end
end
end
end
end # this will work if mode ENABLED is ON.
#==============================================================================#
# END of Script
#==============================================================================#
