设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

请问,如何做到刷新很多图片。但又不会让程序自动关闭?

查看数: 1451 | 评论数: 6 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2011-7-6 19:06

正文摘要:

每次内存占用一到430多M就自动关闭的。我感觉这个问题是因为图片刷新太多引起的: 标题画面(有同样问题的是主菜单)的脚本(要考虑到鼠标支持的):#====================================================== ...

回复

R-零 发表于 2011-7-10 15:29:17
换个方法吧,先修改Scene_Title 跳过标题画面
直接进入初期地图
用事件制作标题

Wind2010 发表于 2011-7-6 19:37:17
于是乎被隔开一楼就不连帖了XD


这个是主菜单的修改,就是你发出来的第二个脚本
  1.   if @menu_window.active
  2.     if @old_index != @menu_index
  3.       @old_index = @menu_index
  4.       case @menu_window.index
  5.       when 0
  6.         @command2_1.bitmap = Bitmap.new("Graphics/Pictures/物品·一")
  7.         @command2_2.bitmap = Bitmap.new("Graphics/Pictures/装备·平常")
  8.         @command2_3.bitmap = Bitmap.new("Graphics/Pictures/奇术·一")
  9.         @command2_4.bitmap = Bitmap.new("Graphics/Pictures/天书·平常")
  10.         @command2_5.bitmap = Bitmap.new("Graphics/Pictures/记载·平常")
  11.         @command2_6.bitmap = Bitmap.new("Graphics/Pictures/系统·平常")
  12.       when 1
  13.         @command2_1.bitmap = Bitmap.new("Graphics/Pictures/物品·平常")
  14.         @command2_2.bitmap = Bitmap.new("Graphics/Pictures/装备·一")
  15.         @command2_3.bitmap = Bitmap.new("Graphics/Pictures/奇术·一")
  16.         @command2_4.bitmap = Bitmap.new("Graphics/Pictures/天书·平常")
  17.         @command2_5.bitmap = Bitmap.new("Graphics/Pictures/记载·平常")
  18.         @command2_6.bitmap = Bitmap.new("Graphics/Pictures/系统·平常")
  19.       when 2
  20.         @command2_1.bitmap = Bitmap.new("Graphics/Pictures/物品·平常")
  21.         @command2_2.bitmap = Bitmap.new("Graphics/Pictures/装备·平常")
  22.         @command2_3.bitmap = Bitmap.new("Graphics/Pictures/奇术·二")
  23.         @command2_4.bitmap = Bitmap.new("Graphics/Pictures/天书·平常")
  24.         @command2_5.bitmap = Bitmap.new("Graphics/Pictures/记载·平常")
  25.         @command2_6.bitmap = Bitmap.new("Graphics/Pictures/系统·平常")
  26.       when 3
  27.         @command2_1.bitmap = Bitmap.new("Graphics/Pictures/物品·平常")
  28.         @command2_2.bitmap = Bitmap.new("Graphics/Pictures/装备·平常")
  29.         @command2_3.bitmap = Bitmap.new("Graphics/Pictures/奇术·一")
  30.         @command2_4.bitmap = Bitmap.new("Graphics/Pictures/天书·一")
  31.         @command2_5.bitmap = Bitmap.new("Graphics/Pictures/记载·平常")
  32.         @command2_6.bitmap = Bitmap.new("Graphics/Pictures/系统·平常")
  33.       when 4
  34.         @command2_1.bitmap = Bitmap.new("Graphics/Pictures/物品·平常")
  35.         @command2_2.bitmap = Bitmap.new("Graphics/Pictures/装备·平常")
  36.         @command2_3.bitmap = Bitmap.new("Graphics/Pictures/奇术·一")
  37.         @command2_4.bitmap = Bitmap.new("Graphics/Pictures/天书·平常")
  38.         @command2_5.bitmap = Bitmap.new("Graphics/Pictures/记载·一")
  39.         @command2_6.bitmap = Bitmap.new("Graphics/Pictures/系统·平常")
  40.       when 5
  41.         @command2_1.bitmap = Bitmap.new("Graphics/Pictures/物品·平常")
  42.         @command2_2.bitmap = Bitmap.new("Graphics/Pictures/装备·平常")
  43.         @command2_3.bitmap = Bitmap.new("Graphics/Pictures/奇术·一")
  44.         @command2_4.bitmap = Bitmap.new("Graphics/Pictures/天书·平常")
  45.         @command2_5.bitmap = Bitmap.new("Graphics/Pictures/记载·平常")
  46.         @command2_6.bitmap = Bitmap.new("Graphics/Pictures/系统·一")
  47.       end
  48.     end
  49.   end
