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

Project1

 找回密码
 注册会员
搜索

求助~~XP版本加人物影子的脚本~~

查看数: 4138 | 评论数: 15 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2011-8-8 20:32

正文摘要:

RT 话说我在论坛上搜的都是VX版本的,我想要XP版本的~~大家帮帮忙啊~~

回复

步平凡 发表于 2011-8-12 20:09:06
Wind2010 发表于 2011-8-12 20:07
176和179行的两个4改成8

我改了,但是影子只显示一半

点评

好了,谢谢了!  发表于 2011-8-12 20:17
XD好吧我错了应该改@ch行而不是改@cw行  发表于 2011-8-12 20:13
@ch的不用改,只改有@cw的  发表于 2011-8-12 20:13
Wind2010 发表于 2011-8-12 20:07:25
步平凡 发表于 2011-8-9 07:21
我用的是天之痕的素材,不知这个影子能不能用

176和179行的两个4改成8
zhli667 发表于 2011-8-11 23:24:56
  1. #使用方法:不透明的物体在光源旁边会产生一个阴影。
  2. #所以,在光源的事件里面(例如火),请在第一页加上一个注释“s”(请不要带引号)
  3. #然后将此脚本命名为“人物阴影”插入到main上方即可。
  4. #==============================================================================
  5. # ■ 阴影精灵 (渐变精灵 )
  6. # 以 Genzai Kawakami的阴影脚本为基础,
  7. # Rataime为其重写和更新,
  8. # Boushy 为其添加附属功能
  9. # 精灵使者汉化
  10. # 过眼云烟修改,实现八方向八帧
  11. #==============================================================================
  12. CATERPILLAR_COMPATIBLE = true
  13. class Game_Party
  14. attr_reader :characters
  15. end
  16. class Sprite_Shadow < RPG::Sprite
  17. attr_accessor :character
  18. def initialize(viewport, character = nil,source = nil,anglemin=0,anglemax=0,distancemax=0)
  19. super(viewport)
  20. @anglemin=anglemin.to_f
  21. @anglemax=anglemax.to_f
  22. @distancemax=distancemax.to_f
  23. @character = character
  24. @source = source
  25. update
  26. end
  27. def update
  28. super
  29. if @tile_id != @character.tile_id or
  30. @character_name != @character.character_name or
  31. @character_hue != @character.character_hue
  32. @tile_id = @character.tile_id
  33. @character_name = @character.character_name
  34. @character_hue = @character.character_hue
  35. if @tile_id >= 384
  36. self.bitmap = RPG::Cache.tile($game_map.tileset_name,
  37. @tile_id, @character.character_hue)
  38. self.src_rect.set(0, 0, 32, 32)
  39. self.ox = 16
  40. self.oy = 32
  41. else
  42. self.bitmap = RPG::Cache.character(@character.character_name,
  43. @character.character_hue)
  44. @cw = bitmap.width / 8
  45. @ch = bitmap.height / 8
  46. self.ox = @cw / 2
  47. self.oy = @ch
  48. end
  49. end
  50. self.visible = (not @character.transparent)
  51. if @tile_id == 0
  52. sx = @character.pattern * @cw
  53. sy = (@character.direction - 2) / 2 * @ch
  54. if self.angle>90 or angle<-90
  55. if @character.direction== 6
  56. sy = ( 4- 2) / 2 * @ch
  57. end
  58. if @character.direction== 4
  59. sy = ( 6- 2) / 2 * @ch
  60. end
  61. if @character.direction== 2
  62. sy = ( 8- 2) / 2 * @ch
  63. end
  64. if @character.direction== 8
  65. sy = ( 2- 2) / 2 * @ch
  66. end
  67. end
  68. self.src_rect.set(sx, sy, @cw, @ch)
  69. end
  70. self.x = @character.screen_x
  71. self.y = @character.screen_y-5
  72. self.z = @character.screen_z(@ch)-1
  73. self.opacity = @character.opacity
  74. self.blend_type = @character.blend_type
  75. self.bush_depth = @character.bush_depth
  76. if @character.animation_id != 0
  77. animation = $data_animations[@character.animation_id]
  78. animation(animation, true)
  79. @character.animation_id = 0
  80. end
  81. @[email protected]
  82. @deltay= @source.y-self.y
  83. self.angle = 57.3*Math.atan2(@deltax, @deltay )
  84. @angle_trigo=self.angle+90
  85. if @angle_trigo<0
  86. @angle_trigo=360+@angle_trigo
  87. end
  88. self.color = Color.new(0, 0, 0)
  89. @distance = ((@deltax ** 2) + (@deltay ** 2))
  90. if$game_map.shadows==-1
  91. self.opacity = 0
  92. else
  93. self.opacity = 1200000/(@distance+6000)
  94. end
  95. @distance = @distance ** 0.5
  96. if @distancemax !=0 and @distance>=@distancemax
  97. self.opacity=0
  98. end
  99. if @anglemin !=0 or @anglemax !=0
  100. if (@angle_trigo<@anglemin or @angle_trigo>@anglemax) and @anglemin<@anglemax
  101. self.opacity=0
  102. end
  103. if (@angle_trigo<@anglemin and @angle_trigo>@anglemax) and @anglemin>@anglemax
  104. self.opacity=0
  105. end
  106. end
  107. end
  108. end
  109. #===================================================
  110. # ■ 重定义 Sprite_Character
  111. #===================================================
  112. class Sprite_Character < RPG::Sprite
  113. alias shadow_initialize initialize
  114. def initialize(viewport, character = nil)
  115. @character = character
  116. super(viewport)
  117. @ombrelist=[]
  118. if (character.is_a?(Game_Event) and character.list!=nil and character.list[0].code == 108 and character.list[0].parameters == ["s"])
  119. if (character.list[1]!=nil and character.list[1].code == 108)
  120. @anglemin=character.list[1].parameters[0]
  121. end
  122. if (character.list[2]!=nil and character.list[2].code == 108)
  123. @anglemax=character.list[2].parameters[0]
  124. end
  125. if (character.list[3]!=nil and character.list[3].code == 108)
  126. @distancemax=character.list[3].parameters[0]
  127. end
  128. for i in $game_map.events.keys.sort
  129. if ($game_map.events[i].is_a?(Game_Event) and $game_map.events[i].list!=nil and $game_map.events[i].list[0].code == 108 and $game_map.events[i].list[0].parameters == ["o"])
  130. @ombrelist[i+1] = Sprite_Shadow.new(viewport, $game_map.events[i],self,@anglemin,@anglemax,@distancemax)
  131. end
  132. end
  133. @ombrelist[1] = Sprite_Shadow.new(viewport, $game_player,self,@anglemin,@anglemax,@distancemax)
  134. #===================================================
  135. # ● 原装人物跟随兼容脚本
  136. #===================================================
  137. if CATERPILLAR_COMPATIBLE and $game_party.characters!=nil
  138. for member in $game_party.characters
  139. @ombrelist.push(Sprite_Shadow.new(viewport, member,self,@anglemin,@anglemax,@distancemax))
  140. end
  141. end
  142. #===================================================
  143. # ● 兼容脚本结束
  144. #===================================================
  145. end
  146. shadow_initialize(viewport, @character)
  147. end
  148. alias shadow_update update
  149. def update
  150. shadow_update
  151. if @ombrelist!=[]
  152. for i in [email protected]
  153. if @ombrelist[i]!=nil
  154. @ombrelist[i].update
  155. end
  156. end
  157. end
  158. end
  159. end
  160. #===================================================
  161. # ■ 新定义类Scene_Save
  162. #===================================================
  163. class Scene_Save < Scene_File
  164. alias shadows_write_save_data write_save_data
  165. def write_save_data(file)
  166. $game_map.shadows = nil
  167. shadows_write_save_data(file)
  168. end
  169. end
  170. #===================================================
  171. # ■ 新定义类 Game_Map
  172. #===================================================
  173. class Game_Map
  174. attr_accessor :shadows
  175. end
