Project1

标题: 一台流畅运行战地3的电脑表示RMVX只200个事件就卡了 [打印本页]

作者: 流川枫    时间: 2013-11-15 22:11
标题: 一台流畅运行战地3的电脑表示RMVX只200个事件就卡了
想用RM做个类似沙盒那样需要即时存在众多动态物件和生物的表示鸭梨很大,如果要优化最多也就把静态的物件用脚本直接改写地图图块,而剩下的只有事件尽可能精简。
把时间定住的时候就算300个事件也不卡,时间一流动就爆卡
作者: 流川枫    时间: 2013-11-15 22:13
而以前我的古董电脑则只需要二三十个事件就很卡了
作者: 精灵使者    时间: 2013-11-15 22:29
可以考虑静止的时候动画来节省不少功夫。
另外很多的情况下尽可能的合并事件也是个好主意
作者: 火烧兔子    时间: 2013-11-15 22:42
试试防卡的脚本

把事件塞满地图都不觉得有多卡(当然,如果你的地图太大的话……)
作者: 美丽晨露    时间: 2013-11-15 22:57
个人感觉VA会比较流畅一些。
作者: 流川枫    时间: 2013-11-15 23:50
本帖最后由 流川枫 于 2013-11-16 00:03 编辑

其实我从一开始就看出RM一个导致CPU狂占的原因,刚试验了下果然和我想的一样。

插入以下临时脚本可以实测300个事件最高频率随机移动也不卡

class Game_Map
    #--------------------------------------------------------------------------
  # ● 获取指定位置的事件数组
  #     x : X 座标
  #     y : Y 座标
  #--------------------------------------------------------------------------
  def events_xy(x, y)
    result = []
=begin
    for event in $game_map.events.values
      result.push(event) if event.pos?(x, y)
    end
=end
    return result
  end
end


而要实际使用该脚本优化游戏,只需要用散列或数组对事件和地图坐标做一个映射。然后在这个方法里直接查表就能实用。

当初很久很久以前解读RMXP源码的时候就发现这个设计上的偷懒,可以想像RM的程序员是多么地懒惰和不考虑CPU的负荷。


又试了下400个事件随机高频率移动也不太卡,不过500个就卡了
作者: acn00269    时间: 2013-11-15 23:52
两者的内存及效率根本就不一样嘛
作者: orochi2k    时间: 2013-11-16 03:45
1,种树。
2,LOD AI
作者: 紫英晓狼1130    时间: 2013-11-16 07:07
战地三的容量较大吧,RM就是这样,毕竟这是RM的老版本,新版本需要自行购买
作者: 天空梦    时间: 2013-11-16 11:29
话说现在都出战地4了吧。。。不过战地3也才10G而已。。不知道配置需要多高、反正枪战游戏我只玩过荣誉勋章2010、貌似一台1000块左右的笔记本电脑都能玩的很流畅、说明这些游戏需要的配置并不需要多高
话说明明13G的荣誉勋章2010都玩不卡。。战地3也应该不会卡。但。为什么一个3G的逃生就卡爆了。。不明觉厉。。
作者: fux2    时间: 2013-11-16 12:21




楼主可以试试只刷新屏幕内的事件,默认的系统很卡是因为屏幕外的Sprite也生成并且描绘,没有很好的管理。
这个截图的工程忘了把事件设置为随机移动,实际上是一样的。
放个范例,楼主可以试试
Take♂It♂Boy.rar (243.08 KB, 下载次数: 49)
作者: 残瑰月狐    时间: 2013-11-16 12:23
300?密集恐惧症的默望
作者: 无脑之人    时间: 2013-11-16 12:42
直接撸Sprite算了……打死也不用事件- -
作者: grayuncle    时间: 2013-11-16 13:23
楼主想做红警这样的战略游戏么
作者: 流川枫    时间: 2013-11-16 19:31
fux2 发表于 2013-11-16 12:21
楼主可以试试只刷新屏幕内的事件,默认的系统很卡是因为屏幕外的Sprite也生成并且描绘,没有很好的管理 ...

试了一下发现角色精灵刷新卡在更新方法中的这几个地方,如果去掉这几个地方并且不随机高频率移动的话1000个事件也流畅。也就是说RM两个导致爆卡的原因一是之前我说的碰撞检测,二就是你说的精灵刷新。我之前说的剪裁是DX是自带的功能,而RM刷新精灵卡就是RM自身的问题了:

update_bitmap

move_animation(@character.screen_x - x, @character.screen_y - y)

    self.x = @character.screen_x
    self.y = @character.screen_y
    self.z = @character.screen_z
作者: 柳之一    时间: 2013-11-16 22:02
戰地三---用的是你的顯卡
rm--用的是你的cpu,
有什麽可比性
作者: fux2    时间: 2013-11-17 00:51
柳之一 发表于 2013-11-16 22:02
戰地三---用的是你的顯卡
rm--用的是你的cpu,
有什麽可比性

切成全屏不就是了。
作者: tjjlb    时间: 2013-11-17 09:42
流川枫 发表于 2013-11-15 23:50
其实我从一开始就看出RM一个导致CPU狂占的原因,刚试验了下果然和我想的一样。

插入以下临时脚本可以实测3 ...

= =这是要表达十一节假日吗
作者: 小学生    时间: 2013-11-17 11:35
256M内存30G硬盘的**路过。




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