查看: 2930|回复: 6

[已经解决] 如何用一行脚本实现让事件回到它的初始位置?

[复制链接]
梦石
24
星屑
8942
在线时间
248 小时
注册时间
2020-12-4
回帖
259

极短24获奖极短23获奖极短22获奖

发表于 2021-7-22 20:23:52 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 纯属小虫 于 2021-7-22 21:51 编辑

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



感谢 RPGzh500223  问题已经解决

高手的脚本就是简洁而美丽...感动
在 Game_Map 新增定义
[pre lang="ruby"]class Game_Map
  #让事件回到自己的最初位置
  def ini_event_xy
    @events.each{|k, v|v.moveto(@map.events[k].x, @map.events[k].y)}
  end
end   [/pre]
事件脚本或设置移动路线脚本中使用
[pre lang="ruby"]$game_map.ini_event_xy[/pre]
梦石
0
星屑
2866
在线时间
446 小时
注册时间
2016-9-26
回帖
1175
发表于 2021-7-22 20:38:34 | 显示全部楼层
事件都可以实现,存在变量里,多个的话可以用脚本。
另外,出图再进图好像各事件坐标是会重置的(实测)
回复

使用道具 举报

梦石
24
星屑
8942
在线时间
248 小时
注册时间
2020-12-4
回帖
259

极短24获奖极短23获奖极短22获奖

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


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

回复

使用道具 举报

梦石
0
星屑
6483
在线时间
119 小时
注册时间
2020-1-8
回帖
205
发表于 2021-7-22 21:25:24 | 显示全部楼层
本帖最后由 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”

既然有赞就完善一下方法(支持单个事件位置的初始化)
[pre lang="ruby"]class Game_Map
  def ini_event_xy(id = -1, *ids)
    if id == -1
      @events.each{|k, v|v.moveto(@map.events[k].x, @map.events[k].y)}
      return
    end
    (ids << id).each do |i|
      next if (_event = @events) == nil
      _event.moveto(@map.events.x, @map.events.y)
    end
  end
end[/pre]

评分

参与人数 2星屑 +100 赞 +2 收起 理由
RyanBern + 100 + 1 认可答案
纯属小虫 + 1 认可答案

查看全部评分

回复

使用道具 举报

梦石
24
星屑
8942
在线时间
248 小时
注册时间
2020-12-4
回帖
259

极短24获奖极短23获奖极短22获奖

 楼主| 发表于 2021-7-22 21:30:23 | 显示全部楼层
本帖最后由 纯属小虫 于 2021-7-22 21:33 编辑
RPGzh500223 发表于 2021-7-22 21:25
一行……

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



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

我试了一个粗暴的方法,虽然要不断重新读取地图数据,不过至少能够成功了
[pre lang="ruby"]map_id = 311; map = load_data(sprintf("Data/Map%03d.rxdata", map_id)); moveto(map.events[self.id].x, map.events[self.id].y)[/pre]
不过还有个问题就是,map_id = 311 这个还是手动输入的,因为这行脚本要写在设置移动路线里头,有没有办法在“设置移动路径”中获取当前地图的ID?

点评

当前地图ID:$game_map.map_id  发表于 2021-7-22 21:37
事件脚本里输入 $game_map.ini_event_xy就可以了  发表于 2021-7-22 21:36
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部