Project1

标题: 【原创】飞吧小鸟!【更新2.0 多种类】 [打印本页]

作者: 各种压力的猫君    时间: 2011-10-22 14:28
标题: 【原创】飞吧小鸟!【更新2.0 多种类】
本帖最后由 各种压力的猫君 于 2011-11-26 23:52 编辑


这个脚本可以让小鸟在主角一定距离之内飞行,太近会飞远,太远会飞近……
这个就不加1经验了 =v= b
脚本:
  1. #==============================================================================
  2. # ■ 小鸟 2.0 (FOR RMXP) by 各种压力的猫君
  3. #------------------------------------------------------------------------------
  4. #  小鸟会在主角一定距离之内飞行……
  5. #------------------------------------------------------------------------------
  6. #   使用说明:
  7. #   将本脚本插入Game_Character和Main之间,
  8. #   然后设置小鸟事件的移动路线为:(重复动作)
  9. #   ◇脚本:BIRD1("1"为小鸟的「种类」,可省略;"BIRD"可以在下面自定义)
  10. #------------------------------------------------------------------------------
  11. #   定义小鸟的「种类」,可以设定出不同远近的鸟儿(27行开始)
  12. #   注意:「种类」只可使用整数!
  13. #------------------------------------------------------------------------------
  14. # 2011-11-06 2.0 修改变量名称/类型,现在可以定义多种类的小鸟了。
  15. # 2011-11-03 1.1 更换了一种设置方法,抛弃了开关。
  16. # 2011-10-22 1.0 初版
  17. #==============================================================================

  18. module Bird_Config
  19.   # 自定义识别符
  20.   SCRIPT_CODE = "BIRD"
  21.   # 设置小鸟和主角最近的距离(仅当未定义种类时使用该值)
  22.   BIRD_MIN_DISTANCE = 4
  23.   # 设置小鸟和主角最远的距离(仅当未定义种类时使用该值)
  24.   BIRD_MAX_DISTANCE = 10
  25. end

  26. class Game_Character
  27. #------------------------------------------------------------------------------
  28.   # 最近的距离
  29.   def bird_min_distance(type)
  30.     # 第1种
  31.     if type == 1
  32.       return 7
  33.     # 第2种
  34.     elsif type == 2
  35.       return 1
  36.     end
  37.     # 若未设定返回默认值
  38.     return Bird_Config::BIRD_MIN_DISTANCE
  39.   end
  40. #------------------------------------------------------------------------------
  41.   # 最远的距离
  42.   def bird_max_distance(type)
  43.     # 第1种
  44.     if type == 1
  45.       return 12
  46.     # 第2种
  47.     elsif type == 2
  48.       return 2
  49.     end
  50.     # 若未设定返回默认值
  51.     return Bird_Config::BIRD_MAX_DISTANCE
  52.   end
  53. #------------------------------------------------------------------------------


  54. "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"
  55. "┃        自定义内容到此结束,以下内容请谨慎修改!        ┃"
  56. "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"


  57.   #--------------------------------------------------------------------------
  58.   # ● 移动类型 : 自定义
  59.   #--------------------------------------------------------------------------
  60.   def move_type_custom
  61.     # 如果不是停止中就中断
  62.     if jumping? or moving?
  63.       return
  64.     end
  65.     # 如果在移动指令列表最后结束还没到达就循环执行
  66.     while @move_route_index < @move_route.list.size
  67.       # 获取移动指令
  68.       command = @move_route.list[@move_route_index]
  69.       # 指令编号 0 号 (列表最后) 的情况下
  70.       if command.code == 0
  71.         # 选项 [反复动作] 为 ON 的情况下
  72.         if @move_route.repeat
  73.           # 还原为移动路线的最初索引
  74.           @move_route_index = 0
  75.         end
  76.         # 选项 [反复动作] 为 OFF 的情况下
  77.         unless @move_route.repeat
  78.           # 强制移动路线的场合
  79.           if @move_route_forcing and not @move_route.repeat
  80.             # 强制解除移动路线
  81.             @move_route_forcing = false
  82.             # 还原为原始的移动路线
  83.             @move_route = @original_move_route
  84.             @move_route_index = @original_move_route_index
  85.             @original_move_route = nil
  86.           end
  87.           # 清除停止计数
  88.           @stop_count = 0
  89.         end
  90.         return
  91.       end
  92.       # 移动系指令 (向下移动~跳跃) 的情况下
  93.       if command.code <= 14
  94.         # 命令编号分支
  95.         case command.code
  96.         when 1  # 向下移动
  97.           move_down
  98.         when 2  # 向左移动
  99.           move_left
  100.         when 3  # 向右移动
  101.           move_right
  102.         when 4  # 向上移动
  103.           move_up
  104.         when 5  # 向左下移动
  105.           move_lower_left
  106.         when 6  # 向右下移动
  107.           move_lower_right
  108.         when 7  # 向左上移动
  109.           move_upper_left
  110.         when 8  # 向右上
  111.           move_upper_right
  112.         when 9  # 随机移动
  113.           move_random
  114.         when 10  # 接近主角
  115.           move_toward_player
  116.         when 11  # 远离主角
  117.           move_away_from_player
  118.         when 12  # 前进一步
  119.           move_forward
  120.         when 13  # 后退一步
  121.           move_backward
  122.         when 14  # 跳跃
  123.           jump(command.parameters[0], command.parameters[1])
  124.         end
  125.         # 选项 [无视无法移动的情况] 为 OFF 、移动失败的情况下
  126.         if not @move_route.skippable and not moving? and not jumping?
  127.           return
  128.         end
  129.         @move_route_index += 1
  130.         return
  131.       end
  132.       # 等待的情况下
  133.       if command.code == 15
  134.         # 设置等待计数
  135.         @wait_count = command.parameters[0] * 2 - 1
  136.         @move_route_index += 1
  137.         return
  138.       end
  139.       # 朝向变更系指令的情况下
  140.       if command.code >= 16 and command.code <= 26
  141.         # 命令编号分支
  142.         case command.code
  143.         when 16  # 面向下
  144.           turn_down
  145.         when 17  # 面向左
  146.           turn_left
  147.         when 18  # 面向右
  148.           turn_right
  149.         when 19  # 面向上
  150.           turn_up
  151.         when 20  # 向右转 90 度
  152.           turn_right_90
  153.         when 21  # 向左转 90 度
  154.           turn_left_90
  155.         when 22  # 旋转 180 度
  156.           turn_180
  157.         when 23  # 从右向左转 90 度
  158.           turn_right_or_left_90
  159.         when 24  # 随机变换方向
  160.           turn_random
  161.         when 25  # 面向主角的方向
  162.           turn_toward_player
  163.         when 26  # 背向主角的方向
  164.           turn_away_from_player
  165.         end
  166.         @move_route_index += 1
  167.         return
  168.       end
  169.       # 其它指令的场合
  170.       if command.code >= 27
  171.         # 命令编号分支
  172.         case command.code
  173.         when 27  # 开关 ON
  174.           $game_switches[command.parameters[0]] = true
  175.           $game_map.need_refresh = true
  176.         when 28  # 开关 OFF
  177.           $game_switches[command.parameters[0]] = false
  178.           $game_map.need_refresh = true
  179.         when 29  # 更改移动速度
  180.           @move_speed = command.parameters[0]
  181.         when 30  # 更改移动频度
  182.           @move_frequency = command.parameters[0]
  183.         when 31  # 移动时动画 ON
  184.           @walk_anime = true
  185.         when 32  # 移动时动画 OFF
  186.           @walk_anime = false
  187.         when 33  # 停止时动画 ON
  188.           @step_anime = true
  189.         when 34  # 停止时动画 OFF
  190.           @step_anime = false
  191.         when 35  # 朝向固定 ON
  192.           @direction_fix = true
  193.         when 36  # 朝向固定 OFF
  194.           @direction_fix = false
  195.         when 37  # 穿透 ON
  196.           @through = true
  197.         when 38  # 穿透 OFF
  198.           @through = false
  199.         when 39  # 在最前面显示 ON
  200.           @always_on_top = true
  201.         when 40  # 在最前面显示 OFF
  202.           @always_on_top = false
  203.         when 41  # 更改图形
  204.           @tile_id = 0
  205.           @character_name = command.parameters[0]
  206.           @character_hue = command.parameters[1]
  207.           if @original_direction != command.parameters[2]
  208.             @direction = command.parameters[2]
  209.             @original_direction = @direction
  210.             @prelock_direction = 0
  211.           end
  212.           if @original_pattern != command.parameters[3]
  213.             @pattern = command.parameters[3]
  214.             @original_pattern = @pattern
  215.           end
  216.         when 42  # 不更改不透明度
  217.           @opacity = command.parameters[0]
  218.         when 43  # 更改合成方式
  219.           @blend_type = command.parameters[0]
  220.         when 44  # 演奏 SE
  221.           $game_system.se_play(command.parameters[0])
  222.         when 45  # 脚本
  223. #==============================================================================
  224.           # 如果脚本内容含有识别符,则开始计算鸟的飞行路线
  225.           if command.parameters[0].slice(Bird_Config::SCRIPT_CODE) != nil
  226.             # 计算距离(公式 by orzfly)
  227.             $event_distance = Proc.new{|e1, e2|Math.sqrt((e2.x-e1.x)**2+(e2.y-e1.y)**2)}
  228.             # 变量处理
  229.             $bird_event_type = command.parameters[0].clone
  230.             $bird_event_type.slice!(Bird_Config::SCRIPT_CODE)
  231.             # 计算
  232.             @bird_distance = $event_distance.call($game_map.events[@event.id.to_i], $game_player)
  233.             # 根据种类判断距离
  234.             @bird_distance_min = bird_min_distance($bird_event_type.to_i)
  235.             @bird_distance_max = bird_max_distance($bird_event_type.to_i)
  236.             # 若当前距离在最近距离以内
  237.             if @bird_distance <= @bird_distance_min
  238.               # 远离主角
  239.               move_away_from_player
  240.             else
  241.               # 若当前距离在最远距离以外
  242.               if @bird_distance >= @bird_distance_max
  243.                 # 接近主角
  244.                 move_toward_player
  245.               # 除此之外的情况
  246.               else
  247.                 # 随机移动
  248.                 move_random
  249.               end
  250.             end
  251.           else
  252.             result = eval(command.parameters[0])
  253.           end
  254. #==============================================================================
  255.         end
  256.         @move_route_index += 1
  257.       end
  258.     end
  259.   end
  260. end
