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

Project1

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

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

[复制链接]

Lv4.逐梦者

梦石
8
星屑
3943
在线时间
396 小时
注册时间
2017-10-11
帖子
154
跳转到指定楼层
1
发表于 2018-4-16 13:03:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
主要想判断地图某格没有任何事件时,才则执行
  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

Lv3.寻梦者

梦石
0
星屑
1358
在线时间
1295 小时
注册时间
2012-8-4
帖子
749
2
发表于 2018-4-16 13:09:20 | 只看该作者
$game_map.check_event(x, y)

点评

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

使用道具 举报

Lv4.逐梦者

梦石
8
星屑
3943
在线时间
396 小时
注册时间
2017-10-11
帖子
154
3
 楼主| 发表于 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
像这类全否才执行的写法,该怎么简写
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36372
在线时间
10785 小时
注册时间
2009-3-15
帖子
4813
4
发表于 2018-4-16 14:04:00 | 只看该作者
zuo = true if e.x == x and e.y == y
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1358
在线时间
1295 小时
注册时间
2012-8-4
帖子
749
5
发表于 2018-4-16 14:39:54 | 只看该作者
调用方法

RUBY 代码复制
  1. class Game_Map
  2.   def batch_check_event(start_x, start_y, width, height)
  3.     end_x = start_x + width
  4.     end_y = start_y + height
  5.     if start_x > end_x
  6.       start_x = start_x^end_x
  7.       end_x = end_x^start_x
  8.       start_x = start_x^end_x
  9.     end
  10.     if start_y > end_y
  11.       start_y = start_y^end_y
  12.       end_y = end_y^start_y
  13.       start_y = start_y^end_y
  14.     end
  15.     for x in start_x .. end_x
  16.       for y in start_y .. end_y
  17.         return true if $game_map.check_event(x, y).is_a? Integer
  18.       end
  19.     end
  20.     return false
  21.   end
  22. end
回复 支持 反对

使用道具 举报

Lv5.捕梦者

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

开拓者

6
发表于 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)
复制代码


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

RUBY 代码复制
  1. 执行内容 unless $game_map.events.values.any?{|e| e.x == x && e.y == y}


或者用 find 也可以:

RUBY 代码复制
  1. 执行内容 unless $game_map.events.values.find{|e| e.x == x && e.y == y}

点评

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 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-11 07:27

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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