复制代码
步平凡 发表于 2011-8-9 07:21:07
我用的是天之痕的素材,不知这个影子能不能用
darkten 发表于 2011-8-8 21:45:12
http://rpg.blue/thread-95988-1-1.html
我反倒可以用...

我直接给你工程看看吧...
Project1.rar (188.14 KB, 下载次数: 28)
这是一个独立的脚本,并不需要其他的脚本做支援...

另外,这个脚本只有108行左右...那个出error的175行是哪里来的呢?
Wind2010 发表于 2011-8-8 21:43:11
步平凡 发表于 2011-8-8 21:29
我试的就是这个~~不能用

做了个范例,LZ看看吧
Project5.rar (195.42 KB, 下载次数: 72)

点评

我用的是八方向行走图,在地图上有两个影子,请问怎样解决?  发表于 2011-8-12 19:45
为什么还是不行?  发表于 2011-8-8 22:12
明白了~~谢了!  发表于 2011-8-8 21:49
Wind2010 发表于 2011-8-8 21:25:24
  1. #==================================================================================
  2. # ■ 太阳精灵(活动块)
  3. #------------------------------------------------------------------------------
  4. #    由阴影精灵(活动块)为基础
  5. #    由 Rataime 原创。
  6. #    由 DerVVulfman 重新编辑。
  7. #    由 Syvkal 改写为VX(精灵:应该有XP版本的吧。)
  8. #    由 Painhurt 进行修正。
  9. #    由 精灵使者 进行汉化并修正。
  10. #    2008年10月14日
  11. #------------------------------------------------------------------------------
  12. #
  13. #  介绍:
  14. #
  15. #  这个系统允许角色和所有“已经准备好的”事件在大地图上产生阴影。当角色四处移动的
  16. #  时候,将会出现由算法算出的像阳光照射一样的影子。当然,经过在事件页里特殊注释的
  17. #  事件也会同样产生影子。
  18. #  
  19. #------------------------------------------------------------------------------
  20. #
  21. # 使用方法:
  22. #
  23. #  -- 太阳
  24. #     想创建阳光效果的话,你必须要在地图上创建一个“太阳”的事件。在很多的场合之下
  25. #     ,这个事件的行走图肯定是空白的。你肯定不想“看”到太阳,是么?(精灵:太阳事
  26. #     件无论在任何位置,只要在地图内就可以了喵~当然,此事件不能加任何启动条件。)
  27. #
  28. #     想把这些事件的其中的一个当做太阳,那么你就必须在这个事件页里面添加一些东西。
  29. #     这些东西没有什么太多的,仅仅是一些注释而已。
  30. #
  31. #     你首先要添加的注释就是“begin Sun”请不要加引号。这个告诉了系统,这张地图要使
  32. #     使用太阳效果。剩下的两个值是可选项,而且在脚本里面有默认值(当然只加进了脚本里
  33. #     面)。当然,这些也可以加入作为注释。注意大小写,一定要符合要求。注:切记不能写
  34. #     在一起,每个注释一行。
  35. #
  36. #     begin Sun --- 启动太阳系统
  37. #     self_angle 数字 --- 每个影子的角度是多少。(0-360)
  38. #     self_opacity 数字 --- 影子的不透明度是多少。(0-255)
  39. #     书写格式举例:self_angle 90
  40. #
  41. #     然后,你的角色移动的时候就会自动产生影子了。
  42. #
  43. #  -- 其他事件
  44. #     事件不会知道他们如何才可以产生阴影。如果想让他们产生阴影的话,你只需要在此事件
  45. #     的的事件页里添加一段特殊的注释。这个注释仅仅是一个特殊短语“begin shadow”(再
  46. #     次注意,不要加引号)。请注意,产生阴影的优先级一定为“与角色相同”或者“上方”
  47. #     才可以产生阴影。注意有些事件如果处于在画面以上的优先级的情况之下,其影子会被遮
  48. #     掩,所以不要启用那些事件的阴影,切记。
  49. #
  50. #
  51. #------------------------------------------------------------------------------
  52. #
  53. # 更新日志:
  54. #
  55. #  1) 在脚本中增添了更人性化的标签和标题头。
  56. #  2) 在XPML模块里压缩了关键字分隔符和参数。
  57. #  3) 为了降低资源,将太阳产生的影子数组设成了实例变量。
  58. #  4) 与Near Fantastica 的人物跟随脚本兼容。
  59. #  5) 与Ccoa的人物跟随脚本兼容。
  60. #  6) 与Trickster的人物跟随脚本兼容。
  61. #  7) 在设定区段增加了默认的影子设定。
  62. #
  63. #==================================================================================



  64.    #========================================================================
  65.    #  ■      设       定       系        统          部       分       ■  #
  66.    #========================================================================
  67.     # 跟随系统部分设定(如果选用了相应的系统请选true,否则选false)
  68.     CATERPILLAR_COMPATIBLE      = true    # 原版跟随系统兼容开关  
  69.     SQUAD_MOVE_COMPATIBLE       = false   # Near Fantastica的跟随系统兼容开关
  70.     CCOA_CATER_COMPATIBLE       = false   # Ccoa的跟随系统兼容开关
  71.     TRICKSTER_CATER_COMPATIBLE  = false   # Trickster的跟随系统兼容开关
  72.    
  73.     # 太阳系统的特别设定
  74.     SUN_WARN                    = true    # 检查是否兼容老版本的太阳系统
  75.     SUN_ANGLE                   = 45      # 默认太阳系统产生的影子角度
  76.     SUN_OPACITY                 = 128     # 默认太阳系统产生的影子深度

  77.    
  78.    #========================================================================
  79.    #  ■■   设         定       部          分          结      束   ■■  #
  80.    #========================================================================
  81.   
  82.   

  83. #==================================================================================
  84. # ■ Game_Temp
  85. #------------------------------------------------------------------------------
  86. #  在没有存档的情况下,处理临时数据的类。这个类的实例请参考 $game_temp 。
  87. #=================================================================================
  88. class Game_Temp
  89.   #--------------------------------------------------------------------------
  90.   # ● 定义实例变量
  91.   #--------------------------------------------------------------------------
  92.   attr_accessor :sun_spriteset            # 维持太阳阴影的活动块
  93. end

  94. #==================================================================================
  95. # ■ Game_Party
  96. #------------------------------------------------------------------------------
  97. #  处理同伴的类。包含金钱以及物品的信息。本类的实例请参考 $game_party。
  98. #==================================================================================

  99. class Game_Party
  100.   #--------------------------------------------------------------------------
  101.   # ● 定义实例变量
  102.   #--------------------------------------------------------------------------
  103.   attr_reader :characters
  104. end



  105. #==================================================================================
  106. # ■ Sprite_Sun
  107. #------------------------------------------------------------------------------
  108. #  根据角色的地图位置来处理角色阴影角度的精灵(活动块)类。Game_Character 类的实例
  109. #  监视、活动块状态的自动变化。
  110. #==================================================================================

  111. class Sprite_Sun < RPG::Sprite
  112.   #--------------------------------------------------------------------------
  113.   # ● 定义实例变量
  114.   #--------------------------------------------------------------------------
  115.   attr_accessor :character         
  116.   #--------------------------------------------------------------------------
  117.   # ● 初始化对象
  118.   #     viewport  : 显示端口
  119.   #     character : 角色 (Game_Character)
  120.   #     id        : 角色ID
  121.   #--------------------------------------------------------------------------
  122.   def initialize(viewport, character = nil, id=0)
  123.     super(viewport)
  124.     @character = character
  125.     params=$game_temp.sun_spriteset.sun[id]
  126.     # 默认设置
  127.     self_angle    = SUN_ANGLE
  128.     self_opacity  = SUN_OPACITY
  129.     # 根据参数的设置
  130.     self_angle    = params[0]   if params.size > 0
  131.     self_opacity  = params[1]   if params.size > 1
  132.     @self_angle   = self_angle
  133.     @self_opacity = self_opacity
  134.     update
  135.   end
  136.   #--------------------------------------------------------------------------
  137.   # ● 更新画面
  138.   #--------------------------------------------------------------------------  
  139.   def update
  140.     super
  141.     # 在图块ID,文件名或者色相不同于当前的情况下
  142.     if @tile_id != @character.tile_id or
  143.        @character_name != @character.character_name or
  144.        @character_hue != @character.character_hue
  145.       @tile_id = @character.tile_id
  146.       @character_name = @character.character_name
  147.       @character_hue = @character.character_hue
  148.       if @tile_id > 0
  149.          sx = (@tile_id / 128 % 2 * 8 + @tile_id % 8) * 32;
  150.          sy = @tile_id % 256 / 8 % 16 * 32;
  151.           set_number = @tile_id / 256
  152.         self.bitmap = RPG::Cache.system("TileB") if set_number == 0
  153.         self.bitmap = RPG::Cache.system("TileC") if set_number == 1
  154.         self.bitmap = RPG::Cache.system("TileD") if set_number == 2
  155.         self.bitmap = RPG::Cache.system("TileE") if set_number == 3
  156.         self.src_rect.set(0, 0, 32, 32)
  157.         self.ox = 16
  158.         self.oy = 32
  159.       else
  160.        #self.bitmap =RPG::Cache.character(@character_name)#影子参数的对应修改
  161.        self.bitmap = RPG::Cache.character(@character.character_name,
  162.          @character.character_hue)
  163.         sign = @character_name[/^[\!\$]./]
  164.         if sign != nil and sign.include?('$')
  165.           @cw = bitmap.width / 4#影子的完整度设定
  166.           @ch = bitmap.height / 4#影子的完整度设定
  167.         else
  168.           @cw = bitmap.width / 4#影子的完整度设定
  169.           @ch = bitmap.height / 4#影子的完整度设定
  170.         end
  171.         self.ox = @cw / 2
  172.         self.oy = @ch
  173.       end
  174.     end
  175.     # 设置可见状况
  176.     self.visible = (not @character.transparent)
  177.     # 如果画面是角色的情况下
  178.     if @tile_id == 0
  179.       hue = @character.character_hue
  180.       pattern = @character.pattern < 3 ? @character.pattern : 1
  181.       # 矩形本体设定
  182.       sx = (hue % 4 * 3 + pattern) * @cw
  183.       @direct = @character.direction
  184.       if self.angle > 90 or angle < -90
  185.         sy = ( 4 - 2) / 2 * @ch                   if @direct == 6
  186.         sy = ( 6 - 2) / 2 * @ch                   if @direct == 4
  187.         sy = (@character.direction - 2) / 2 * @ch if @direct != 4 and @direct != 6
  188.       else
  189.         sy = (hue / 4 * 4 + (@character.direction - 2) / 2) * @ch
  190.        #sy = @character.direction
  191.       end
  192.       self.src_rect.set(sx, sy, @cw, @ch)
  193.     end
  194.     # 设置精灵(活动块)的坐标
  195.     self.x = @character.screen_x#  
  196.     self.y = @character.screen_y-5 #  
  197.      #self.z = 10#@character.screen_z-1
  198.      
  199.      self.z = @character.screen_z(@ch)-1#  
  200.     # 设置不透明度,合成方式和草木深度
  201.    self.opacity = @self_opacity
  202.    # self.opacity = @character.opacity#  
  203.     self.blend_type = @character.blend_type
  204.     self.bush_depth = @character.bush_depth
  205.     # 显示动画
  206.     if @character.animation_id != 0#  
  207.       animation = $data_animations[@character.animation_id]#  
  208.       animation(animation, true)#  
  209.       @character.animation_id = 0#  
  210.     end
  211.     self.angle = @self_angle.to_i - 90
  212.     self.color = Color.new(0, 0, 0)
  213.   #==========近大远小
  214.    $data_mapinfos      = load_data("Data/MapInfos.rxdata")
  215.    id = $game_map.map_id
  216.    name = $data_mapinfos[id].name
  217.    if name.include?("★")
  218.      rate =  @character.y.to_f / $game_map.height.to_f + 0.5 # ← 这个值是到达屏幕最上方时的人物比例 1.0为默认大小 最下方比例则为 1+这个值
  219.      self.zoom_x = self.zoom_y = rate
  220.    end
  221.   #===========
  222.     end
  223. end



  224. #==================================================================================
  225. # ■ Sprite_Character
  226. #------------------------------------------------------------------------------
  227. #  角色显示用脚本。监视 Game_Character 类的实例、自动变化脚本状态。
  228. #==================================================================================

  229. class Sprite_Character < RPG::Sprite
  230.   #--------------------------------------------------------------------------
  231.   # ● 重命名函数列表
  232.   #--------------------------------------------------------------------------  
  233.   alias sun_initialize initialize
  234.   alias sun_update update
  235.   #--------------------------------------------------------------------------
  236.   # ● 初始化对像
  237.   #     viewport  : 显示端口
  238.   #     character : 角色 (Game_Character)
  239.   #--------------------------------------------------------------------------
  240.   def initialize(viewport, character = nil)
  241.    #@viewport0 = Viewport.new(0, 0, 544, 416)
  242.     @viewport = Viewport.new(0, 0, 800, 600)#修改影子的行动范围,不做剪切
  243.      viewport.z = 0#战斗清除影子,地图切换清楚影子,改为1则有延迟
  244.     @character = character
  245.     super(viewport)
  246.     @sunlist=[]
  247.     if character.is_a?(Game_Event) and $game_temp.sun_spriteset.sun != []
  248.       params = XPML.XPML_read("Shadow", @character.id, 2)
  249.       if params != nil
  250.         for i in 0...$game_temp.sun_spriteset.sun.size
  251.           @sunlist.push(Sprite_Sun.new(viewport, @character, i))
  252.         end
  253.       end
  254.     end
  255.     if character.is_a?(Game_Player) and $game_temp.sun_spriteset.sun != []
  256.       for i in 0...$game_temp.sun_spriteset.sun.size
  257.         @sunlist.push(Sprite_Sun.new(viewport, $game_player, i))
  258.       end
  259.       #===================================================
  260.       # ● 与人物跟随功能兼容脚本
  261.       #===================================================
  262.       if CATERPILLAR_COMPATIBLE and $game_party.characters != nil
  263.         for member in $game_party.characters
  264.           for i in 0...$game_temp.sun_spriteset.sun.size
  265.             @sunlist.push(Sprite_Sun.new(viewport, member, i))
  266.           end
  267.         end
  268.       end
  269.       if SQUAD_MOVE_COMPATIBLE and $game_allies.values != nil
  270.         for member in $game_allies.values
  271.           for i in 0...$game_temp.sun_spriteset.sun.size
  272.             @sunlist.push(Sprite_Sun.new(viewport, member, i))
  273.           end
  274.         end
  275.       end
  276.       if CCOA_CATER_COMPATIBLE and $game_train.actors != nil
  277.         for member in $game_train.actors
  278.           for i in 0...$game_temp.sun_spriteset.sun.size
  279.             @sunlist.push(Sprite_Sun.new(viewport, member, i))
  280.           end
  281.         end
  282.       end
  283.       if TRICKSTER_CATER_COMPATIBLE and $game_party.followers != nil
  284.         for member in $game_party.followers
  285.           for i in 0...$game_temp.sun_spriteset.sun.size
  286.             @sunlist.push(Sprite_Sun.new(viewport, member, i))
  287.           end
  288.         end
  289.       end
  290.       #===================================================
  291.       # ● 兼容脚本结束
  292.       #===================================================      
  293.     end
  294.     # 执行原始函数调用
  295.     sun_initialize(viewport, @character)
  296.   end
  297.   #--------------------------------------------------------------------------
  298.   # ● 更新画面
  299.   #--------------------------------------------------------------------------
  300.   def update
  301.      
  302.     sun_update
  303.     if @sunlist != []
  304.       for i in [email protected]
  305.         @sunlist[i].update
  306.       end
  307.     end
  308.   end  
  309. end



  310. #==================================================================================
  311. # ■ Game_Event
  312. #------------------------------------------------------------------------------
  313. #  处理事件的类。条件判断、事件页的切换、并行处理、执行事件功能
  314. # 在 Game_Map 类的内部使用。
  315. #==================================================================================

  316. class Game_Event < Game_Character
  317.   #--------------------------------------------------------------------------
  318.   # ● 定义实例变量
  319.   #--------------------------------------------------------------------------
  320.   attr_accessor :id
  321. end




  322. #==================================================================================
  323. # ■ Spriteset_Map
  324. #------------------------------------------------------------------------------
  325. #  处理地图画面活动块和元件的类。本类在 Scene_Map 类的内部使用。
  326. #================================================================================

  327. class Spriteset_Map
  328.   #--------------------------------------------------------------------------
  329.   # ● 定义实例变量
  330.   #--------------------------------------------------------------------------  
  331.   attr_accessor :sun
  332.   #--------------------------------------------------------------------------
  333.   # ● 重命名函数列表
  334.   #--------------------------------------------------------------------------  
  335.   alias sun_initialize initialize
  336.   #--------------------------------------------------------------------------
  337.   # ● 初始化对象
  338.   #--------------------------------------------------------------------------   
  339.   def initialize
  340.     @sun = []
  341.     $game_temp.sun_spriteset = self
  342.     warn = false
  343.     for k in $game_map.events.keys.sort
  344.       if ($game_map.events[k].list != nil and
  345.           $game_map.events[k].list[0].code == 108 and
  346.           ($game_map.events[k].list[0].parameters == ["Sun"] or
  347.           $game_map.events[k].list[0].parameters == ["o"]))
  348.         warn = true
  349.       end
  350.       params = XPML.XPML_read("Sun", k, 2)
  351.       $game_temp.sun_spriteset.sun.push(params) if params != nil
  352.     end
  353.     if warn == true and SUN_WARN
  354.       p "警告:在地图上至少有一个事件使用了过去的方法来添加太阳效果"
  355.     end
  356.     # 执行原始函数调用
  357.     sun_initialize
  358.   end  
  359. end


  360. #==============================================================================
  361. # ■ module XPML
  362. #------------------------------------------------------------------------------
  363. #  本模块用来读取并传递注释中的参数。
  364. #
  365. #  使用此模块的主要用途就是检查和读出事件的注释。
  366. #  * 标记的关键字的注明方法:
  367. #    begin 关键字
  368. #  * 注意参数之间必须用关键字隔开。
  369. #  * 调用此函数的方法:
  370. #    XPML_read("关键字",事件ID,读取参数的最大值)
  371. #  * 最后一项可以忽略,默认为整个事件。
  372. #  * 赋值方法:
  373. #    变量名 参数
  374. #  * 每个变量名和参数各占一行。
  375. #  * 如果指明的关键字在事件里面不存在的话,则返回nil。
  376. #  * 如果两个标记之间没有参数的话,则返回空数组。
  377. #  * 如果参数中有数字参数的话,会自动返回为数字变量。
  378. #  举例:在一个事件中的注释写入(每个注释写一行,#号后面的不写)
  379. #       begin first # 第一关键字
  380. #       begin second #第二关键字
  381. #       变量1 1
  382. #       变量2 two
  383. #       begin third #第三关键字
  384. #       任何东西 3
  385. #  然后得出转换结果:
  386. #   p XPML_read("first", event_id) -> [] #第一关键字和第二关键字没有参数
  387. #   p XPML_read("second", event_id) -> [1,"two"] #第二关键字和第三关键字之间有2个参数
  388. #   p XPML_read("third", event_id) -> [3] #第三关键字之间有一个参数
  389. #   p XPML_read("forth", event_id) -> nil #找不到第四关键字则返回nil
  390. #===================================================

  391. module XPML
  392.   module_function
  393.   #--------------------------------------------------------------------------
  394.   # ● XPML_read
  395.   #     markup           : 需要在文件注释里检查的关键字。
  396.   #     event_id         : 事件ID
  397.   #     max_param_number : 读取参数/注释的最大值,0为事件内的所有注释
  398.   #--------------------------------------------------------------------------  
  399.   def XPML_read(markup, event_id, max_param_number = 0)
  400.     parameter_list = nil
  401.     event = $game_map.events[event_id]
  402.     return if event.list == nil
  403.       for i in 0...event.list.size
  404.         if event.list[i].code == 108 and
  405.           event.list[i].parameters[0].downcase == "begin " + markup.downcase
  406.           parameter_list = [] if parameter_list == nil
  407.           for j in i + 1...event.list.size
  408.             if event.list[j].code == 108
  409.               parts = event.list[j].parameters[0].split
  410.               if parts.size != 1 and parts[0].downcase != "begin"
  411.                 if parts[1].to_i != 0 or parts[1] == "0"
  412.                   parameter_list.push(parts[1].to_i)
  413.                 else
  414.                   parameter_list.push(parts[1])
  415.                 end
  416.               else
  417.                 return parameter_list
  418.               end
  419.             else
  420.               return parameter_list
  421.             end
  422.             if max_param_number != 0 and j == i + max_param_number
  423.               return parameter_list
  424.             end
  425.           end
  426.         end
  427.       end
  428.     return parameter_list
  429.   end
  430. end
复制代码
忧雪姐工程里的- -
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-5-6 09:16

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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