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

Project1

 找回密码
 注册会员
搜索
查看: 12191|回复: 21

[RMVX发布] [FSL][VX]萤火虫模拟 群居型(2010-08-27 更新 支持地图)

 关闭 [复制链接]

TA还没有解放自身的潜力。

Lv1.梦旅人

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

发表于 2008-11-28 06:18:40 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 沉影不器 于 2010-8-28 10:59 编辑

这个脚本...本来只是个普通的脚本...本来只是给title大赛写一个标题画面飘点萤火虫的脚本,然后总觉得随机飞啊飞的虫子总缺少一点生气,于是设定改成:
生成的几头萤火虫里有一个头领,头领随机飞行,遇边按照界反射飞回来;其它虫子在一定距离里(100像素内)会追随它,如果超过该范围也会自主飞行...


未命名.JPG
  1. #===============================================================================
  2. # ■ 萤火虫模拟
  3. #    Fireflies_Simulation
  4. #-------------------------------------------------------------------------------
  5. # 地图上开启萤火虫的方法: 执行事件脚本 $scene.fireflies(数量)
  6. # 关闭的方法是: $scene.fireflies(0)
  7. #
  8. # 其它scene类的开启同样执行该scene对象的 fireflies(数量)
  9. #-------------------------------------------------------------------------------
  10. #    更新作者: 沉影不器
  11. #    许可协议: FSL
  12. #    项目版本: 1.02.0827
  13. #    引用网址: http://rpg.blue/thread-111137-1-2.html
  14. #-------------------------------------------------------------------------------
  15. #    - *1.02.0827 *  By 沉影不器
  16. #      * 使用FSL协议
  17. #
  18. #    - *1.01.0108 *  By 沉影不器
  19. #      * 允许使用地图模式(否则为屏幕模式),即萤火虫相对整个地图坐标活动
  20. #      * 允许自定义萤火虫的初始化区域
  21. #      * 增加闪烁参数
  22. #
  23. #    - *1.00.1128 *  By 沉影不器
  24. #      * 初版
  25. #===============================================================================
  26. $fscript = {} if $fscript == nil
  27. $fscript["Fireflies_Simulation"] = "1.02.0827"
  28. #-------------------------------------------------------------------------------
  29. # ▼ 通用配置模块
  30. #-------------------------------------------------------------------------------
  31. module FSL
  32.   module Fireflies_Simulation
  33.     PicName      = "firefly"        # 图片名
  34.     Opacity      = 255              # 不透明度
  35.     Speed        = 5                # 移动速度
  36.     CYC          = 120              # 群体分散度
  37.     Disperse     = 5                # 个体分散度
  38.     BlendType    = 1                # 合成方式(0:正常 1:加法 2:减法)
  39.     LeaderEnable = true             # 允许头领带队
  40.     MapMode      = true             # 开启地图模式(地图当坐标,否则屏幕当坐标)
  41.     Sparkle      = 80               # 闪烁值(0-100; 0:关闭闪烁)
  42.     IniRect      = []               # 初始化萤火虫的区域[x,y,width,height]
  43.                                     #   * 两个元素表示用坐标点做区域
  44.                                     #   * 放空默认使用屏幕或全地图做区域
  45.                                     #     该参数受MapMode影响
  46.   end
  47. end
  48. #==============================================================================
  49. # □ Game_Firefly
  50. #==============================================================================
  51. class Game_Firefly
  52.   include FSL::Fireflies_Simulation
  53.   #--------------------------------------------------------------------------
  54.   # ○ 实例变量
  55.   #--------------------------------------------------------------------------
  56.   attr_reader   :id                  # ID
  57.   attr_reader   :x                   # X 坐标
  58.   attr_reader   :y                   # Y 坐标
  59.   attr_reader   :z                   # Z 坐标
  60.   attr_reader   :angle               # 角度 (0~360) ### 图像旋转预留
  61.   attr_reader   :blend_type          # 合成方式
  62.   attr_reader   :pic_name  
  63.   attr_reader   :opacity
  64.   attr_accessor :leader_id           # 头领id
  65.   #--------------------------------------------------------------------------
  66.   # ○ 初始化对象
  67.   #--------------------------------------------------------------------------
  68.   def initialize(id)
  69.     @id = id
  70.     @w,@h = set_rect
  71.     @x,@y = rand_pos
  72.     @angle = rand(360)
  73.     @z = 199
  74.     @angle = 0
  75.     @opacity = Opacity
  76.     @leader_id = 0
  77.     @pic_name = PicName
  78.     @blend_type = BlendType
  79.     ## 百分比*10
  80.     @speed = Speed/100.0
  81.     ## 是否头领
  82.     @leader = @id == @leader_id
  83.     ## 群体分散计数器
  84.     @move_count = 0
  85.   end
  86.   #--------------------------------------------------------------------------
  87.   # ○ 是否地图模式?
  88.   #--------------------------------------------------------------------------
  89.   def map_type?
  90.     return (MapMode and $scene.is_a? Scene_Map)
  91.   end
  92.   #--------------------------------------------------------------------------
  93.   # ○ 活动范围
  94.   #--------------------------------------------------------------------------
  95.   def set_rect
  96.     if map_type?
  97.       return $game_map.width*256,$game_map.height*256
  98.     else
  99.       return Graphics.width,Graphics.height
  100.     end
  101.   end
  102.   #--------------------------------------------------------------------------
  103.   # ○ 打散
  104.   #--------------------------------------------------------------------------
  105.   def rand_pos
  106.     case IniRect.size
  107.     when 1
  108.       return rand(IniRect[0]),rand(IniRect[0])
  109.     when 2
  110.       return rand(IniRect[0]),rand(IniRect[1])
  111.     when 3
  112.       return [IniRect[0]+rand(IniRect[2]),IniRect[1]+rand(IniRect[2])]
  113.     when 4
  114.       return [IniRect[0]+rand(IniRect[2]),IniRect[1]+rand(IniRect[3])]
  115.     else
  116.       return rand(@w),rand(@h)
  117.     end
  118.   end
  119.   #--------------------------------------------------------------------------
  120.   # ○ 自主移动
  121.   #--------------------------------------------------------------------------
  122.   def self_move
  123.     ## 方向转换角度范围(-15..15)
  124.     @angle += (-1)**(rand(2)+1) * rand(15)
  125.     ## 角度转弧度
  126.     rad = (@angle * Math::PI) / 180
  127.     speed = (100.0-rand(Disperse)) * @speed
  128.     dx = Math.cos(rad) * speed
  129.     dy = Math.sin(rad) * speed
  130.     @x += dx
  131.     @y += dy
  132.     ## 转向
  133.     turn_around(dx, dy)
  134.   end
  135.   #--------------------------------------------------------------------------
  136.   # ○ 跟随移动
  137.   #--------------------------------------------------------------------------
  138.   def follow_move
  139.     ## 超出距离时自主移动
  140.     if distance > 150**2
  141.       self_move
  142.       return
  143.     end
  144.     ## 群体分散
  145.     if @move_count < 0
  146.       @move_count = CYC
  147.       rx = leader.x - @x
  148.       ry = leader.y - @y
  149.       @angle = Math.atan2(ry,rx)*180 / Math::PI
  150.       ## 打散
  151.       @angle += rand(60) * ((-1)**(rand(2)+1))
  152.     else
  153.       @move_count -= rand(Disperse)
  154.       ## 方向转换角度范围(-30..30)
  155.       @angle += rand(15) * ((-1)**(rand(2)+1))
  156.     end
  157.     ###@angle = rad*180 / Math::PI
  158.     ## 角度转弧度
  159.     rad = (@angle * Math::PI) / 180
  160.     speed = (rand(Disperse)+100.0) * @speed
  161.     dx = Math.cos(rad) * speed
  162.     dy = Math.sin(rad) * speed
  163.     @x += dx
  164.     @y += dy
  165.   end
  166.   #--------------------------------------------------------------------------
  167.   # ○ 活动类型
  168.   #--------------------------------------------------------------------------
  169.   def update_active_type
  170.     return if Sparkle.zero?
  171.     @opacity = Opacity - Opacity * rand(Sparkle) / 100.0
  172.   end
  173.   #--------------------------------------------------------------------------
  174.   # ○ 转向
  175.   #--------------------------------------------------------------------------
  176.   def turn_around(dx, dy)
  177.     if @x <= 0 && dx < 0 or @x >= @w && dx > 0
  178.       @angle = Math.atan2(dy,-dx)*180 / Math::PI
  179.       @x -= dx
  180.       ## 角度转弧度
  181.       rad = (@angle * Math::PI) / 180
  182.       speed = (rand(Disperse)+100.0) * @speed
  183.       new_dx = Math.cos(rad) * speed
  184.       new_dy = Math.sin(rad) * speed
  185.       @x += new_dx
  186.       @y += new_dy
  187.     elsif @y <= 0 && dy < 0 or @y >= @h && dy > 0
  188.       @angle = Math.atan2(-dy,dx)*180 / Math::PI
  189.       @y -= dy
  190.       ## 角度转弧度
  191.       rad = (@angle * Math::PI) / 180
  192.       speed = (rand(Disperse)+100.0) * @speed
  193.       new_dx = Math.cos(rad) * speed
  194.       new_dy = Math.sin(rad) * speed
  195.       @x += new_dx
  196.       @y += new_dy
  197.     end
  198.   end
  199.   #--------------------------------------------------------------------------
  200.   # ○ 距离判断 (返回值: 与头领的距离**2)
  201.   #--------------------------------------------------------------------------
  202.   def distance
  203.     if map_type?
  204.       result = (screen_x-leader.screen_x)**2 + (screen_y-leader.screen_y)**2
  205.     else
  206.       result = (@x-leader.x)**2 + (@y-leader.y)**2
  207.     end
  208.     return result
  209.   end
  210.   #--------------------------------------------------------------------------
  211.   # ○ 跟随对象
  212.   #--------------------------------------------------------------------------
  213.   def leader
  214.     return $game_fireflies[0]
  215.   end
  216.   #--------------------------------------------------------------------------
  217.   # ○ 是否跟随对象(头领)?
  218.   #--------------------------------------------------------------------------
  219.   def leader?
  220.     return @leader
  221.   end
  222.   #--------------------------------------------------------------------------
  223.   # ○ 判断坐标一致
  224.   #     x : X 坐标
  225.   #     y : Y 坐标
  226.   #--------------------------------------------------------------------------
  227.   def pos?(x, y)
  228.     return (@x == x and @y == y)
  229.   end
  230.   #--------------------------------------------------------------------------
  231.   # ○ 刷新
  232.   #--------------------------------------------------------------------------
  233.   def update
  234.     if !LeaderEnable or !leader?
  235.       follow_move
  236.     else
  237.       self_move
  238.     end
  239.     ## 处理活动类型
  240.     update_active_type
  241.   end
  242.   #--------------------------------------------------------------------------
  243.   # ● 获取画面 X 坐标
  244.   #--------------------------------------------------------------------------
  245.   def screen_x
  246.     return ($game_map.adjust_x(@x) + 8007) / 8 - 1000 + 16
  247.   end
  248.   #--------------------------------------------------------------------------
  249.   # ● 获取画面 Y 坐标
  250.   #--------------------------------------------------------------------------
  251.   def screen_y
  252.     return ($game_map.adjust_y(@y) + 8007) / 8 - 1000 + 32
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # ● 获取画面 Z 坐标
  256.   #--------------------------------------------------------------------------
  257.   def screen_z
  258.     if @priority_type == 2
  259.       return 200
  260.     elsif @priority_type == 0
  261.       return 60
  262.     elsif @tile_id > 0
  263.       pass = $game_map.passages[@tile_id]
  264.       if pass & 0x10 == 0x10    # [☆]
  265.         return 160
  266.       else
  267.         return 40
  268.       end
  269.     else
  270.       return 100
  271.     end
  272.   end
  273. end

  274. #==============================================================================
  275. # □ Sprite_Firefly
  276. #==============================================================================
  277. class Sprite_Firefly < Sprite_Base
  278.   #--------------------------------------------------------------------------
  279.   # ○ 初始化对象
  280.   #     firefly   : 萤火虫数据实例
  281.   #     viewport  : 视区
  282.   #--------------------------------------------------------------------------
  283.   def initialize(firefly, viewport = nil)
  284.     super(viewport)
  285.     @firefly = firefly
  286.     self.bitmap = Cache.system(@firefly.pic_name)
  287.     ###self.bitmap = Cache.system('firefly_head') if @firefly.leader?
  288.     self.ox = self.width/2
  289.     self.oy = self.height/2
  290.     self.z = @firefly.z
  291.     update
  292.   end
  293.   #--------------------------------------------------------------------------
  294.   # ○ 释放
  295.   #--------------------------------------------------------------------------
  296.   def dispose
  297.     super
  298.   end
  299.   #--------------------------------------------------------------------------
  300.   # ○ 更新
  301.   #--------------------------------------------------------------------------
  302.   def update
  303.     super
  304.     @firefly.update
  305.     if @firefly.map_type?
  306.       self.x = @firefly.screen_x
  307.       self.y = @firefly.screen_y
  308.     else
  309.       self.x = @firefly.x
  310.       self.y = @firefly.y
  311.     end
  312.     self.opacity = @firefly.opacity
  313.     self.blend_type = @firefly.blend_type
  314.   end
  315. end

  316. #==============================================================================
  317. # ■ Scene_Base
  318. #==============================================================================
  319. class Scene_Base
  320.   #--------------------------------------------------------------------------
  321.   # ○ 生成萤火虫
  322.   #     num  :数量
  323.   #--------------------------------------------------------------------------
  324.   def fireflies(num)
  325.     # 小等于零时释放
  326.     dispose_firefly if num <= 0
  327.     # 生成实例
  328.     $game_fireflies = []
  329.     for i in 0...num
  330.       $game_fireflies << Game_Firefly.new(i)
  331.     end
  332.     # 生成sprite
  333.     @firefly_sprites = []
  334.     for i in $game_fireflies
  335.       @firefly_sprites << Sprite_Firefly.new(i)
  336.     end
  337.   end
  338.   #--------------------------------------------------------------------------
  339.   # ○ 刷新萤火虫
  340.   #--------------------------------------------------------------------------
  341.   def update_firefly
  342.     return if @firefly_sprites == nil
  343.     for sprite in @firefly_sprites
  344.       sprite.update
  345.     end
  346.   end
  347.   #--------------------------------------------------------------------------
  348.   # ○ 释放萤火虫
  349.   #--------------------------------------------------------------------------
  350.   def dispose_firefly
  351.     return if @firefly_sprites == nil
  352.     for sprite in @firefly_sprites
  353.       sprite.dispose
  354.     end
  355.     @firefly_sprites = []
  356.   end
  357.   #--------------------------------------------------------------------------
  358.   # ◎ 更新画面
  359.   #--------------------------------------------------------------------------
  360.   def update
  361.     update_firefly
  362.   end
  363.   #--------------------------------------------------------------------------
  364.   # ◎ 结束处理
  365.   #--------------------------------------------------------------------------
  366.   def terminate
  367.     dispose_firefly
  368.   end
  369. end