复制代码
忧雪の伤 发表于 2011-7-6 19:28:39
本帖最后由 忧雪の伤 于 2011-7-6 19:30 编辑
Wind2010 发表于 2011-7-6 19:23
感觉应该不会到卡死的程度- -倒是觉得LZ频繁刷新了


一直构建Bitmap这种极其消耗效率的实例。不卡也奇怪……
所以……Bitmap#dispose吧。

点评

恩,看了一下- -||  发表于 2011-7-6 19:37
不是每帧判断index然后根据index每帧修改图片么XD  发表于 2011-7-6 19:34
他貌似判断了。  发表于 2011-7-6 19:31
不是应该判断index改变才刷新么  发表于 2011-7-6 19:29
Wind2010 发表于 2011-7-6 19:23:28
本帖最后由 Wind2010 于 2011-7-6 19:38 编辑

感觉应该不会到卡死的程度- -倒是觉得LZ频繁刷新了


嗯,试试这样会不会好点:
  1. class Scene_Title
  2.   def update
  3.     if @wait_count > 1
  4.       @wait_count -= 1
  5.       return
  6.     end
  7.     # 刷新命令窗口
  8.     @command_window.update
  9.     if @Title_system_window.active
  10.       @Title_system_window.update
  11.     end
  12.     if @old_index != @command_window.index
  13.       @old_index = @command_window.index
  14.       case @command_window.index
  15.       when 0  # 開始遊戲
  16.         @wait_count = 20
  17.         @Title_command_1.bitmap = Bitmap.new("Graphics/Pictures/title_command/63-7")
  18.         @Title_command_2.bitmap = Bitmap.new("Graphics/Pictures/title_command/63-3")
  19.         @Title_command_3.bitmap = Bitmap.new("Graphics/Pictures/title_command/63-4")
  20.         @Title_command_4.bitmap = Bitmap.new("Graphics/Pictures/title_command/63-5")
  21.         @Title_command_5.bitmap = Bitmap.new("Graphics/Pictures/title_command/63-6")
  22.       when 1  # 讀取遊戲
  23.         @wait_count = 20
  24.      #  @command.bitmap = Bitmap.new("Graphics/Pictures/titles/title_2")
  25.         @Title_command_1.bitmap = Bitmap.new("Graphics/Pictures/title_command/63-2")
  26.         @Title_command_2.bitmap = Bitmap.new("Graphics/Pictures/title_command/63-8")
  27.         @Title_command_3.bitmap = Bitmap.new("Graphics/Pictures/title_command/63-4")
  28.         @Title_command_4.bitmap = Bitmap.new("Graphics/Pictures/title_command/63-5")
  29.         @Title_command_5.bitmap = Bitmap.new("Graphics/Pictures/title_command/63-6")
  30.       when 2  # 遊戲設定
  31.         @wait_count = 20
  32.       # @command.bitmap = Bitmap.new("Graphics/Pictures/titles/title_3")
  33.         @Title_command_1.bitmap = Bitmap.new("Graphics/Pictures/title_command/63-2")
  34.         @Title_command_2.bitmap = Bitmap.new("Graphics/Pictures/title_command/63-3")
  35.         @Title_command_3.bitmap = Bitmap.new("Graphics/Pictures/title_command/63-9")
  36.         @Title_command_4.bitmap = Bitmap.new("Graphics/Pictures/title_command/63-5")
  37.         @Title_command_5.bitmap = Bitmap.new("Graphics/Pictures/title_command/63-6")
  38.       when 3  # 離開遊戲
  39.         @wait_count = 20
  40.         @Title_command_1.bitmap = Bitmap.new("Graphics/Pictures/title_command/63-2")
  41.         @Title_command_2.bitmap = Bitmap.new("Graphics/Pictures/title_command/63-3")
  42.         @Title_command_3.bitmap = Bitmap.new("Graphics/Pictures/title_command/63-4")
  43.         @Title_command_4.bitmap = Bitmap.new("Graphics/Pictures/title_command/63-10")
  44.         @Title_command_5.bitmap = Bitmap.new("Graphics/Pictures/title_command/63-6")
  45.       when 4  #
  46.         @wait_count = 20
  47.         @Title_command_1.bitmap = Bitmap.new("Graphics/Pictures/title_command/63-2")
  48.         @Title_command_2.bitmap = Bitmap.new("Graphics/Pictures/title_command/63-3")
  49.         @Title_command_3.bitmap = Bitmap.new("Graphics/Pictures/title_command/63-4")
  50.         @Title_command_4.bitmap = Bitmap.new("Graphics/Pictures/title_command/63-5")
  51.         @Title_command_5.bitmap = Bitmap.new("Graphics/Pictures/title_command/63-11")
  52.       end
  53.     end
  54.     if @Title_system_window.active
  55.       if Input.trigger?(Input::B)
  56.         @command_window.active = true
  57.         @command_window.visible = true
  58.         @Title_system_window.active = false
  59.         @Title_system_window.visible = false
  60.         return
  61.       end
  62.     end
  63.     # 按下 C 键的情况下
  64.     if Input.trigger?(Input::C)
  65.       case @Title_system_window.index
  66.       when 0
  67.         system_cht
  68.         return
  69.       when 1
  70.         system_chs
  71.         return
  72.       end
  73.       # 命令窗口的光标位置的分支
  74.       case @command_window.index
  75.       when 0  # 新游戏
  76.         command_new_game
  77.       when 1  # 继续
  78.         command_continue
  79.       when 2  # 系统设定
  80.         command_systemsettings
  81.       when 3  # 退出
  82.         command_shutdown
  83.       when 4 #
  84.         command_movie
  85.       end
  86.     end
  87.   end
  88. end
