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

Project1

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

[已经解决] 请问如何永久删除事件

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
70 小时
注册时间
2014-10-11
帖子
50
跳转到指定楼层
1
发表于 2015-2-13 21:52:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
我想永久的删除一个事件 , 停止其一切刷新  ,  我看了一些其他的人的回答  不要暂时消除的 要永久删除的  

同时 我看了那个 $scene.delete(i) 的类型 ,发现这个不是永久删除事件而是暂时删除事件 过了一个地图又重新出现了 希望大神们能够帮忙解决

Lv5.捕梦者

梦石
0
星屑
33435
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

2
发表于 2015-2-13 22:39:57 | 只看该作者
下面这个估摸着写的,没测试。
要永久删除就在 事件 — 脚本 里写:remove_event(地图ID, 事件ID)
运行后,指定的事件永久消失。关掉工程后再打开,事件也从编辑器上消失。
  1. def remove_event(map_id, event_id)
  2.   return unless FileTest.exist?(sprintf("Data/Map%03d.rxdata", map_id))
  3.   map = load_data(sprintf("Data/Map%03d.rxdata", map_id))
  4.   return unless map.events.keys.include?(event_id)
  5.   map.events.delete(event_id)
  6.   save_data(map, sprintf("Data/Map%03d.rxdata", map_id))
  7.   $game_map.remove_event(event_id) if $game_map.map_id == map_id  
  8. end
  9. class Game_Map
  10.   def remove_event(event_id)
  11.     @events.delete(event_id)
  12.     refresh
  13.   end
  14. end
  15. class Spriteset_Map
  16.   alias add_update_xdrs update
  17.   def update
  18.     if @character_data != $game_map.events
  19.       @character_data = $game_map.events.clone
  20.       @character_sprites.each{|s| s.dispose}
  21.       @character_sprites.clear
  22.       for i in $game_map.events.keys.sort
  23.         sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
  24.         @character_sprites.push(sprite)
  25.       end
  26.       @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
  27.     end
  28.     add_update_xdrs
  29.   end
  30. end
复制代码

点评

大神请问下用您的这种方法删除地图上的一个事件对工程数据库有没有影响呢?游戏新开一档后这个事件还会出现吗?  发表于 2021-10-18 16:25

评分

参与人数 1星屑 +100 梦石 +1 收起 理由
hys111111 + 100 + 1 认可答案

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv1.梦旅人

薄凉看客

梦石
0
星屑
50
在线时间
1269 小时
注册时间
2010-6-20
帖子
1316
3
发表于 2015-2-14 00:39:22 | 只看该作者
本帖最后由 恐惧剑刃 于 2015-7-9 21:02 编辑

噢 或许你需要的是这个??
$game_temp.delete_events(事件ID)   删除事件
$game_temp.make_events(地图ID, 事件ID) 复制事件
  1. =begin
  2. 需要手动修改 Spriteset_Map  ,  改动如下:

  3. 找到 “生成角色活动块” 替换代码:
  4. @character_sprites = {}
  5. for i in $game_map.events.keys.sort
  6.   sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
  7.   @character_sprites[i] = sprite
  8. end
  9. @character_sprites[-1] = Sprite_Character.new(@viewport1, $game_player)
  10. @character_sprites_keys = @character_sprites.keys.sort

  11. 找到 “释放角色活动块” 替换代码:
  12. for sprite in @character_sprites_keys
  13.   @character_sprites[sprite].dispose
  14. end

  15. 找到 “刷新角色活动块” 替换代码:
  16. for sprite in @character_sprites_keys
  17.   @character_sprites[sprite].update
  18. end

  19. =end
  20. class Scene_Map
  21.   attr_reader :spriteset
  22. end
  23. class Game_Map
  24.   attr_reader :map
  25. end
  26. class Spriteset_Map
  27.   def delete_events(event_id)
  28.     $game_map.events.delete(event_id)
  29.     @character_sprites[event_id].dispose
  30.     @character_sprites[event_id] = nil
  31.     @character_sprites.delete(event_id)
  32.     @character_sprites_keys.delete(event_id)
  33.     @character_sprites_keys.compact!
  34.   end
  35.   def make_events(map_id, event_id)
  36.     #======================读取地图文件
  37.     if map_id != $game_map.map_id
  38.       data_map = load_data(sprintf("Data/Map%03d.rxdata", map_id))
  39.     else
  40.       data_map = $game_map.map
  41.     end
  42.     event = data_map.events[event_id]
  43.     return if event.nil?
  44.     #======================循环检索ID
  45.     id = 2000
  46.     cheak = false
  47.     begin
  48.       if $game_map.events[id]
  49.         id += 1
  50.       else
  51.         cheak = true
  52.       end
  53.     end until cheak
  54.     #======================生成数据
  55.     $game_map.events[id] = Game_Event.new(map_id, event)
  56.     @character_sprites[id] = Sprite_Character.new(@viewport1, $game_map.events[id])
  57.     @character_sprites_keys << id
  58.   end
  59. end
  60. class Game_Temp
  61.   def delete_events(event_id)
  62.     return if !$game_map.events[event_id]
  63.     $scene.spriteset.delete_events(event_id)
  64.   end
  65.   def make_events(map_id, event_id)
  66.     $scene.spriteset.make_events(map_id, event_id)
  67.   end
  68. end
