查看: 2698|回复: 12

[已经解决] 求这类脚本的简便写法

[复制链接]
梦石
8
星屑
3963
在线时间
397 小时
注册时间
2017-10-11
回帖
114
发表于 2018-4-16 13:03:39 | 显示全部楼层 |阅读模式

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

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

×
主要想判断地图某格没有任何事件时,才则执行
  zuo = false
$game_map.events.values.each do |e|
       if e.x == x and e.y == y
       zuo = true
       end
     end
      if zuo == false
       执行内容
     end

但感觉自己的写法有点傻,尤其是内容一多起来就显得很长,有没有简便的写法

点评

$game_map.events.values···你怎么先想到用这么妖的写法的2333  发表于 2018-4-17 17:42
梦石
0
星屑
1788
在线时间
1313 小时
注册时间
2012-8-4
回帖
724
发表于 2018-4-16 13:09:20 | 显示全部楼层
$game_map.check_event(x, y)

点评

这个貌似是检测地图事件的编号的吧,具体怎么用?  发表于 2018-4-16 13:20
回复

使用道具 举报

梦石
8
星屑
3963
在线时间
397 小时
注册时间
2017-10-11
回帖
114
 楼主| 发表于 2018-4-16 13:21:47 | 显示全部楼层
夜狠简单 发表于 2018-4-16 13:09
$game_map.check_event(x, y)

其实主要还是想知道
a = false
for i in 1..5
if i == @event_id
a = true
end
end
if a == false
执行内容
end
像这类全否才执行的写法,该怎么简写
回复

使用道具 举报

梦石
0
星屑
39236
在线时间
11155 小时
注册时间
2009-3-15
回帖
4768
发表于 2018-4-16 14:04:00 | 显示全部楼层
zuo = true if e.x == x and e.y == y
回复

使用道具 举报

梦石
0
星屑
1788
在线时间
1313 小时
注册时间
2012-8-4
回帖
724
发表于 2018-4-16 14:39:54 | 显示全部楼层
调用方法$game_map.batch_check_event(17,13,1,1)
检查地图坐标
17,13
17,14
18,13
18,14
是否有事件存在,返回Bollean结果

[pre lang="ruby"]class Game_Map
  def batch_check_event(start_x, start_y, width, height)
    end_x = start_x + width
    end_y = start_y + height
    if start_x > end_x
      start_x = start_x^end_x
      end_x = end_x^start_x
      start_x = start_x^end_x
    end
    if start_y > end_y
      start_y = start_y^end_y
      end_y = end_y^start_y
      start_y = start_y^end_y
    end
    for x in start_x .. end_x
      for y in start_y .. end_y
        return true if $game_map.check_event(x, y).is_a? Integer
      end
    end
    return false
  end
end[/pre]
回复

使用道具 举报

梦石
0
星屑
34459
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 2018-4-16 17:59:23 | 显示全部楼层
本帖最后由 芯☆淡茹水 于 2018-4-16 18:07 编辑
CCD0645 发表于 2018-4-16 13:21
其实主要还是想知道
a = false
for i in 1..5




  1. 执行内容 unless (1..15).include?(@event_id)
复制代码


至于主楼的,貌似这样可以:

[pre lang="ruby"]执行内容 unless $game_map.events.values.any?{|e| e.x == x && e.y == y}[/pre]

或者用 find 也可以:

[pre lang="ruby"]执行内容 unless $game_map.events.values.find{|e| e.x == x && e.y == y}[/pre]

点评

any?返回一个bool值,find有一个默认为nil的参数,要么返回第一个找到的值,要么返回接受的参数  发表于 2018-4-17 10:36
any? 跟 find 有什么具体区别吗?  发表于 2018-4-17 06:12
差不多,但是any? 和 find 都会在找到一个满足条件的时候退出循环,钻一下牛角尖:完全等价于楼主的写法,应该是inject(false){|b, e| b || (...)}  发表于 2018-4-16 21:46
只用于判断的话,个人觉得 any? 貌似要好些。  发表于 2018-4-16 21:10
find正解  发表于 2018-4-16 19:14

评分

参与人数 2星屑 +80 赞 +2 收起 理由
RyanBern + 80 + 1 认可答案
CCD0645 + 1 认可答案

查看全部评分

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

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部