Project1
标题:
如何优化事件点设置来优化游戏速度
[打印本页]
作者:
qknight
时间:
2015-3-31 00:14
标题:
如何优化事件点设置来优化游戏速度
因为使用了不少脚本,尤其是在使用了灯光脚本之后游戏已经出现了较明显的卡顿现象,但是那些脚本又是必须的,所以为了优化游戏速度除了尽可能的削减并行事件之后,在下也只好在事件点上做文章了(亲测在房间内的小地图不会卡,但一到了外面事件比较多的大地图就会卡了)。
所以菜鸟在这里提出有关事件点的以下问题:
1、将两个一页事件页的事件点合并为一个两页事件页的事件点是否有助于缓解卡顿?
2、通过开关使得100个事件点分开表示(如50个事件的条件是1号开关打开,50个事件的条件是2号开关打开)与100个同时表示但静止的事件点哪个更好还是没有区别?
3、闪光点事件的移动路径,系统自带的原地踏步与自定义设置的15帧变换方向实现的类原地踏步,哪个更好还是差不多?
4、剧情结束、已经用独立开关废弃的事件点(比如已经打开了的宝箱)是否还会影响游戏速度?
虽然在下也知道把大地图分割成一块块的小地图后就能缓解游戏卡顿,不过那么漂亮的城市地图切的没走多远就要地图移动实在不好看啊……
至于防卡优化脚本,在下已经用了两个防卡脚本了,虽然有些许的提速,但从结果来看还是不够啊……
作者:
taroxd
时间:
2015-3-31 11:43
割成小地图,或者把能放到脚本的事件都写到脚本里
作者:
负零
时间:
2015-3-31 14:40
尝试下这个?合集里边(不是我们产的那个合集)有N多个NPC在跑也不卡。
#==============================================================================
# +++ MOG - Simple Anti Lag (V1.0) +++
#==============================================================================
# By Moghunter
# http://www.atelier-rgss.com
#==============================================================================
# Sistema de antilag.
#==============================================================================
# Para desativar ou ativar o sistema de antilag use o comando abaixo
#
# $game_system.anti_lag = true
#
#==============================================================================
# NOTA - Este script não funciona em mapas com efeito LOOP.
#
#==============================================================================
module MOG_ANTI_LAG
#Area que será atualizada fora da tela.
UPDATE_OUT_SCREEN_RANGE = 3
end
#==============================================================================
# ■ Game_System
#==============================================================================
class Game_System
attr_accessor :anti_lag
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------
alias mog_antilag_initialize initialize
def initialize
@anti_lag = true
mog_antilag_initialize
end
end
#==============================================================================
# ■ Game_Character
#==============================================================================
class Game_Event < Game_Character
attr_accessor :can_update
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------
alias mog_anti_lag_initialize initialize
def initialize(map_id, event)
mog_anti_lag_initialize(map_id, event)
@can_update = true
@anti_lag = true
if $game_map.loop_horizontal? or $game_map.loop_vertical?
@anti_lag = false
end
end
#--------------------------------------------------------------------------
# ● Check Event on Screen
#--------------------------------------------------------------------------
def update_anti_lag
unless $game_system.anti_lag
@can_update = true
return
end
anti_lag_event_on_screen
end
#--------------------------------------------------------------------------
# ● Event On Screen
#--------------------------------------------------------------------------
def anti_lag_event_on_screen
@can_update = false
out_screen = MOG_ANTI_LAG::UPDATE_OUT_SCREEN_RANGE
px = ($game_map.display_x).truncate
py = ($game_map.display_y).truncate
distance_x = @x - px
distance_y = @y - py
if distance_x.between?(0 - out_screen, 16 + out_screen) and
distance_y.between?(0 - out_screen, 12 + out_screen)
@can_update = true
end
end
#--------------------------------------------------------------------------
# ● Update
#--------------------------------------------------------------------------
alias mog_anti_lag_update update
def update
update_anti_lag unless !@anti_lag
return if !@can_update
mog_anti_lag_update
end
end
#==============================================================================
# ■ Sprite Character
#==============================================================================
class Sprite_Character < Sprite_Base
#--------------------------------------------------------------------------
# ● Check Can Update Sprite
#--------------------------------------------------------------------------
def check_can_update_sprite
if self.visible and
[email protected]
_update
reset_sprite_effects
end
self.visible = @character.can_update
end
#--------------------------------------------------------------------------
# ● Reset Sprite Effects
#--------------------------------------------------------------------------
def reset_sprite_effects
dispose_animation
end
#--------------------------------------------------------------------------
# ● Update
#--------------------------------------------------------------------------
alias mog_anti_lag_update update
def update
if $game_system.anti_lag and @character.is_a?(Game_Event)
check_can_update_sprite
return unless self.visible
end
mog_anti_lag_update
end
end
$mog_rgss3_anti_lag = true
复制代码
作者:
qknight
时间:
2015-3-31 20:02
负零 发表于 2015-3-31 14:40
尝试下这个?合集里边(不是我们产的那个合集)有N多个NPC在跑也不卡。
发生SystemStackError stack level too deep。用不了的样子……
作者:
akalin1
时间:
2015-3-31 20:57
拆成小地图吧。玩家应该不会太在意的。
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1