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

Project1

 找回密码
 注册会员
搜索
查看: 158|回复: 2

[制作工具] 關於事件數量VS效能的問題

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3223
在线时间
519 小时
注册时间
2011-12-18
帖子
585
发表于 2019-8-22 21:53:32 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 sdgn 于 2019-9-1 17:45 编辑

首先已用最小尺寸的地圖試過排滿空的事件會很卡....
想請問RM事件效能的影響是一個畫面上的事件數還是整張地圖的事件數???
想說如果是前ˊ者的話就避免一個畫面占太多事件就好了

Lv4.逐梦者 (版主)

梦石
0
星屑
14939
在线时间
1610 小时
注册时间
2011-7-8
帖子
2466

开拓者

发表于 2019-9-1 17:03:49 | 显示全部楼层
本帖最后由 guoxiaomi 于 2019-9-1 21:47 编辑

一般是整张地图的事件数,海量的碰撞和事件触发判断导致帧率下降。

实际操作的时候,如果只需要显示一个Character,应该实现一个特殊的子类(继承Game_Event或者 Game_Character),依据具体的需求移除此事件类的移动、碰撞、事件页触发、每帧更新图片等功能。

上面提到的“只需要显示一个Character”有歧义,其实是说,只需要显示Character而不做事件触发、移动碰撞等操作。

其实论坛里已经有大量的解决方案了,但是需要自己去适配自己的游戏。

我签名里的《Reformers》,这个是XP工程。工程里用了大量的事件分割地图,并且有跳跃事件,玩家走到此格子会触发跳跃到另一个地方。

由于这些事件都是透明的行走图,而且位置固定,事件页只有一页,就使用下面的脚本阻止了事件页的刷新和角色的移动以提升性能,换句话说,适用于在进入地图的时候就已经加载完毕,永远不会改变的事件:

RUBY 代码复制打印
  1. # 不刷新跳跃事件
  2. #==============================================================================
  3. # ■ Game_Event
  4. #------------------------------------------------------------------------------
  5. #  处理事件的类。条件判断、事件页的切换、并行处理、执行事件功能
  6. # 在 Game_Map 类的内部使用。
  7. #==============================================================================
  8.  
  9. class Game_Event < Game_Character
  10.   #--------------------------------------------------------------------------
  11.   # ● 初始化对像
  12.   #     map_id : 地图 ID
  13.   #     event  : 事件 (RPG::Event)
  14.   #--------------------------------------------------------------------------
  15.   alias _jump_inialize initialize
  16.   def initialize(map_id, event)
  17.     _jump_inialize(map_id, event)
  18.     @jump_event = false
  19.     if @event.name =~ /^#j/
  20.       @jump_event = true
  21.     end
  22.   end
  23.   #--------------------------------------------------------------------------
  24.   # ● 刷新
  25.   #--------------------------------------------------------------------------
  26.   alias _jump_refresh refresh
  27.   def refresh
  28.     return if @jump_event
  29.     _jump_refresh
  30.   end
  31.   #--------------------------------------------------------------------------
  32.   # ● 更新画面
  33.   #--------------------------------------------------------------------------
  34.   alias _jump_update update
  35.   def update
  36.     return if @jump_event
  37.     _jump_update
  38.   end
  39. end


注意 19 行,事件名称必须以 #j 开头才会被停止刷新。进一步的还可以让其他的事件在检索碰撞时忽视这些事件,等等。我这里没有做,是因为我的程序里这些事件被用做地形分割,即为了阻止自由移动的事件跨过区域。

如果要求事件触发或者移动,可以把原来update/refresh部分里相关的内容复制过来。如果对刷新行走图还有性能要求,就需要修改 Sprite_Character 类了,不过在我看来非弹幕游戏的瓶颈不在这里。

点评

就是要同時顯示多個物件才會來問  发表于 2019-9-1 17:46
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

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

本版积分规则

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

站长信箱:fux2@moe9th.com|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2020-2-29 02:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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