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

Project1

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

[已经过期] 怎么按照这样子的顺序,把事件id依次写入数组,已解决

[复制链接]

Lv2.观梦者

梦石
0
星屑
470
在线时间
159 小时
注册时间
2013-11-2
帖子
205

开拓者

跳转到指定楼层
1
发表于 2017-9-17 21:03:47 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 飞翔的小鸟3 于 2017-9-20 11:54 编辑

用图来解释一下:

说明:
从A那边开始==》A那条蓝线的末尾==》B蓝线的头==》B蓝线的末尾==》C蓝线的头==》C蓝线的末尾,以此类推……
按照这种顺序把位于蓝线上的事件的id依次写入数组。

应该说的清楚了吧?有空的大佬想想,给个思路也好,我也去想想。
ps 每次都是我想不到,然后提问,接着我就自己想到了.........

Lv6.析梦学徒

老鹰

梦石
40
星屑
34725
在线时间
6740 小时
注册时间
2012-5-26
帖子
3259

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

2
发表于 2017-9-17 21:35:06 | 只看该作者
先对x坐标迭代,再对y坐标迭代

从A.x到最右边事件的x .each do |i|
  从A.y到最下面事件的y .each do |j|
    获取 (i, j) 坐标的事件的id,压入数组
  end
end

点评

还是有点看不懂。。。  发表于 2017-9-19 12:15
嗯,谢谢,我试试看  发表于 2017-9-18 09:07
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

3
发表于 2017-9-17 23:50:45 | 只看该作者
本帖最后由 guoxiaomi 于 2017-9-17 23:54 编辑
  1. $game_map.events.values.sort{|e1, e2| e1.x * 100 + e1.y <=> e2.x * 100 + e2.y}.collect{|e| e.id}
复制代码

点评

话说余妹都不来了?他可是我的老师呢。请教过几次。  发表于 2017-9-19 19:48
我在rmxp上测试通过,va上应该没有问题。在地图上新建一个事件,把脚本输进去执行就可以。你说报错,能把报错的图发上来么  发表于 2017-9-19 16:31
我刚刚去p了一下。脚本错误  发表于 2017-9-19 12:14
我做的是用枪战斗的游戏,之前没讲清楚,可以让指定名字的事件,比如“敌人”的所有事件代下去排列吗?我看不懂你的代码,我也不知道怎么改  发表于 2017-9-19 12:09
这段代码的意思是,读取当前地图上的全部事件,并且按照 x坐标*100+y坐标 的大小排序,然后按照顺序将对应事件的 id 压入数组并返回  发表于 2017-9-18 23:29
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
470
在线时间
159 小时
注册时间
2013-11-2
帖子
205

开拓者

4
 楼主| 发表于 2017-9-19 18:13:01 | 只看该作者
本帖最后由 飞翔的小鸟3 于 2017-9-19 18:17 编辑




顺便麻烦让指定事件名字的id代下去排列,不要全部事件的
我用的是这个代码找出指定名字的事件id
idArray = $game_map.events.keys.find_all{|id| $game_map.events[id].name == '小明'}
这个,你应该看得懂。

点评

话说版主答对了,谁给好人卡?  发表于 2017-9-19 18:18
我也看不懂这个错误  发表于 2017-9-19 18:13
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

5
发表于 2017-9-19 22:59:34 | 只看该作者
本帖最后由 guoxiaomi 于 2017-9-19 23:19 编辑
飞翔的小鸟3 发表于 2017-9-19 18:13
顺便麻烦让指定事件名字的id代下去排列,不要全部事件的
我用的是这个代码找出指定名字的事件id
idArra ...


这个脚本很长,要分行写:


  1. # 先排序再选择
  2. a = $game_map.events.values.sort{|e1, e2|
  3. e1.x * 100 + e1.y <=> e2.x * 100 + e2.y
  4. }.collect{|e|
  5. e.name == '小明' ? e.id : nil
  6. }.compact
  7. p a