复制代码
范例:
小鸟2.0XP.zip (202.88 KB, 下载次数: 772)
作者: gamedev0001    时间: 2011-10-22 15:14
提示: 作者被禁止或删除 内容自动屏蔽
作者: 夜王    时间: 2011-10-22 15:20
貌似可以用事件做?
作者: 暗夜荆棘—佩恩    时间: 2011-10-22 16:20
这东东不牵强的说真的可以用事件做成。。。
作者: 过眼云烟    时间: 2011-10-22 17:28
嗯,虽然见过还是鼓励一下吧!
作者: fux2    时间: 2011-10-22 17:59
嗯,不错,就是设置还不太方便,不考虑用事件页设置飞行与行走的行走图么
作者: zzxxaspqw    时间: 2011-10-24 19:31
我很想知道如果用了固定路线的家伙,会不会受这个影响。
作者: gamedev0001    时间: 2011-10-28 12:20
提示: 作者被禁止或删除 内容自动屏蔽
作者: 天权地问    时间: 2011-10-29 20:04
额,占沙发
作者: 各种压力的猫君    时间: 2011-11-3 05:44
本帖最后由 各种压力的猫君 于 2011-11-3 05:44 编辑
gamedev0001 发表于 2011-10-28 12:20
我想问一下那个小鸟的开关是怎么打开的?


已更新1.1,不需要开关了哦亲~
作者: px.凤翔九天    时间: 2011-11-3 08:26
好猎奇的小鸟脚本...表示fux开始出题考核管理层了吗...
作者: s196050    时间: 2011-11-3 08:34
标题: 她只会直线逃跑
本帖最后由 s196050 于 2011-11-3 08:34 编辑

能不能把那松鼠的移动路线 在远离主角的时候加几个随机移动 否则的话 很容易堵到死角去??

作者: 精灵使者    时间: 2011-11-5 22:59
猫君求VX版……
作者: 各种压力的猫君    时间: 2011-11-6 02:02
精灵使者 发表于 2011-11-5 22:59
猫君求VX版……

移植完成(点我
作者: 關關難過關關過    时间: 2011-11-29 19:21
請問有辦法讓他到下一個場景就消失嗎?




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