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

Project1

 找回密码
 注册会员
搜索
查看: 4896|回复: 14
打印 上一主题 下一主题

[RMXP发布] 【原创】飞吧小鸟!【更新2.0 多种类】

[复制链接]

Lv2.观梦者

(?????)

梦石
0
星屑
728
在线时间
1327 小时
注册时间
2011-7-18
帖子
3184

贵宾

跳转到指定楼层
1
发表于 2011-10-22 14:28:18 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 各种压力的猫君 于 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)

点评

而且当前事件的id在这个过程中貌似可以用@event.id来取得的……复制很多小鸟然后一个个改里面的id不手疼么……  发表于 2011-11-4 21:27
我说啊,用不着用那么多全局变量吧……  发表于 2011-11-4 21:26

评分

参与人数 4星屑 +200 收起 理由
admini + 10 凑整美
54酱 + 40 XD
orzfly + 40 公式 by orzfly = =
死伤殆尽 + 110 还钱

查看全部评分

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
4 小时
注册时间
2011-10-16
帖子
81
2
发表于 2011-10-22 15:14:09 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
49
在线时间
172 小时
注册时间
2011-10-19
帖子
474
3
发表于 2011-10-22 15:20:54 | 只看该作者
貌似可以用事件做?

点评

嘛~虽然可能用不上~不过做成脚本别人就方便多了。  发表于 2011-10-22 15:28
fux要我写个脚本的 → → 别吐槽我去吐槽他  发表于 2011-10-22 15:26
我是SB
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
260
在线时间
611 小时
注册时间
2011-6-6
帖子
1335
4
发表于 2011-10-22 16:20:18 | 只看该作者
这东东不牵强的说真的可以用事件做成。。。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3657
在线时间
4466 小时
注册时间
2008-6-12
帖子
802
5
发表于 2011-10-22 17:28:26 | 只看该作者
嗯,虽然见过还是鼓励一下吧!
本人三无老人,请大神轻拍
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42344
在线时间
7599 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

6
发表于 2011-10-22 17:59:03 | 只看该作者
嗯,不错,就是设置还不太方便,不考虑用事件页设置飞行与行走的行走图么

点评

除了路线用脚本控制剩下都是事件本身设置的说  发表于 2011-10-22 18:02
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
75
在线时间
5 小时
注册时间
2007-6-21
帖子
16
7
发表于 2011-10-24 19:31:41 | 只看该作者
我很想知道如果用了固定路线的家伙,会不会受这个影响。

点评

恩,其实我知道我会说出来吗。算了其实我还真没看。  发表于 2011-10-24 19:51
请看范例,只有按照脚本要求设置的才会影响。  发表于 2011-10-24 19:43
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
4 小时
注册时间
2011-10-16
帖子
81
8
发表于 2011-10-28 12:20:28 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
295
在线时间
109 小时
注册时间
2011-3-23
帖子
348
9
发表于 2011-10-29 20:04:09 | 只看该作者
额,占沙发
回复 支持 反对

使用道具 举报

Lv2.观梦者

(?????)

梦石
0
星屑
728
在线时间
1327 小时
注册时间
2011-7-18
帖子
3184

贵宾

10
 楼主| 发表于 2011-11-3 05:44:08 | 只看该作者
本帖最后由 各种压力的猫君 于 2011-11-3 05:44 编辑
gamedev0001 发表于 2011-10-28 12:20
我想问一下那个小鸟的开关是怎么打开的?


已更新1.1,不需要开关了哦亲~
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 22:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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