Project1

标题: 如何用一行脚本实现让事件回到它的初始位置? [打印本页]

作者: 纯属小虫    时间: 2021-7-22 20:23
标题: 如何用一行脚本实现让事件回到它的初始位置?
本帖最后由 纯属小虫 于 2021-7-22 21:51 编辑

想要用一行脚本实现:让事件回到它的初始位置
请问如何获取事件初始坐标的变量,事件的x,y坐标数据是储存在哪里?



感谢 RPGzh500223  问题已经解决

高手的脚本就是简洁而美丽...感动
在 Game_Map 新增定义
RUBY 代码复制
  1. class Game_Map
  2.   #让事件回到自己的最初位置
  3.   def ini_event_xy
  4.     @events.each{|k, v|v.moveto(@map.events[k].x, @map.events[k].y)}
  5.   end
  6. end

事件脚本或设置移动路线脚本中使用
RUBY 代码复制
  1. $game_map.ini_event_xy

作者: 任小雪    时间: 2021-7-22 20:38
事件都可以实现,存在变量里,多个的话可以用脚本。
另外,出图再进图好像各事件坐标是会重置的(实测)
作者: 纯属小虫    时间: 2021-7-22 20:51
本帖最后由 纯属小虫 于 2021-7-22 21:28 编辑
任小雪 发表于 2021-7-22 20:38
事件都可以实现,存在变量里,多个的话可以用脚本。
另外,出图再进图好像各事件坐标是会重置的(实测) ...


主要是为了图方便,想要一句脚本就能解决回到原点,并且是可以进行事件批量复制后还不用更改的
想获取载入地图时,事件的XY坐标
这样就可以在事件移动了之后,还能快捷地让它回到它最开始的位置(制作飞镖陷阱之类的)
之前试过用 moveto ($game_map.events[self.id].x,$game_map.events[self.id].y)  但这个是获取事件当前的位置,没法让它回到原点


作者: RPGzh500223    时间: 2021-7-22 21:25
本帖最后由 RPGzh500223 于 2021-7-22 21:56 编辑

一行……
  1. class Game_Map; def ini_event_xy; @events.each{|k, v|v.moveto(@map.events[k].x, @map.events[k].y)}; end; end   
复制代码

数据存在地图里 比如1号地图数据就在“Data/Map001.rxdata”

既然有赞就完善一下方法(支持单个事件位置的初始化)
RUBY 代码复制
  1. class Game_Map
  2.   def ini_event_xy(id = -1, *ids)
  3.     if id == -1
  4.       @events.each{|k, v|v.moveto(@map.events[k].x, @map.events[k].y)}
  5.       return
  6.     end
  7.     (ids << id).each do |i|
  8.       next if (_event = @events[i]) == nil
  9.       _event.moveto(@map.events[i].x, @map.events[i].y)
  10.     end
  11.   end
  12. end


作者: 纯属小虫    时间: 2021-7-22 21:30
本帖最后由 纯属小虫 于 2021-7-22 21:33 编辑
RPGzh500223 发表于 2021-7-22 21:25
一行……

数据存在地图里 比如1号地图数据就在“Data/Map001.rxdata”



哈哈,感谢灵感给予,还是应该从地图数据入手

我试了一个粗暴的方法,虽然要不断重新读取地图数据,不过至少能够成功了
RUBY 代码复制
  1. map_id = 311; map = load_data(sprintf("Data/Map%03d.rxdata", map_id)); moveto(map.events[self.id].x, map.events[self.id].y)

不过还有个问题就是,map_id = 311 这个还是手动输入的,因为这行脚本要写在设置移动路线里头,有没有办法在“设置移动路径”中获取当前地图的ID?




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