以下引用66rpg学习于2009-6-6 10:51:11的发言:
没听太明白,是在ARPG中 制作一个有范围的魔法吗
比如一次攻击 5个敌人?
以下引用66rpg学习于2009-6-6 10:57:22的发言:
以下引用TLF于2009-6-6 10:53:32的发言:
以下引用66rpg学习于2009-6-6 10:51:11的发言:
没听太明白,是在ARPG中 制作一个有范围的魔法吗
比如一次攻击 5个敌人?
对,不过ARPG中一个敌人就是一个事件
我这就出门
理论操作:
必须设置技能范围
攻击时,技能造成地面一个范围可以2维数组,就象SLG的攻击范围
然后循环检查当前地图所有事件的坐标
在此地面范围内的事件 受到伤害。
以下引用如梦于2009-6-6 11:07:58的发言:
假设先判断一个敌人,该敌人的坐标代入变量3和4,假设一个炸弹爆炸了,爆炸范围是4格,炸弹的坐标代入变量1和2,以下用并行事件判断该敌人是不是在爆炸范围内,是的话就扣血。多个敌人可以循环判断敌人事件的ID
($game_variables[1]-$game_variables[3]).abs <= 4 and ($game_variables[2]-$game_variables[4]).abs <= 4
[本贴由作者于 2009-6-6 11:11:14 最后编辑]
以下引用如梦于2009-6-6 11:38:01的发言:
直接用条件分歧里的脚本调用,
比如敌人事件编号为1~10,炸弹是11号事件,1~10号公共事件是1~10号敌人的扣血事件
for i in 1..10
x = $game_map.events[11].x
y = $game_map.events[11].y
x1 = $game_map.events.x
y1 = $game_map.events.y
if (x - x1).abs <= 4 and (y - y1).abs <= 4
$game_temp.common_event_id = i
break
end
end
[本贴由作者于 2009-6-6 11:39:38 最后编辑]
以下引用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 最后编辑]
以下引用SeRiKa于2009-6-6 19:33:06的发言:
用默认脚本 提取指定地点事件ID的话 如果没有事件 返回的是1长串东西- -
对这1串东西 要怎么判断呢?
以下引用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 最后编辑]
首先XP的事件办不到的是 获取指定地点ID编号
http://rpg.blue/viewthread.php?tid=126457 这地址的第2问 等人来解决- -
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
例: ■
■■■
■■○■■
■■■
■ 四周的范围
方案1:代入圆的坐标后 依次获取方块地点所含有的事件ID
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
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |