Project1
标题:
数十个变量和几百个开关集中在一个事件里面,会卡吗?
[打印本页]
作者:
一瞬间的幻觉
时间:
2010-12-10 06:17
标题:
数十个变量和几百个开关集中在一个事件里面,会卡吗?
本帖最后由 一瞬间的幻觉 于 2010-12-11 18:30 编辑
{:nm_7:}
手头做的游戏比较另类,策略型的,非常要命的问题是,所有游戏所要包含的运行的全部剧情、变量、开关都集中在一个事件里面,并且这个事件的触发模式是自动触发,粗劣估计一下,将会设定在这个事件里面的对话220句、变量85左右、开关120个以上,想问一下,玩这个游戏的玩家如果电脑配置差一点(例如内存1M)会卡死吗?我不想害人啊
还有就是如果会卡,能不能找到替代的方法?比如说如何在ID1事件里面设置某个开关打开,就跳转到ID2事件里面,并且ID1停止自动触发?
或者我应该这样问,事件中,每个事件页是不是分开运算的?也就是说我1000个变量,如果
把它们分开20个事件页设置,每个事件页就是50个,这样的话,游戏运行起来是不是就不会像集中一个事件那样卡了?
我头晕了。。。。。。呵呵
一瞬间的幻觉于2010-12-10 06:20补充以下内容:
到现在还是不太懂,事件里面程序的运算是怎么样的?如果是依次运算,应该再多内容也不会卡,如果是要累积运算。。那一定卡到仆街
作者:
精灵使者
时间:
2010-12-10 07:48
建议,你可以使用公共事件来减少重复的调用量
而且可以用变量的批量操作就可以了(变量……你有这么多喵?)
作者:
Rion幻音
时间:
2010-12-10 08:02
可以使用某些防卡脚本来解决这些问题……
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/ ◆ マップ軽量化 - KGC_MapLightening ◆ VX ◆
#_/ ◇ Last update : 2008/01/30 ◇
#_/----------------------------------------------------------------------------
#_/ マップの各種処理を軽量化します。
#_/============================================================================
#_/ 再定義が多いので、できるだけ「素材」の上部に導入してください。
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#==============================================================================
# ★ カスタマイズ項目 - Customize ★
#==============================================================================
module KGC
module MapLightening
# ◆ マップ上のスプライトを更新する範囲の割合
# マップ上のイベントグラフィックを描画する範囲を指定します。
# 値が小さい ==> 動作が軽い・大きなキャラがバグる
# 値が大きい ==> 動作が重い・大きなキャラもバグらない
# 普通は 70~100 程度で問題ないでしょう。
MAP_SPRITE_UPDATE_RANGE = 80
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
$imported = {} if $imported == nil
$imported["MapLightening"] = true
#==============================================================================
# ◆ Graphics
#==============================================================================
module Graphics
#--------------------------------------------------------------------------
# ● ゲーム画面のサイズを変更
#--------------------------------------------------------------------------
unless method_defined?(:resize_screen_KGC_MapLightening)
class << Graphics
alias resize_screen_KGC_MapLightening resize_screen
end
def self.resize_screen(width, height)
resize_screen_KGC_MapLightening(width, height)
if $game_temp != nil
$game_temp.setup_lightening_value
end
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :valid_common_event_check # コモンイベントの有効状態判定フラグ
attr_reader :display_center_x # 画面中心 X 座標 (*256)
attr_reader :display_center_y # 画面中心 Y 座標 (*256)
attr_reader :map_sprite_update_width # スプライト更新を行う幅 (*256)
attr_reader :map_sprite_update_height # スプライト更新を行う高さ (*256)
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_KGC_MapLightening initialize
def initialize
initialize_KGC_MapLightening
@valid_common_event_check = true
setup_lightening_value
end
#--------------------------------------------------------------------------
# ○ 軽量化用変数設定
#--------------------------------------------------------------------------
def setup_lightening_value
@display_center_x = Graphics.width / 2
@display_center_y = Graphics.height / 2
@map_sprite_update_width = Graphics.width *
KGC::MapLightening::MAP_SPRITE_UPDATE_RANGE / 100
@map_sprite_update_height = Graphics.height *
KGC::MapLightening::MAP_SPRITE_UPDATE_RANGE / 100
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Switches
#==============================================================================
class Game_Switches
#--------------------------------------------------------------------------
# ● スイッチの設定
# switch_id : スイッチ ID
# value : ON (true) / OFF (false)
#--------------------------------------------------------------------------
alias indexer_equal_KGC_MapLightening []=
def []=(switch_id, value)
indexer_equal_KGC_MapLightening(switch_id, value)
$game_temp.valid_common_event_check = true
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Map
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# ● セットアップ
# map_id : マップ ID
#--------------------------------------------------------------------------
alias setup_KGC_MapLightening setup
def setup(map_id)
setup_KGC_MapLightening(map_id)
update_valid_common_event_list
end
#--------------------------------------------------------------------------
# ○ 有効なコモンイベントのリストを更新
#--------------------------------------------------------------------------
def update_valid_common_event_list
@valid_common_events = {}
# 有効なコモンイベントのリストを作成
@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
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Interpreter
#==============================================================================
class Game_Interpreter
@@_auto_start_common_event_list = nil
#--------------------------------------------------------------------------
# ● クリア
#--------------------------------------------------------------------------
alias clear_KGC_MapLightening clear
def clear
clear_KGC_MapLightening
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|
# トリガーが自動実行のイベントのみ登録
@@_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] # 条件スイッチが ON の場合
setup(event.list) # イベントをセットアップ
end
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Sprite_Character
#==============================================================================
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
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Spriteset_Map
#==============================================================================
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
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
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
复制代码
作者:
goahead
时间:
2010-12-10 11:42
提示:
作者被禁止或删除 内容自动屏蔽
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1