Project1

标题: 有没有专门的脚本是判断事件到达地图边界的? [打印本页]

作者: stella    时间: 2009-5-17 20:06
标题: 有没有专门的脚本是判断事件到达地图边界的?
判断某个事件是否到达地图上下或左右的边界。不用判断坐标的方法有没有? [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: 越前リョーマ    时间: 2009-5-17 20:11
地形标志?
作者: 塑望    时间: 2009-5-17 20:11
那么只有地形标志了

作者: Flyingpww    时间: 2009-5-17 21:30
def is_in_verge?(x,y)
   x1 = 0...$game_map.width
   y1 = 0...$game_map.height
   if x1.include?(x) and (y == 0 or  y == $game_map.height-1)
     return true
   elsif y1.include?(y) and (x == 0 or x == $game_map.width-1)
     return true
   end
   return false
end



作者: stella    时间: 2009-5-17 21:39
请问楼上,怎么在并行处理事件的脚本里判断啊? if 1号事件移动到边界,就打开10号开关
作者: tommay    时间: 2009-5-17 21:41
以下引用stella于2009-5-17 13:39:28的发言:

请问楼上,怎么在事件的脚本里判断啊? if 1号事件移动到边界,就打开10号开关

这个用地形标志最好了

1号变量代入地形标志,当地形标志=1时,打开10号开关
作者: stella    时间: 2009-5-17 21:45
那么能不能在脚本编辑器里设置:当所有地图中名为EV003的事件到达地图边界就自动回到主角的坐标,这样地图多的话,就用不着一张一张地图设置地形标志了
作者: 紫苏    时间: 2009-5-17 22:02
以下引用Flyingpww于2009-5-17 13:30:18的发言:

def is_in_verge?(x,y)
  x1 = 0...$game_map.width
  y1 = 0...$game_map.height
  if x1.include?(x) and (y == 0 or  y == $game_map.height-1)
    return true
  elsif y1.include?(y) and (x == 0 or x == $game_map.width-1)
    return true
  end
  return false
end

include? 是线性搜索,这样判断影响效率诶~
直接判断 x == 0 or x == $game_map.width - 1 即可,高度也同理,然后把这个函数放到 Interpreter 中,就能直接在事件脚本中调用了:
class Interpreter
  def is_in_verge?(x, y)
    ...
  end
end
[LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: stella    时间: 2009-5-18 00:23
这么写吗??{/gg}

class Interpreter
  def is_in_verge?(x, y)
    if x == 0 or x == $game_map.width - 1
      return false
    elsif y == 0 or y == $game_map.height - 1
      return false
    else
      return true
    end
  end
end
作者: 紫苏    时间: 2009-5-18 08:42
这样也行,flyingpww那样是判断“在边界上”,你这样就是判断“不在边界”上~
作者: Quarcy    时间: 2009-5-18 15:11
其實這樣才是最快的
class Interpreter
def is_in_verge?(x, y)
   if x == 0 or y == 0 or x == $game_map.width - 1 or y == $game_map.height - 1
     return true
   end
   return false
end
end [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: stella    时间: 2009-5-18 17:04
Interpreter 有1234567,写在哪个里面啊? 事件脚本的调用怎么写?我只希望所有地图里名为EV003的事件有这个判断。。。在每张地图的EV003事件中直接写成下面这样?

if x == 0 or x == $game_map.width - 1
本事件的坐标等于主角的坐标?





其实就是角色发射子弹的判断啦~~{/gg}
作者: 六脉神剑    时间: 2009-5-18 17:24
只判断一个事件大可不用那个函数,直接在条件分歧的脚本中写:

$game_map.events[3].x == 0 || $game_map.events[3].x == $game_map.width - 1 || $game_map.events[3].y == 0 || $game_map.events[3].y == $game_map.height - 1

条件分歧之下即3号事件在边界上。 [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: stella    时间: 2009-5-18 17:37
如果地图很多的话,能不能不用在每张地图的事件里并行判断,只在脚本编辑器里写好就可以了呢?因为所有地图中的三号事件都是子弹,当判断到三号事件到达版边界就自动回到主角坐标
作者: 紫苏    时间: 2009-5-18 18:12
那可以在 Game_Map 的 update 中判断,插入 Main 之前就行了:
class Game_Map
  alias update_old update if !method_defined? :update_old
  def update
    update_old
    if @events[3] && @events[3].x == 0 ||
      @events[3].x == $game_map.width - 1 ||
      @events[3].y == 0 ||
      @events[3].y == $game_map.height - 1
      @events[3].moveto($game_player.x, $game_player.y)
    end
  end
end





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1