复制代码


    - *1.02.0827 *  By 沉影不器
      * 使用FSL协议


    - *1.01.0108 *  By 沉影不器
      * 允许使用地图模式(否则为屏幕模式),即萤火虫相对整个地图坐标活动
      * 允许自定义萤火虫的初始化区域
      * 增加闪烁参数


    - *1.00.1128 *  By 沉影不器
      * 初版




>>测试工程下载(2010-08-27 更新)<<

阿桑奇不是一个偶像;阿桑奇是一种思想

TA还没有解放自身的潜力。

Lv1.梦旅人

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

 楼主| 发表于 2008-11-28 06:25:16 | 显示全部楼层
其实根本不晓得萤火虫是不是这习性来着...算了...

阿桑奇不是一个偶像;阿桑奇是一种思想

回复 支持 反对

使用道具 举报

TA还没有解放自身的潜力。

Lv1.梦旅人

天仙

梦石
0
星屑
55
在线时间
184 小时
注册时间
2008-4-15
帖子
5023

贵宾

发表于 2008-11-28 08:42:43 | 显示全部楼层
呵呵,把头领改成满头包,把後面的萤火虫改成蜜蜂,那就......很适合了{/gg}

点评

哦呵呵呵~好可爱的想法o(∩_∩)o  发表于 2010-8-24 15:33
VA脚本开工中...
偷窃脚本1.0 - 已完成
回复 支持 反对