复制代码

  1. # 先选择再排序
  2. a = $game_map.events.values.find_all{|e|
  3. e.name == '小明'
  4. }.sort{|e1, e2|
  5. e1.x * 100 + e1.y <=> e2.x * 100 + e2.y
  6. }.collect{|e| e.id}
  7. p a
复制代码

点评

改了一下说明  发表于 2017-9-19 23:19
判断返回值?你这算是回答了我下面那个问题吗?  发表于 2017-9-19 23:16
真的成功了捏,然后,怎么把指定事件名字的id代下去排列,不要全部事件的?  发表于 2017-9-19 23:04
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
470
在线时间
159 小时
注册时间
2013-11-2
帖子
205

开拓者

6
 楼主| 发表于 2017-9-19 23:13:54 | 只看该作者
本帖最后由 飞翔的小鸟3 于 2017-9-19 23:15 编辑
guoxiaomi 发表于 2017-9-19 22:59
这个脚本很长,要分行写:


咳咳,不好意思,这里有点问题...
1.之前没说清楚,要排列的是名叫“小明”的事件。
2.需要把我那张图颠倒4个方向。




因为这是用枪的游戏,所以有四个方向,本来想你们给我思路,或我看得懂的脚本,然后,我可以自己改,但是
你这个脚本我搞不懂,不能自己改,只能全部问你了。
是不是多了点?

说明:顺序还是不变
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23994
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

7
发表于 2017-9-19 23:18:05 | 只看该作者
本帖最后由 guoxiaomi 于 2017-9-19 23:29 编辑
飞翔的小鸟3 发表于 2017-9-19 23:13
咳咳,不好意思,这里有点问题...
1.之前没说清楚,要排列的是名叫“小明”的事件。
2.需要把我那张图颠 ...


这个最关键的地方是 .sort{} 方法
你改一下里面的公式,就可以按照不同的顺序来扫描了。
比如说竖着扫描,那么就计算每一个事件的 x 坐标*100+ y 坐标,用计算的值来排序。

不要想着“扫描”每一个格子,而是想把事件按照顺序“排列”起来。
如果说 x * 100 + y 不好理解,是不是这样写比较好理解:

  1. ...sort{|e1, e2|
  2. e1.x != e2.x ? e1.x <=> e2.x : e1.y <=> e2.y
  3. }
复制代码

如果两个事件的 x 坐标不相同,按照 x 坐标排序;如果 x 坐标相同,按照 y 坐标排序

点评

然而我到现在都不知道怎么回事。。  发表于 2017-9-20 11:55
昨天怎么想都不知道怎么回事,然后今天上学路上,我想除了调换*100的值,是不是可以调换e1和e2的值呢? 结果4种都试出来了  发表于 2017-9-20 11:53
我一向晚睡……不过我觉得提示的已经足够了,你应该可以独立想出来这个sort里的内容要怎么修改才能适应其他的情况,想想坐标系里的直线  发表于 2017-9-20 00:08
前辈还不去睡觉吗?要休息的话,明天在讨论吧  发表于 2017-9-20 00:02
谢谢,然后我刚刚乱改,把*100的位置变来变去,都是输出一个方向的,也不知道怎么回事?  发表于 2017-9-20 00:01
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
470
在线时间
159 小时
注册时间
2013-11-2
帖子
205

开拓者

8
 楼主| 发表于 2017-9-19 23:43:13 | 只看该作者
本帖最后由 飞翔的小鸟3 于 2017-9-19 23:45 编辑
guoxiaomi 发表于 2017-9-19 23:18
这个最关键的地方是 .sort{} 方法
你改一下里面的公式,就可以按照不同的顺序来扫描了。
比如说竖着扫描 ...


我是这样子想的,列出所有事件的X值,比较,把相同的X和对应id分别存入数组(每个数组里都是X相同的事件及id),然后在每个数组里比较y的大小,更改顺序,最后全部写入一个数组里。结束。

点评

你想想,优先比较x,然后比较y,然后y的值肯定小于100,那直接比较100*x+y就可以啊  发表于 2017-9-19 23:46
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 06:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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