复制代码
直接当外来脚本插入就行了,或者删掉最上面一行和最下面一行然后替换掉update

点评

Bitmap#disposed?  发表于 2011-7-6 19:37
我改的只是update部分,其它部分……我什么都不知道  发表于 2011-7-6 19:33
soka,.new前加个dispose吧……  发表于 2011-7-6 19:32
plummy 发表于 2011-7-6 19:22:07
建议去看看柳柳的《公共事件制作菜单》,别用脚本了

点评

我并没有说要放弃脚本,只是让他试试用事件做  发表于 2011-7-6 19:38
不要口口声声的叫别人放弃脚本学什么事件。这就是我要告诉你的而已。  发表于 2011-7-6 19:36
唉,我做菜单一直都是用公共事件的  发表于 2011-7-6 19:34
事件的最终结果就是脚本,别以为用了事件效率还能提高,那只会降低。  发表于 2011-7-6 19:32
结果都一样。  发表于 2011-7-6 19:31
忧雪の伤 发表于 2011-7-6 19:16:59
  1. #==============================================================================
  2. # ■  Hangup 异常根除
  3. #    Hangup Exception Eradication
  4. #----------------------------------------------------------------------------
  5. #
  6. #    Hangup 异常是 RMXP 底层引擎内置的一个异常类,游戏进程会在 Graphics.update
  7. #    没有调用超过 10 秒时抛出这个异常。这个脚本使用了 Windows API 暴力地解除
  8. #    了这个限制。
  9. #    使用方法:Hangup 异常根除脚本必须插入到脚本编辑器的最顶端,所有脚本之前,无
  10. #    例外。
  11. #
  12. #----------------------------------------------------------------------------
  13. #
  14. #    更新作者: 紫苏
  15. #    许可协议: FSL -MEE
  16. #    项目版本: 1.2.0827
  17. #    引用网址:
  18. #    http://rpg.blue/forum.php?mod=viewthread&tid=134316
  19. #    http://szsu.wordpress.com/2010/08/09/hangup_eradication
  20. #
  21. #----------------------------------------------------------------------------
  22. #
  23. #    - 1.2.0827 By 紫苏
  24. #      * 更改了配置模块名
  25. #      * 更改了 FSL 注释信息
  26. #
  27. #    - 1.2.0805 By 紫苏
  28. #      * 脚本开始遵循 FSL
  29. #      * 全局范围内改变了脚本结构
  30. #
  31. #    - 1.1.1101 By 紫苏
  32. #      * 修正了脚本在 Windows XP 平台下失效的问题
  33. #
  34. #    - 1.0.0927 By 紫苏
  35. #      * 初始版本完成
  36. #
  37. #==============================================================================

  38. $__jmp_here.call if $__jmp_here

  39. #----------------------------------------------------------------------------
  40. # ● 登记 FSL。
  41. #----------------------------------------------------------------------------
  42. $fscript = {} if !$fscript
  43. $fscript['HangupEradication'] = '1.2.0827'

  44. #==============================================================================
  45. # ■ FSL
  46. #------------------------------------------------------------------------------
  47. #  自由RGSS脚本通用公开协议的功能模块。
  48. #==============================================================================

  49. module FSL
  50.   module HangupEradication
  51.     #------------------------------------------------------------------------
  52.     # ● 定义需要的 Windows API。
  53.     #------------------------------------------------------------------------
  54.     OpenThread = Win32API.new('kernel32', 'OpenThread', 'LIL', 'L')
  55.     CloseHandle = Win32API.new('kernel32', 'CloseHandle', 'L', 'I')
  56.     Thread32Next = Win32API.new('kernel32', 'Thread32Next', 'LP', 'I')
  57.     ResumeThread = Win32API.new('kernel32', 'ResumeThread', 'L', 'L')
  58.     SuspendThread = Win32API.new('kernel32', 'SuspendThread', 'L', 'L')
  59.     Thread32First = Win32API.new('kernel32', 'Thread32First', 'LP', 'I')
  60.     GetCurrentProcessId = Win32API.new('kernel32', 'GetCurrentProcessId', 'V', 'L')
  61.     CreateToolhelp32Snapshot = Win32API.new('kernel32', 'CreateToolhelp32Snapshot', 'LL', 'L')
  62.   end
  63. end

  64. #==============================================================================
  65. # ■ HangupEradication
  66. #------------------------------------------------------------------------------
  67. #  处理根除 Hangup 异常的类。
  68. #==============================================================================

  69. class HangupEradication
  70.   include FSL::HangupEradication
  71.   #--------------------------------------------------------------------------
  72.   # ● 初始化对像。
  73.   #--------------------------------------------------------------------------
  74.   def initialize
  75.     @hSnapShot = CreateToolhelp32Snapshot.call(4, 0)
  76.     @hLastThread = OpenThread.call(2, 0, self.getLastThreadId)
  77.     #@hLastThread = OpenThread.call(2097151, 0, threadID)
  78.     ObjectSpace.define_finalizer(self, self.method(:finalize))
  79.   end
  80.   #--------------------------------------------------------------------------
  81.   # ● 获取当前进程创建的最后一个线程的标识。
  82.   #--------------------------------------------------------------------------
  83.   def getLastThreadId
  84.     threadEntry = [28, 0, 0, 0, 0, 0, 0].pack("L*")
  85.     threadId = 0                                          # 线程标识
  86.     found = Thread32First.call(@hSnapShot, threadEntry)   # 准备枚举线程
  87.     while found != 0
  88.       arrThreadEntry = threadEntry.unpack("L*")           # 线程数据解包
  89.       if arrThreadEntry[3] == GetCurrentProcessId.call    # 匹配进程标识
  90.         threadId = arrThreadEntry[2]                      # 记录线程标识
  91.       end
  92.       found = Thread32Next.call(@hSnapShot, threadEntry)  # 下一个线程
  93.     end
  94.     return threadId
  95.   end
  96.   #--------------------------------------------------------------------------
  97.   # ● 根除 Hangup 异常。
  98.   #     2       : “暂停和恢复线程访问权限”代码;
  99.   #     2097151 : “所有可能的访问权限”代码(Windows XP 平台下无效)。
  100.   #--------------------------------------------------------------------------
  101.   def eradicate
  102.     SuspendThread.call(@hLastThread)
  103.   end
  104.   #--------------------------------------------------------------------------
  105.   # ● 恢复 Hangup 异常。
  106.   #--------------------------------------------------------------------------
  107.   def resume
  108.     while ResumeThread.call(@hLastThread) > 1; end        # 恢复最后一个线程
  109.   end
  110.   #--------------------------------------------------------------------------
  111.   # ● 最终化对像。
  112.   #--------------------------------------------------------------------------
  113.   def finalize
  114.     CloseHandle.call(@hSnapShot)
  115.     CloseHandle.call(@hLastThread)
  116.   end
  117. end

  118. hangupEradication = HangupEradication.new
  119. hangupEradication.eradicate

  120. callcc { |$__jmp_here| }                                  # F12 后的跳转标记

  121. #==============================================================================
  122. # ■ 游戏主过程
  123. #------------------------------------------------------------------------------
  124. #  游戏脚本的解释从这个外壳开始。
  125. #==============================================================================

  126. for subscript in 1...$RGSS_SCRIPTS.size
  127.   begin
  128.     eval(Zlib::Inflate.inflate($RGSS_SCRIPTS[subscript][2]))
  129.   rescue Exception => ex
  130.     # 异常发生并抛出给解释器时恢复线程。
  131.     hangupEradication.resume unless defined?(Reset) and ex.class == Reset
  132.     raise ex
  133.   end
  134. end

  135. hangupEradication.resume
  136. exit
复制代码
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-26 12:18

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表