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

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: TLF
打印 上一主题 下一主题

怎样用事件判定法术范围

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
5 小时
注册时间
2008-10-19
帖子
326
11
 楼主| 发表于 2009-6-7 02:58:19 | 只看该作者
寻求更好的答案中%……
锐意制作中...
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-2-11
帖子
101
12
发表于 2009-6-7 03:02:51 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
5 小时
注册时间
2008-10-19
帖子
326
13
 楼主| 发表于 2009-6-7 03:23:05 | 只看该作者
以下引用SeRiKa于2009-6-6 19:02:51的发言:


以下引用如梦于2009-6-6 11:38:01的发言:
if (x - x1).abs <= 4 and (y - y1).abs <= 4


这个是正方型的范围吧?




我做过2003的纯事件ARPG

首先XP的事件办不到的是 获取指定地点ID编号
http://rpg.blue/viewthread.php?tid=126457 这地址的第2问 等人来解决- -

例:  ■
   ■■■
■■○■■
   ■■■
     ■    四周的范围

方案1:代入圆的坐标后 依次获取方块地点所含有的事件ID

方案2:■■■  循环判断敌事件是否在方型范围内 ,之后在对剩余4个判断是否存在事件
      ■○■                 ■■■■
      ■■■ 这个方案可用于○■■■■之类技能
                             ■■■■
总之用计算次数少的来(电脑不卡就随便了...)
                             
得到事件ID后,转换成 敌编号 (如果设置的一样就不需要了)

有了敌编号就按攻击单个事件的算法算
注:每获得1个敌编号立即对其计算攻击,或者你可以先存在什么地方之后一起计算

具体操作很是复杂- -,有耐心就用事件慢慢做吧



[本贴由作者于 2009-6-6 19:13:22 最后编辑]


-。- 我已经感受到了……可是ARPG缺了这个可不爽。。。 如果事件不能,脚本会好么
锐意制作中...
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-2-11
帖子
101
14
发表于 2009-6-7 03:33:06 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
5 小时
注册时间
2008-10-19
帖子
326
15
 楼主| 发表于 2009-6-7 03:34:52 | 只看该作者
以下引用SeRiKa于2009-6-6 19:33:06的发言:

用默认脚本 提取指定地点事件ID的话 如果没有事件 返回的是1长串东西- -

对这1串东西 要怎么判断呢?


- -难道说脚本和事件结合起来用?。。。

我头大了……。。。
锐意制作中...
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-2-11
帖子
101
16
发表于 2009-6-7 05:43:25 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
5 小时
注册时间
2008-10-19
帖子
326
17
 楼主| 发表于 2009-6-7 14:37:43 | 只看该作者
以下引用SeRiKa于2009-6-6 21:43:25的发言:

哦- -

可以 在获取指定位置事件ID之前把1个空白事件移动过去
判断的时候如果是这个事件ID就跳过

a = $game_map.check_event(x, y)
$game_variables[?] = a




↑这是什么



[本贴由作者于 2009-6-6 21:50:51 最后编辑]


有没有相关的范例什么的……听你说这个我很晕
锐意制作中...
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
18
发表于 2009-6-9 12:05:49 | 只看该作者
首先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感谢您的热情解答~
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-27 19:40

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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