查看: 4764|回复: 22

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

[复制链接]
梦石
0
星屑
2605
在线时间
896 小时
注册时间
2011-4-30
回帖
108

开拓者

发表于 2013-12-27 17:14:02 | 显示全部楼层 |阅读模式

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

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

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

地图事件库也就是类似的复制提取事件。我用了很多种方法,但是在提取的瞬间总是会卡一下。对于我正在制作的演示类游戏来说影响是非常大的。
这是我现在用的脚本:
[pre lang="ruby" line="1"]module EventHelper
  def self.get_rpg_event(event_id, map_id=$game_map.map_id)
    map = $game_map.instance_variable_get(:@map)
    if map_id != $game_map.map_id
      map = load_data(sprintf("Data/Map%03d.rxdata", map_id))
    end
    return map.events[event_id]
  end
end

class Game_Map
  # rpg_evt:需要刷新的事件RPG::Event, 用上面的get_rpg_event获得
  # xy:坐标
  # ss:需要打开的独立开关列表("ABCD")
  def spawn_event(rpg_evt, x, y, ss="")
    new_id = 1 + @map.events.keys.max
    new_evt = RPG::Event.new(x, y)
    new_evt.id = new_id
    new_evt.pages = rpg_evt.pages
    @map.events[new_id] = new_evt

    @events[new_id] = Game_Event.new(@map_id, new_evt)
    #@events[new_id].set_direction(dir)#
    $game_self_switches[[@map_id, new_id, ss]] = true
   
    # 刷新图块
    refresh
    #$scene.instance_eval { @spriteset.update }
    $scene.instance_eval { @spriteset.dispose }
    $scene.instance_eval { @spriteset = Spriteset_Map.new }
  end
end[/pre]
求教怎样才能让提取不卡。
梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 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
回复

使用道具 举报

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

开拓者

 楼主| 发表于 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 提供了思路。
回复

使用道具 举报

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

开拓者

 楼主| 发表于 2013-12-30 14:45:52 | 显示全部楼层
chd114 发表于 2013-12-30 14:40
把条件分歧里面那两个都p一次看看是什么

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

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 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
回复

使用道具 举报

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

开拓者

 楼主| 发表于 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范围内该怎么写?
回复

使用道具 举报

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

开拓者

 楼主| 发表于 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
复制代码
回复

使用道具 举报

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

开拓者

 楼主| 发表于 2013-12-28 23:15:11 | 显示全部楼层
chd114 发表于 2013-12-28 23:11
我是说修改RM内部文件的权限···不是你的工程

额……我说的是试一试改update啊………………
回复

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 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
回复

使用道具 举报

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

开拓者

 楼主| 发表于 2013-12-28 23:00:38 | 显示全部楼层
chd114 发表于 2013-12-28 22:59
没记错的话不是正版就没权限···

没权限啥?只有版主能发代码?
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部