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
可以使用某些防卡脚本来解决这些问题……
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ マップ軽量化 - KGC_MapLightening ◆ VX ◆
  3. #_/    ◇ Last update : 2008/01/30 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  マップの各種処理を軽量化します。
  6. #_/============================================================================
  7. #_/  再定義が多いので、できるだけ「素材」の上部に導入してください。
  8. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

  9. #==============================================================================
  10. # ★ カスタマイズ項目 - Customize ★
  11. #==============================================================================

  12. module KGC
  13. module MapLightening
  14.   # ◆ マップ上のスプライトを更新する範囲の割合
  15.   #  マップ上のイベントグラフィックを描画する範囲を指定します。
  16.   #   値が小さい ==> 動作が軽い・大きなキャラがバグる
  17.   #   値が大きい ==> 動作が重い・大きなキャラもバグらない
  18.   #  普通は 70~100 程度で問題ないでしょう。
  19.   MAP_SPRITE_UPDATE_RANGE = 80
  20. end
  21. end

  22. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  23. $imported = {} if $imported == nil
  24. $imported["MapLightening"] = true

  25. #==============================================================================
  26. # ◆ Graphics
  27. #==============================================================================

  28. module Graphics
  29.   #--------------------------------------------------------------------------
  30.   # ● ゲーム画面のサイズを変更
  31.   #--------------------------------------------------------------------------
  32.   unless method_defined?(:resize_screen_KGC_MapLightening)
  33.   class << Graphics
  34.     alias resize_screen_KGC_MapLightening resize_screen
  35.   end
  36.   def self.resize_screen(width, height)
  37.     resize_screen_KGC_MapLightening(width, height)

  38.     if $game_temp != nil
  39.       $game_temp.setup_lightening_value
  40.     end
  41.   end
  42.   end
  43. end

  44. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  45. #==============================================================================
  46. # ■ Game_Temp
  47. #==============================================================================

  48. class Game_Temp
  49.   #--------------------------------------------------------------------------
  50.   # ● 公開インスタンス変数
  51.   #--------------------------------------------------------------------------
  52.   attr_accessor :valid_common_event_check # コモンイベントの有効状態判定フラグ
  53.   attr_reader   :display_center_x         # 画面中心 X 座標 (*256)
  54.   attr_reader   :display_center_y         # 画面中心 Y 座標 (*256)
  55.   attr_reader   :map_sprite_update_width  # スプライト更新を行う幅   (*256)
  56.   attr_reader   :map_sprite_update_height # スプライト更新を行う高さ (*256)
  57.   #--------------------------------------------------------------------------
  58.   # ● オブジェクト初期化
  59.   #--------------------------------------------------------------------------
  60.   alias initialize_KGC_MapLightening initialize
  61.   def initialize
  62.     initialize_KGC_MapLightening

  63.     @valid_common_event_check = true

  64.     setup_lightening_value
  65.   end
  66.   #--------------------------------------------------------------------------
  67.   # ○ 軽量化用変数設定
  68.   #--------------------------------------------------------------------------
  69.   def setup_lightening_value
  70.     @display_center_x = Graphics.width / 2
  71.     @display_center_y = Graphics.height / 2
  72.     @map_sprite_update_width = Graphics.width *
  73.       KGC::MapLightening::MAP_SPRITE_UPDATE_RANGE / 100
  74.     @map_sprite_update_height = Graphics.height *
  75.       KGC::MapLightening::MAP_SPRITE_UPDATE_RANGE / 100
  76.   end
  77. end

  78. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  79. #==============================================================================
  80. # ■ Game_Switches
  81. #==============================================================================

  82. class Game_Switches
  83.   #--------------------------------------------------------------------------
  84.   # ● スイッチの設定
  85.   #     switch_id : スイッチ ID
  86.   #     value     : ON (true) / OFF (false)
  87.   #--------------------------------------------------------------------------
  88.   alias indexer_equal_KGC_MapLightening []=
  89.   def []=(switch_id, value)
  90.     indexer_equal_KGC_MapLightening(switch_id, value)

  91.     $game_temp.valid_common_event_check = true
  92.   end
  93. end

  94. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  95. #==============================================================================
  96. # ■ Game_Map
  97. #==============================================================================

  98. class Game_Map
  99.   #--------------------------------------------------------------------------
  100.   # ● セットアップ
  101.   #     map_id : マップ ID
  102.   #--------------------------------------------------------------------------
  103.   alias setup_KGC_MapLightening setup
  104.   def setup(map_id)
  105.     setup_KGC_MapLightening(map_id)

  106.     update_valid_common_event_list
  107.   end
  108.   #--------------------------------------------------------------------------
  109.   # ○ 有効なコモンイベントのリストを更新
  110.   #--------------------------------------------------------------------------
  111.   def update_valid_common_event_list
  112.     @valid_common_events = {}
  113.     # 有効なコモンイベントのリストを作成
  114.     @common_events.each { |event_id, event|
  115.       if event.trigger == 2 && $game_switches[event.switch_id]
  116.         @valid_common_events[event_id] = event
  117.       end
  118.     }
  119.     $game_temp.valid_common_event_check = false
  120.   end
  121.   #--------------------------------------------------------------------------
  122.   # ● イベントの更新
  123.   #--------------------------------------------------------------------------
  124.   def update_events
  125.     for event in @events.values
  126.       event.update
  127.     end
  128.     if $game_temp.valid_common_event_check
  129.       update_valid_common_event_list
  130.     end
  131.     for common_event in @valid_common_events.values
  132.       common_event.update
  133.     end
  134.   end
  135. end

  136. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  137. #==============================================================================
  138. # ■ Game_Interpreter
  139. #==============================================================================

  140. class Game_Interpreter
  141.   @@_auto_start_common_event_list = nil
  142.   #--------------------------------------------------------------------------
  143.   # ● クリア
  144.   #--------------------------------------------------------------------------
  145.   alias clear_KGC_MapLightening clear
  146.   def clear
  147.     clear_KGC_MapLightening

  148.     if @@_auto_start_common_event_list == nil
  149.       create_auto_start_common_event_list
  150.     end
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ○ 自動起動のコモンイベントのリストを作成
  154.   #--------------------------------------------------------------------------
  155.   def create_auto_start_common_event_list
  156.     @@_auto_start_common_event_list = []
  157.     $data_common_events.compact.each { |event|
  158.       # トリガーが自動実行のイベントのみ登録
  159.       @@_auto_start_common_event_list << event if event.trigger == 1
  160.     }
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # ● 起動中イベントのセットアップ
  164.   #--------------------------------------------------------------------------
  165.   def setup_starting_event
  166.     if $game_map.need_refresh             # 必要ならマップをリフレッシュ
  167.       $game_map.refresh
  168.     end
  169.     if $game_temp.common_event_id > 0     # コモンイベントの呼び出し予約?
  170.       setup($data_common_events[$game_temp.common_event_id].list)
  171.       $game_temp.common_event_id = 0
  172.       return
  173.     end
  174.     for event in $game_map.events.values  # マップイベント
  175.       if event.starting                   # 起動中のイベントが見つかった場合
  176.         event.clear_starting              # 起動中フラグをクリア
  177.         setup(event.list, event.id)       # イベントをセットアップ
  178.         return
  179.       end
  180.     end
  181.     for event in @@_auto_start_common_event_list  # 自動起動のコモンイベント
  182.       if $game_switches[event.switch_id]    # 条件スイッチが ON の場合
  183.         setup(event.list)                 # イベントをセットアップ
  184.       end
  185.     end
  186.   end
  187. end

  188. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  189. #==============================================================================
  190. # ■ Sprite_Character
  191. #==============================================================================

  192. class Sprite_Character < Sprite_Base
  193.   #--------------------------------------------------------------------------
  194.   # ○ 更新範囲内か判定
  195.   #--------------------------------------------------------------------------
  196.   def within_update_range?
  197.     sx = @character.screen_x - $game_temp.display_center_x
  198.     sy = @character.screen_y - $game_temp.display_center_y
  199.     return (sx.abs <= $game_temp.map_sprite_update_width &&
  200.       sy.abs <= $game_temp.map_sprite_update_height)
  201.   end
  202. end

  203. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  204. #==============================================================================
  205. # ■ Spriteset_Map
  206. #==============================================================================

  207. class Spriteset_Map
  208.   #--------------------------------------------------------------------------
  209.   # ● キャラクタースプライトの更新
  210.   #--------------------------------------------------------------------------
  211.   def update_characters
  212.     for sprite in @character_sprites
  213.       sprite.update if sprite.within_update_range?
  214.     end
  215.   end
  216. end

  217. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  218. #==============================================================================
  219. # ■ Scene_Map
  220. #==============================================================================

  221. class Scene_Map < Scene_Base
  222.   #--------------------------------------------------------------------------
  223.   # ● フレーム更新
  224.   #--------------------------------------------------------------------------
  225.   def update
  226.     super
  227.     $game_map.interpreter.update      # インタプリタを更新
  228.     $game_map.update                  # マップを更新
  229.     $game_player.update               # プレイヤーを更新
  230.     $game_system.update               # タイマーを更新
  231.     @spriteset.update                 # スプライトセットを更新
  232.     @message_window.update            # メッセージウィンドウを更新
  233.     unless $game_message.visible      # メッセージ表示中以外
  234.       update_transfer_player
  235.       update_encounter
  236.       update_call_menu
  237.       update_call_debug
  238.       if $game_temp.next_scene != nil  # 次のシーンがある場合のみ
  239.         update_scene_change            # シーン変更
  240.       end
  241.     end
  242.   end
  243. end
复制代码

作者: goahead    时间: 2010-12-10 11:42
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1