赞 | 2 |
VIP | 143 |
好人卡 | 1 |
积分 | 1 |
经验 | 216792 |
最后登录 | 2019-10-10 |
在线时间 | 24 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 61
- 在线时间
- 24 小时
- 注册时间
- 2008-8-5
- 帖子
- 1924
|
首先XP的事件办不到的是 获取指定地点ID编号
http://rpg.blue/viewthread.php?tid=126457 这地址的第2问 等人来解决- -
把 check_event 修改为: def check_event(x, y)
for event in $game_map.events.values
if event.x == x and event.y == y
return event.id
end
end
return 0
end 这样在 (x, y) 找不到事件就会返回 0~
没有 return 0 这一行的话,check_event 在 (x, y) 处找不到事件就会返回函数中最后一个计算的表达式的值,也就 for 循环那一行,而这一行的值就是 $game_map.events 这个对象数组
例: ■
■■■
■■○■■
■■■
■ 四周的范围
方案1:代入圆的坐标后 依次获取方块地点所含有的事件ID 这不是圆,而是 45 度的正方形,判断范围的方法是 |x1 - x2| + |y1 - y2| <= n
用 sqrt 判断圆的话,实际得到的范围更像这样:
■■■
■■■■■
■■○■■
■■■■■
■■■
TLF的问题,可以在 Interpreter 中定义一个方法,获取本事件周围特定范围内的所有事件的数组,之后就可以做一个循环对这个数组内的敌人进行扣血的计算~先插入:class Interpreter
#--------------------------------------------------------------------------
# ● 初始化对像
# range : 范围(单位:格)
#--------------------------------------------------------------------------
def getEventsWithin(range)
# 保存最后要返回的事件
ret_events = []
# 地图上所有的事件
map_events = $game_map.events
# 本事件
this = map_events[@event_id]
# 本事件坐标
x, y = this.x, this.y
# 循环检查地图上所有的事件是否在范围内
map_events.each_value do |i|
# 跳过本事件
next if i == this
# 如果在范围内就添加到最后要返回的事件数组中
ret_events.push(i) if (x - i.x).abs + (y - i.y).abs <= range
end
# 返回
return ret_events
end
end 然后就可以在事件脚本中调用:enemies = getEventsWithin(5)
# 枚举数组中的元素(在范围内的敌人),对其 hp 或其他属性进行增加
for e in enemies
e.hp -= 多少多少
end 版主对此帖的认可:『很不错的解说,感激你在提问区做出的贡献,请再接再厉...』,积分『+350』。 系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~ |
|