使用道具 举报

TA还没有解放自身的潜力。

Lv1.梦旅人

kissye的宠物<

梦石
0
星屑
49
在线时间
1562 小时
注册时间
2008-8-11
帖子
6177

贵宾

发表于 2008-11-28 17:11:48 | 显示全部楼层
建意沉影去看宫琦峻的《消失的萤火虫》,情节非常感人,一举两得>_<
回复 支持 反对

使用道具 举报

TA还没有解放自身的潜力。

Lv1.梦旅人

梦石
0
星屑
50
在线时间
3163 小时
注册时间
2005-10-22
帖子
5471

开拓者贵宾

发表于 2008-11-29 01:11:14 | 显示全部楼层
其实也算粒子效果-_-0
Ascension draws near.
回复 支持 反对

使用道具 举报

TA还没有解放自身的潜力。

Lv1.梦旅人

彼女たちの流儀

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-9-30
帖子
519

第1届Title华丽大赛季军

发表于 2008-11-29 01:19:03 | 显示全部楼层
让这些光点随时都有消失,随时都有出现,这就华丽了。
http://rpg.blue/upload_program/d/英仙座_鸟羽莉2_113517825.png[color=#D52B4D]これから、さよなら。[url=http://hi.baidu.com/lovemaeve]http://hi.baidu.com/lovemaeve[/url][/color]
回复 支持 反对

