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

Project1

 找回密码
 注册会员
搜索
查看: 2229|回复: 4
打印 上一主题 下一主题

[已经解决] 有没有管理和释放内存的办法,提高XP的贞数?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
60
在线时间
386 小时
注册时间
2006-12-10
帖子
231
跳转到指定楼层
1
发表于 2012-7-17 01:08:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
游戏一旦功能多了,玩游戏时贞数就会下降,甚至下降到10以下,一个游戏最少也要在四十贞左右运行才算流畅吧。而能达到四十贞的画面,只有游戏开始,或是对话时停留不动能达到,其它时候都在十左右。
如果运行时可以很好的管理内存,将所有不需要的内存释放,只在需要时调用,然后不需要时再释放。
我查看了一下帮助手册,没有关于内存方面的涵数。或许帮助手册不完善,很多涵数都没有写上去。
这问题急啊,游戏贞数太低,急需解决。
另外地图大了,贞数会低得可怕。
相信论坛上的高手对这方面应该专门研究过,希望有高手能提出一些解决方案。在此谢过。

Lv5.捕梦者

梦石
0
星屑
39016
在线时间
5717 小时
注册时间
2006-11-10
帖子
6619
2
发表于 2012-7-17 13:48:53 | 只看该作者

三步一卡,十分潇洒,五步一停,万种风情.

玩起来不舒服的游戏肯定不会是好游戏, 所以这个也是制作的时候必须考虑的

功能多了, 就要精简,就要简化, 就要合成, 比如影子脚本, 完全可以靠修改行走图实现, 而不必多负担一个刷新, 比如获得物品提示,完全可以用事件,而不必浪费一个窗口., 像地图显示血条, 传统类型的RPG游戏根本没有必要这样做, 纯粹是浪费刷新

另外也需要尽量的限制并行处理事件, 有些并行处理可以用开关控制,必要的时候再打开运行, 控制一张图不要多于2个并行,而能合并加到脚本里一起刷新的尽量塞进去. 变量方面尽量精简重复利用,节省内存.

地图方面最好不要超过4个屏幕大, 可以用拼接法, 同一个地图上的事件也尽量的不要太多,也可以节省点.

这个是要自己控制的, 高手的游戏,虽然华丽,但是FPS都有保证, 相反的,新手的游戏,没用多少效果,却卡得很, 原因就是这样咯
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1281 小时
注册时间
2006-8-27
帖子
590
3
发表于 2012-7-17 18:14:58 | 只看该作者
通常游戏卡不是内存的问题 是重复计算太多了 好好看下脚本
回复

使用道具 举报

Lv3.寻梦者

双子人

梦石
0
星屑
3185
在线时间
3618 小时
注册时间
2009-4-4
帖子
4154

开拓者