复制代码

点评

加入后 很多脚本都报错。 还是行不通,我把工程发给你 你帮我改下如何? 大神,  发表于 2015-7-9 21:13
哦 或许你需要的是这个??  发表于 2015-7-9 21:03
可能如果不 Spriteset_Map.new图形就会在那(即使是空白也会使FPS下降) 但 Spriteset_Map.new后会掉帧(因为Map.new刷新一遍的缘故?) 且播放中的动画消失了  发表于 2015-7-9 16:57
但要是不加这3行代码 虽然delete掉了事件 但是事件的图形还存在的缘故会使FPS下降 若加上会出现我上一句说的状况  发表于 2015-7-9 16:54
return unless Drop_Item.is_map? $scene.spriteset.dispose $scene.spriteset = Spriteset_Map.new 删除执行这段代码会掉帧一瞬间 且播放的动画会全部消失  发表于 2015-7-9 16:53
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
70 小时
注册时间
2014-10-11
帖子
50
4
 楼主| 发表于 2015-2-14 00:58:49 | 只看该作者
第72行出了问题  未定义方法 dispose

点评

这偶就不太清楚了  发表于 2015-2-14 01:05
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
70 小时
注册时间
2014-10-11
帖子
50
5
 楼主| 发表于 2015-2-14 01:11:10 | 只看该作者
恐惧剑刃 发表于 2015-2-14 00:39
$game_temp.remove_event(事件ID, true) 即可
工程,报错的话,偶就不太清楚喽~

大神 帮忙看下我最新的帖子 这个问题我解决不了
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9163
在线时间
466 小时
注册时间
2015-5-8
帖子
866
6
发表于 2021-10-19 01:32:54 | 只看该作者
芯☆淡茹水 发表于 2015-2-13 22:39
下面这个估摸着写的,没测试。
要永久删除就在 事件 — 脚本 里写:remove_event(地图ID, 事件ID)
运行后, ...

大神请问下用您的这种方法删除地图上的一个事件对工程数据库有没有影响呢?游戏新开一档后这个事件还会出现吗?

点评

已知解决方法..同时注译掉refresh这句就行  发表于 2021-10-21 11:25
注译掉save_data(map, sprintf("Data/Map%03d.rxdata", map_id))这行后运行那个remove_event游戏直接卡死.....  发表于 2021-10-21 02:38
注译掉save_data(map, sprintf("Data/Map%03d.rxdata", map_id))这行应该就行了...不会保存到数据库..  发表于 2021-10-20 00:20
不想删掉数据库里的这个事件啊,只想删掉本存档中的这个事件,下次重开档这个事件得还在啊  发表于 2021-10-19 23:59
所以你到底是想还在数据库还是不想在?  发表于 2021-10-19 23:52
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 11:39

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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