使用道具 举报

[动态]受到ekmomo的挑战,被揍得晕头转向。 (打开TA的战斗卡片)

Lv3.寻梦者 (暗夜天使)

名侦探小柯

梦石
0
星屑
2156
在线时间
3544 小时
注册时间
2006-9-6
帖子
37348

开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

发表于 2008-11-29 01:54:37 | 显示全部楼层
以下引用英仙座于2008-11-28 17:19:03的发言:

让这些光点随时都有消失,随时都有出现,这就华丽了。

的确啊,
似乎动画片里萤火虫也都是这样亮光的。
Lofter个站:点击进入吧 不要犹豫了come on baby! (闲水、游戏预告、游戏发布)

回复 支持 反对

使用道具 举报

TA还没有解放自身的潜力。

Lv1.梦旅人

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-7-8
帖子
466
发表于 2008-11-29 09:28:26 | 显示全部楼层
怎么不直接做成Title去参加大赛呢-0-
不过小声说,为什么我的第一反应这些好像蠕虫类,起鸡皮疙瘩了T T
回复 支持 反对

使用道具 举报

TA还没有解放自身的潜力。

Lv1.梦旅人

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

 楼主| 发表于 2008-11-29 18:37:18 | 显示全部楼层
原来改成全地图范围飞行不是很复杂...倒是参数同时兼容全屏幕和全地图两个范围很头疼{/fd}
好像做数据平衡一样烦人{/fd}



