Project1

标题: XP载入大图片场景时特别容易崩溃,请问有办法吗? [打印本页]

作者: 寒凌天    时间: 2020-1-6 15:22
标题: XP载入大图片场景时特别容易崩溃,请问有办法吗?
公所周知XP载入图片是一块块显示的,游戏在载入较大的图片时很容易崩溃。我一开始以为是游戏本身有问题,但是XP载入同样的背景时也非常容易崩溃。

如图所示,上面的场景正在刷新,刷新一到一半崩溃了。

请问有什么办法可以避免崩溃吗?你们有这样的问题吗?


作者: guoxiaomi    时间: 2020-1-6 21:39
能做一个简单工程复现此现象吗?
作者: 寒凌天    时间: 2020-1-7 02:31
guoxiaomi 发表于 2020-1-6 21:39
能做一个简单工程复现此现象吗?


RUBY 代码复制
  1. class Scene_Map
  2.   def transfer_player
  3.     begin
  4.     loading_page
  5.     # 清除主角场所移动调试标志
  6.     $game_temp.player_transferring = false
  7.     # 移动目标与现在的地图有差异的情况下   
  8.     if $game_map.map_id != $game_temp.player_new_map_id
  9.       RPG::Cache.clear if !Config.cache?
  10.       # 设置新地图
  11.       $game_map.setup($game_temp.player_new_map_id)   
  12.     end
  13.     # 刷新地图 (执行并行事件)
  14.     $game_map.update
  15.     # 执行地图设置的 BGM、BGS 的自动切换
  16.     $game_map.autoplay
  17.     # 设置主角位置
  18.     $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)   
  19.     # 设置主角朝向
  20.     case $game_temp.player_new_direction
  21.     when 2  # 下
  22.       $game_player.turn_down
  23.     when 4  # 左
  24.       $game_player.turn_left
  25.     when 6  # 右
  26.       $game_player.turn_right
  27.     when 8  # 上
  28.       $game_player.turn_up
  29.     end
  30.     # 矫正主角姿势
  31.     $game_player.straighten
  32.     loading_page_step(2)
  33.     @spriteset.dispose
  34.     @spriteset = Spriteset_Map.new   #########这行代码崩溃的!这行代码崩溃的!这行代码崩溃的!这行代码崩溃的!这行代码崩溃的!这行代码崩溃的!#########################################################################
  35.     loading_page_step(3)
  36.     @arpg.dispose
  37.     @arpg = ARPG.new
  38.     # 釋放記憶體
  39.     #if Config.cache? && @esc_timeout == 0
  40.       GC.start
  41.     #end
  42.     $refresh["enemy_states"] = false
  43.     # 处理过渡中的情况下
  44.     if $game_temp.transition_processing
  45.       # 清除过渡处理中标志
  46.       $game_temp.transition_processing = false
  47.       # 执行过渡
  48.       Graphics.transition(10)
  49.     end
  50.  
  51.     loading_disable
  52.     Kboard.clear_buffer if Config.clear_key_buffer?
  53.     # 在生成活动块
  54.     #@spriteset = Spriteset_Map.new
  55.     #@arpg = ARPG.new
  56.     # 设置画面
  57.     #Graphics.frame_reset
  58.     # 刷新输入信息
  59.     #Input.update
  60.     rescue;p "3",$!,$@;end
  61.   end
  62. end



不能,这东西随机性太强了,有时候你等半天都没事,有时冷不丁的给你崩溃一次。
然后我把每行代码后面都写了一句LOG输出日志的代码,在偶然一次崩溃后,根据日志文件终于定位出了产生崩溃的代码行。
@spriteset = Spriteset_Map.new
但是这个类好像是封装在系统内部的?我查到这里,技术有限就查不下去了。
作者: ppspssss    时间: 2020-1-7 13:26
@89444640 數据庫大內存就大的問題是只有RMXP有, 你數據庫比如2000个动画, 由于RMXP的遊戏一开啟,会把所有的數据庫的東西加載进內存,RMXP一开遊戏你看資源管理員發現內存会變得很大,比如我試了会占用1500MB以上內存, 同樣相同數量动画使用RMVX 和RMACE 都只会占200MB以下 ,

作者: ppspssss    时间: 2020-1-7 14:19
本帖最后由 ppspssss 于 2020-1-7 14:45 编辑

我粗略估計, 场所移动的造成崩潰, 可能是場所移动的淡出淡入問題,
把下面的
# 执行过渡
      Graphics.transition(10)

改成0即不進行淡出淡入的渐变 ,
Graphics.transition(0)

我之前就是測試加載地图时有可能会崩潰 , 排查了好久, 直至运气好測找到原因,原來是淡出淡入漸變問題, 之后所有東西都不加淡出淡入了, 就没有崩潰 ,不过不肯定是不是楼主的問題,
作者: 89444640    时间: 2020-1-7 15:07
本帖最后由 89444640 于 2020-1-7 15:11 编辑
ppspssss 发表于 2020-1-7 13:26
@89444640 數据庫大內存就大的問題是只有RMXP有, 你數據庫比如2000个动画, 由于RMXP的遊戏一开啟,会把所有 ...



你看企鹅……比rm占的还大
然后我有很多淡入淡出,都要注释掉?

作者: ppspssss    时间: 2020-1-7 15:26
89444640 发表于 2020-1-7 15:07
你看企鹅……比rm占的还大
然后我有很多淡入淡出,都要注释掉?

我遊戏的內存1500MB大是2000个动画, 肯定正常遊戏不会这么多动画 ; 淡出淡入的話我的是指主角场所移动那个,还有半透明菜单窗口腳本才用, 只适用我的遊戏, 实際情況还得看你的遊戏


或許实際情況不适合你的遊戏, 因為腳本不同




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