Project1

标题: 如何事件面向事件? [打印本页]

作者: 277297575    时间: 2010-11-8 08:48
标题: 如何事件面向事件?
本帖最后由 277297575 于 2010-11-9 12:58 编辑

要一个事件面向另一个事件,下面是参照面向主角在Game_Character里写的,但是出错了,请教指点。
  def turn_toward_event(event_id)
   sx = @x - $game_map.events[event_id].x
   sy = @y - $game_map.events[event_id].y
    if sx.abs > sy.abs                    # 横向距离更长?
      sx > 0 ? turn_left : turn_right
    elsif sx.abs < sy.abs                 # 纵向距离更长?
      sy > 0 ? turn_up : turn_down
    end
  end
作者: 38571240    时间: 2010-11-8 19:16
本帖最后由 38571240 于 2010-11-8 19:18 编辑

看LZ的写法,是想在脚本里实现这个方法,只要稍作修改即可,请在脚本区Main之前插入以下:
  1.   #--------------------------------------------------------------------------
  2.   # 用法:在某处触发【$game_map.events[A事件ID].turn_toward_event(B事件ID)】
  3.   # 这样A事件将朝向B事件
  4.   #--------------------------------------------------------------------------
  5. class Game_Event < Game_Character
  6.   #--------------------------------------------------------------------------
  7.   # ● 定义实例变量
  8.   #--------------------------------------------------------------------------
  9.   attr_reader   :x                        # 地图逻辑 X 座标
  10.   attr_reader   :y                        # 地图逻辑 Y 座标
  11.   attr_reader   :direction                # 面向
  12.   attr_reader   :id                       # ID
  13.   
  14.   def turn_toward_event(id)
  15.    sx = @x - $game_map.events[id].x
  16.    sy = @y - $game_map.events[id].y
  17.     if sx.abs > sy.abs                    # 横向距离更长?
  18.       @direction = sx > 0 ? 4 : 6
  19.     elsif sx.abs < sy.abs                 # 纵向距离更长?
  20.       @direction = sy > 0 ? 8 : 2
  21.     end
  22.   end
  23. end
复制代码
用法:假如地图上有两个事件,如事件ID分别为1和2,只要触发$game_map.events[2].turn_toward_event(1)
那么2号事件将根据坐标差朝向1号事件的方向。
范例: 朝向.exe (406.09 KB, 下载次数: 57)
作者: 277297575    时间: 2010-11-8 19:46
原来要添加实例变量........
还有范例,感谢,感谢了。




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