以下引用snstar2006于2008-11-28 0:42:43的发言:呵呵,把头领改成满头包,把後面的萤火虫改成蜜蜂,那就......很适合了


[本贴由作者于 2008-11-28 0:45:31 最后编辑]
真的可以,预留的@angle就是这用途,只要有蜂的行走图

以下引用木葬枫于2008-11-28 9:11:48的发言:建意沉影去看宫琦峻的《消失的萤火虫》,情节非常感人,一举两得>_<
宫崎老师成名作应该说都看过不止一遍...确实想用宫崎老师的《萤火虫之墓》弄个title...这作品译名还真多

以下引用英仙座于2008-11-28 17:19:03的发言:让这些光点随时都有消失,随时都有出现,这就华丽了。

可以一试,希望调参数不会太麻烦{/fd}

阿桑奇不是一个偶像;阿桑奇是一种思想

回复 支持 反对

使用道具 举报

[动态]受到amzn91的挑战,被揍得晕头转向。 (打开TA的战斗卡片)

Lv3.寻梦者

贝鲁耶的依叶森林
持镰的苍色水野

梦石
2
星屑
349
在线时间
540 小时
注册时间
2007-4-8
帖子
1300

第4届短篇游戏比赛季军短篇八RM组亚军

发表于 2008-11-29 22:31:38 | 显示全部楼层
额    加在标题上要怎么做呢  {/gg}
------------------------------
啊……还有,那个萤火虫的动画我看了……
非常感人……
我看的译名是《再见萤火虫》……
译名的确很多……  - -!
水野的主页><
头像来自于游戏《龙背上的骑兵3》主角——Zero
回复 支持 反对

使用道具 举报

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

本版积分规则

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

站长信箱:fux2@moe9th.com|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2019-3-20 18:56

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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