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

Project1

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

[已经解决] 地图事件库提取时总是有卡顿

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2605
在线时间
896 小时
注册时间
2011-4-30
帖子
131

开拓者

跳转到指定楼层
1
发表于 2013-12-27 17:14:02 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 mariofans 于 2013-12-30 15:09 编辑

地图事件库也就是类似的复制提取事件。我用了很多种方法,但是在提取的瞬间总是会卡一下。对于我正在制作的演示类游戏来说影响是非常大的。
这是我现在用的脚本:
RUBY 代码复制
  1. module EventHelper
  2.   def self.get_rpg_event(event_id, map_id=$game_map.map_id)
  3.     map = $game_map.instance_variable_get(:@map)
  4.     if map_id != $game_map.map_id
  5.       map = load_data(sprintf("Data/Map%03d.rxdata", map_id))
  6.     end
  7.     return map.events[event_id]
  8.   end
  9. end
  10.  
  11. class Game_Map
  12.   # rpg_evt:需要刷新的事件RPG::Event, 用上面的get_rpg_event获得
  13.   # xy:坐标
  14.   # ss:需要打开的独立开关列表("ABCD")
  15.   def spawn_event(rpg_evt, x, y, ss="")
  16.     new_id = 1 + @map.events.keys.max
  17.     new_evt = RPG::Event.new(x, y)
  18.     new_evt.id = new_id
  19.     new_evt.pages = rpg_evt.pages
  20.     @map.events[new_id] = new_evt
  21.  
  22.     @events[new_id] = Game_Event.new(@map_id, new_evt)
  23.     #@events[new_id].set_direction(dir)#
  24.     $game_self_switches[[@map_id, new_id, ss]] = true
  25.  
  26.     # 刷新图块
  27.     refresh
  28.     #$scene.instance_eval { @spriteset.update }
  29.     $scene.instance_eval { @spriteset.dispose }
  30.     $scene.instance_eval { @spriteset = Spriteset_Map.new }
  31.   end
  32. end

求教怎样才能让提取不卡。

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

23
发表于 2013-12-31 16:10:55 | 只看该作者
mariofans 发表于 2013-12-30 15:06
☆————————————此帖已经终结————————————☆果然还是利用了events.keys.max只增不 ...

保险起见,尽量不要再加别的利用到event.keys的脚本,防止冲突。
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2605
在线时间
896 小时
注册时间
2011-4-30
帖子
131

开拓者

22
 楼主| 发表于 2013-12-30 15:06:07 | 只看该作者
☆————————————此帖已经终结————————————☆
  1. if @xeup != $game_map.events.keys.max
  2.       eupn = $game_map.events.keys.max
  3.       eupo = @xeup
  4.       if eupn > eupo
  5.         sprite = Sprite_Character.new(@viewport1, $game_map.events[eupn])
  6.         @character_sprites.push(sprite)
  7.         @xeup = $game_map.events.keys.max
  8.       end
  9.     end
复制代码
果然还是利用了events.keys.max只增不减的特性做成了判断。并且在update中只生成新的事件图像。
感谢@chd114 提供了思路。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2605
在线时间
896 小时
注册时间
2011-4-30
帖子
131

开拓者

21
 楼主| 发表于 2013-12-30 14:45:52 | 只看该作者
chd114 发表于 2013-12-30 14:40
把条件分歧里面那两个都p一次看看是什么

嗯……刚刚换语句了,那个似乎行不通……
在另开一帖里:http://rpg.blue/thread-344041-1-1.html
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

20
发表于 2013-12-30 14:40:29 | 只看该作者
mariofans 发表于 2013-12-28 22:18
那有没有办法在Spriteset_Map的update里下手,使其在地图事件总数变化时单独刷新成角色活动块,而不用全 ...

把条件分歧里面那两个都p一次看看是什么
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2605
在线时间
896 小时
注册时间
2011-4-30
帖子
131

开拓者

19
 楼主| 发表于 2013-12-30 13:31:25 | 只看该作者
本帖最后由 mariofans 于 2013-12-30 13:34 编辑
mariofans 发表于 2013-12-30 13:25
我把update加入了这几句会出错。错在哪里?(@xeup在之前已经赋值)


$game_map.events.keys.sort是可变量还是不变量?
如果不变,那么那一句可以代表当前地图的事件数目?
还有for i in XX如果要判定i不在XX范围内该怎么写?
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2605
在线时间
896 小时
注册时间
2011-4-30
帖子
131

开拓者

18
 楼主| 发表于 2013-12-30 13:25:44 | 只看该作者
chd114 发表于 2013-12-28 22:53
恐怕不行···除非你能直接把RMXP的源文件改了···就像癫狂侠客的DKRM那样

我把update加入了这几句会出错。错在哪里?(@xeup在之前已经赋值)
  1. # 刷新角色活动块
  2.     if @xeup != $game_map.events.keys.sort
  3.       for i in $game_map.events.keys.sort
  4.         sprite.dispose
  5.         sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
  6.         @character_sprites.push(sprite)
  7.         @xeup = $game_map.events.keys.sort
  8.       end
  9.     end
复制代码
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2605
在线时间
896 小时
注册时间
2011-4-30
帖子
131

开拓者

17
 楼主| 发表于 2013-12-28 23:15:11 | 只看该作者
chd114 发表于 2013-12-28 23:11
我是说修改RM内部文件的权限···不是你的工程

额……我说的是试一试改update啊………………
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

16
发表于 2013-12-28 23:11:12 | 只看该作者
mariofans 发表于 2013-12-28 23:00
没权限啥?只有版主能发代码?

我是说修改RM内部文件的权限···不是你的工程
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2605
在线时间
896 小时
注册时间
2011-4-30
帖子
131

开拓者

15
 楼主| 发表于 2013-12-28 23:00:38 | 只看该作者
chd114 发表于 2013-12-28 22:59
没记错的话不是正版就没权限···

没权限啥?只有版主能发代码?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-30 12:33

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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