4
发表于 2012-7-17 19:07:08 | 只看该作者
可以考虑使用反延迟脚本(防卡脚本)
  1. #======================================
  2. # ■ Anti Event Lag Script
  3. #======================================
  4. #  By: Near Fantastica
  5. #   Date: 12.06.05
  6. #   Version: 3
  7. #======================================
  8. #======================================
  9. # ■ Game_Map
  10. #======================================
  11. class Game_Map
  12.   #--------------------------------------------------------------------------
  13.   def in_range?(object)
  14.     screne_x = $game_map.display_x
  15.     screne_x -= 256
  16.     screne_y = $game_map.display_y
  17.     screne_y -= 256
  18.     screne_width = $game_map.display_x
  19.     screne_width += 2816
  20.     screne_height = $game_map.display_y
  21.     screne_height += 2176
  22.     return false if object.real_x <= screne_x
  23.     return false if object.real_x >= screne_width
  24.     return false if object.real_y <= screne_y
  25.     return false if object.real_y >= screne_height
  26.     return true
  27.   end
  28.   #--------------------------------------------------------------------------
  29.   def update
  30.     if $game_map.need_refresh
  31.       refresh
  32.     end
  33.     if @scroll_rest > 0
  34.       distance = 2 ** @scroll_speed
  35.       case @scroll_direction
  36.       when 2
  37.         scroll_down(distance)
  38.       when 4
  39.         scroll_left(distance)
  40.       when 6   
  41.         scroll_right(distance)
  42.       when 8   
  43.         scroll_up(distance)
  44.       end
  45.       @scroll_rest -= distance
  46.     end
  47.     for event in @events.values
  48.       if in_range?(event) or event.trigger == 3 or event.trigger == 4
  49.         event.update
  50.       end
  51.     end
  52.     for common_event in @common_events.values
  53.       common_event.update
  54.     end
  55.     @fog_ox -= @fog_sx / 8.0
  56.     @fog_oy -= @fog_sy / 8.0
  57.     if @fog_tone_duration >= 1
  58.       d = @fog_tone_duration
  59.       target = @fog_tone_target
  60.       @fog_tone.red = (@fog_tone.red * (d - 1) + target.red) / d
  61.       @fog_tone.green = (@fog_tone.green * (d - 1) + target.green) / d
  62.       @fog_tone.blue = (@fog_tone.blue * (d - 1) + target.blue) / d
  63.       @fog_tone.gray = (@fog_tone.gray * (d - 1) + target.gray) / d
  64.       @fog_tone_duration -= 1
  65.     end
  66.     if @fog_opacity_duration >= 1
  67.       d = @fog_opacity_duration
  68.       @fog_opacity = (@fog_opacity * (d - 1) + @fog_opacity_target) / d
  69.       @fog_opacity_duration -= 1
  70.     end
  71.   end
  72. end
  73. #======================================
  74. # ■ Spriteset_Map
  75. #======================================
  76. class Spriteset_Map
  77.   #--------------------------------------------------------------------------
  78.   def in_range?(object)
  79.     screne_x = $game_map.display_x
  80.     screne_x -= 256
  81.     screne_y = $game_map.display_y
  82.     screne_y -= 256
  83.     screne_width = $game_map.display_x
  84.     screne_width += 2816
  85.     screne_height = $game_map.display_y
  86.     screne_height += 2176
  87.     return false if object.real_x <= screne_x
  88.     return false if object.real_x >= screne_width
  89.     return false if object.real_y <= screne_y
  90.     return false if object.real_y >= screne_height
  91.     return true
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   def update
  95.     if @panorama_name != $game_map.panorama_name or
  96.         @panorama_hue != $game_map.panorama_hue
  97.       @panorama_name = $game_map.panorama_name
  98.       @panorama_hue = $game_map.panorama_hue
  99.       if @panorama.bitmap != nil
  100.         @panorama.bitmap.dispose
  101.         @panorama.bitmap = nil
  102.       end
  103.       if @panorama_name != ""
  104.         @panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
  105.       end
  106.       Graphics.frame_reset
  107.     end
  108.     if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue
  109.       @fog_name = $game_map.fog_name
  110.       @fog_hue = $game_map.fog_hue
  111.       if @fog.bitmap != nil
  112.         @fog.bitmap.dispose
  113.         @fog.bitmap = nil
  114.       end
  115.       if @fog_name != ""
  116.         @fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
  117.       end
  118.       Graphics.frame_reset
  119.     end
  120.     @tilemap.ox = $game_map.display_x / 4
  121.     @tilemap.oy = $game_map.display_y / 4
  122.     @tilemap.update
  123.     @panorama.ox = $game_map.display_x / 8
  124.     @panorama.oy = $game_map.display_y / 8
  125.     @fog.zoom_x = $game_map.fog_zoom / 100.0
  126.     @fog.zoom_y = $game_map.fog_zoom / 100.0
  127.     @fog.opacity = $game_map.fog_opacity
  128.     @fog.blend_type = $game_map.fog_blend_type
  129.     @fog.ox = $game_map.display_x / 4 + $game_map.fog_ox
  130.     @fog.oy = $game_map.display_y / 4 + $game_map.fog_oy
  131.     @fog.tone = $game_map.fog_tone
  132.     i=0
  133.     for sprite in @character_sprites
  134.       if sprite.character.is_a?(Game_Event)
  135.         if in_range?(sprite.character) or sprite.character.trigger == 3 or sprite.character.trigger == 4
  136.           sprite.update
  137.           i+=1
  138.         end
  139.       else
  140.         sprite.update
  141.         i+=1
  142.       end
  143.     end
  144.     #p i
  145.     @weather.type = $game_screen.weather_type
  146.     @weather.max = $game_screen.weather_max
  147.     @weather.ox = $game_map.display_x / 4
  148.     @weather.oy = $game_map.display_y / 4
  149.     @weather.update
  150.     for sprite in @picture_sprites
  151.       sprite.update
  152.     end
  153.     @timer_sprite.update
  154.     @viewport1.tone = $game_screen.tone
  155.     @viewport1.ox = $game_screen.shake
  156.     @viewport3.color = $game_screen.flash_color
  157.     @viewport1.update
  158.     @viewport3.update
  159.   end
  160. end

复制代码
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
386 小时
注册时间
2006-12-10
帖子
231
5
 楼主| 发表于 2012-7-17 19:31:23 | 只看该作者
游戏运行起来很流畅,一点不卡。就是贞数太低。是ARPG游戏,XAS的系统,怎么可能卡呢。大神力作,只是想找到一些好的提高贞数的办法
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-23 04:32

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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