Project1

标题: 类似英雄传说的明雷遇敌。。。 [打印本页]

作者: eva2914771    时间: 2012-9-23 12:42
标题: 类似英雄传说的明雷遇敌。。。
本帖最后由 eva2914771 于 2012-9-25 22:10 编辑

就像ARPG游戏那样怪物在地图上乱跑。。怪物看见你后去追赶你。追上你然后进入战斗。。。在之前想弄一个明敌遇敌的小游戏。。可在网上木有找到相关的教程。。只找到了一个怪物视野的脚本(脚本不是我编的!是在论坛里找的。。),我就用这个脚本自己捣鼓了一下。。。。作了个用起来又笨又复杂的事件。。。由于脚本的缘故游戏所有事件的独立开关D不能随便使用了。。。至于怎么弄本人是第一次发帖,口才也不是很好所以直接上图。。。1.先打开开关设置好开关
范例地址!:http://www.rayfile.com/files/4c4cb900-0704-11e2-bd34-0015c55db73d/
作者: eva2914771    时间: 2012-9-23 12:48
本帖最后由 eva2914771 于 2012-9-23 13:30 编辑

开始设置怪物事件第一页

作者: eva2914771    时间: 2012-9-23 13:11
本帖最后由 eva2914771 于 2012-9-23 13:35 编辑

第二页。。。事件开始条件要选自动执行。。

作者: eva2914771    时间: 2012-9-23 13:33
第三页。。。

作者: eva2914771    时间: 2012-9-23 13:36
本帖最后由 eva2914771 于 2012-9-23 13:40 编辑

第四页。。

4.5.JPG (142.65 KB, 下载次数: 33)

4.5.JPG

作者: eva2914771    时间: 2012-9-23 13:40
本帖最后由 eva2914771 于 2012-9-23 13:44 编辑

第五页

5.5.JPG (140.81 KB, 下载次数: 29)

5.5.JPG

作者: eva2914771    时间: 2012-9-23 13:45
依然是第五页。。。
作者: eva2914771    时间: 2012-9-23 13:47
本帖最后由 eva2914771 于 2012-9-23 13:49 编辑

第六页。。。。


作者: eva2914771    时间: 2012-9-23 13:50
本帖最后由 eva2914771 于 2012-9-23 14:16 编辑

最后的第七页。。。。

作者: eva2914771    时间: 2012-9-23 13:53
本帖最后由 eva2914771 于 2012-9-23 13:57 编辑

怪物设置完成后。。。开始设置在地图传送点刷新怪物的事件。。

作者: eva2914771    时间: 2012-9-23 13:55
本帖最后由 eva2914771 于 2012-9-23 13:57 编辑

然后。。。。。

作者: eva2914771    时间: 2012-9-23 13:59
最后效果。。。

作者: eva2914771    时间: 2012-9-23 14:01
还有就是要用到的脚本。。。这个脚本连接我找不到了。。。就在这发下好了。。
  1. #==============================================================================
  2. # ■ LCF_Leyeshot (linetype eyeshot)XP 2.1 Creator LCF Date 2008.11.3
  3. #------------------------------------------------------------------------------
  4. #  线形视野系统 编者:流川枫 QQ:350773875
  5. #==============================================================================
  6. #【使用说明】
  7. #------------------------------------------------------------------------------
  8. # 视野系统开关 $game_map.events[@event_id].le_seeing = true/false
  9. # 功能:该值为true表示该NPC视野开启,否则未开启,默认为false。
  10. #------------------------------------------------------------------------------
  11. # 视野透视开关 $game_map.events[@event_id].le_clairv = true/false
  12. # 功能:该值为true表示该NPC视野不扫描视线障碍,否则扫描,默认为false。
  13. #------------------------------------------------------------------------------
  14. # 视线显示开关 $game_map.events[@event_id].le_show = true/false
  15. # 功能:该值为true表示显示该NPC的视线,否则不显示,默认为false。
  16. #------------------------------------------------------------------------------
  17. # 侧面可视开关 $game_map.events[@event_id].le_side = true/false
  18. # 功能:该值为true表示该NPC可以看到侧面一格内的人,否则由斜率决定,默认为true。
  19. #------------------------------------------------------------------------------
  20. # 视野环绕开关 $game_map.events[@event_id].le_circle = true/false
  21. # 功能:该值为true表示该NPC为环绕视野,否则不能看见自己的身后,默认为false。
  22. #------------------------------------------------------------------------------
  23. # 设置视野深度 $game_map.events[@event_id].le_deepness = 深度值
  24. # 功能:该值代表视野的能见度,默认为7。
  25. #------------------------------------------------------------------------------
  26. # 设置视野斜率 $game_map.events[@event_id].le_slope = 斜率值
  27. # 功能:该值代表视野的斜率,默认为1.0。
  28. #------------------------------------------------------------------------------
  29. # 设置显示颜色 $game_map.events[@event_id].le_color = 颜色值
  30. # 功能:该值代表视线显示的颜色,默认为0xf0。
  31. #==============================================================================
  32. # 当NPC看到主角的时候,独立开关D会被打开,否则为关闭状态。
  33. #==============================================================================

  34. #==============================================================================
  35. # ■ Game_Event
  36. #------------------------------------------------------------------------------
  37. #  重载事件类
  38. #==============================================================================
  39. class Game_Event
  40. attr_accessor :le_seeing # 视野系统开关
  41. attr_accessor :le_clairv # 视野透视开关
  42. attr_accessor :le_show # 视线显示开关
  43. attr_accessor :le_side # 侧面可视开关
  44. attr_accessor :le_circle # 视野环绕开关
  45. attr_accessor :le_deepness # 视野深度
  46. attr_accessor :le_slope # 视野斜率
  47. attr_accessor :le_color # 显示颜色
  48. #--------------------------------------------------------------------------
  49. # ● 初始化对像
  50. # map_id : 地图 ID
  51. # event : 事件 (RPG::Event)
  52. #--------------------------------------------------------------------------
  53. alias original_initialize initialize
  54. def initialize (map_id, event)
  55. original_initialize (map_id, event)
  56. @le_seeing = true
  57. @le_clairv = false
  58. @le_show = false
  59. @le_side = true
  60. @le_circle = false
  61. @le_deepness = 7
  62. @le_slope = 1.0
  63. @le_color = 0xf0
  64. @trace = Table.new (@le_deepness,2)
  65. @trace[0,0] = -1
  66. end
  67. #--------------------------------------------------------------------------
  68. # ● 刷新
  69. #--------------------------------------------------------------------------
  70. alias original_update update
  71. def update
  72. if @le_seeing
  73. @trace.resize (@le_deepness,2) if @trace.xsize != @le_deepness
  74. original_switch = $game_self_switches[[$game_map.map_id, @id, "D"]]
  75. self.see
  76. $game_map.need_refresh = true if original_switch != $game_self_switches[[$game_map.map_id, @id, "D"]]
  77. end
  78. original_update
  79. end
  80. #--------------------------------------------------------------------------
  81. # ● 视野检测
  82. #--------------------------------------------------------------------------
  83. def see
  84. $game_self_switches[[$game_map.map_id, @id, "D"]] = false
  85. if ($game_player.x-@x).abs<@le_deepness and ($game_player.y-@y).abs<@le_deepness
  86. difference_x = $game_player.x - @x
  87. difference_y = $game_player.y - @y
  88. case @direction
  89. when 2
  90. return if @le_circle != true and $game_player.y < @y
  91. unless @le_side and (difference_y == 0 and difference_x.abs == 1)
  92. return if (difference_y/(difference_x+0.0)).abs < @le_slope
  93. end
  94. when 4
  95. return if @le_circle != true and $game_player.x > @x
  96. unless @le_side and difference_y.abs == 1 and difference_x == 0
  97. return if (difference_x/(difference_y+0.0)).abs < @le_slope
  98. end
  99. when 6
  100. return if @le_circle != true and $game_player.x < @x
  101. unless @le_side and difference_y.abs == 1 and difference_x == 0
  102. return if (difference_x/(difference_y+0.0)).abs < @le_slope
  103. end
  104. else
  105. return if @le_circle != true and $game_player.y > @y
  106. unless @le_side and difference_y == 0 and difference_x.abs == 1
  107. return if (difference_y/(difference_x+0.0)).abs < @le_slope
  108. end
  109. end
  110. $game_self_switches[[$game_map.map_id, @id, "D"]] = scan_line
  111. end
  112. end
  113. #--------------------------------------------------------------------------
  114. # ● 视线检测
  115. #--------------------------------------------------------------------------
  116. def scan_line
  117. difference_x = $game_player.x - @x
  118. difference_y = $game_player.y - @y
  119. direction_x = (difference_x > 0 ? 1 : -1)
  120. direction_y = (difference_y > 0 ? 1 : -1)
  121. i = 0
  122. if difference_x.abs > difference_y.abs
  123. while difference_x.abs > i+1
  124. i+=1
  125. x = @x+i*direction_x
  126. if direction_y>0
  127. y = @y+i*difference_y/(difference_x+0.0)*direction_y*direction_x+0.5
  128. else
  129. y = @y-i*difference_y/(difference_x+0.0)*direction_y*direction_x+0.5
  130. end
  131. x = x.floor
  132. y = y.floor
  133. if @le_clairv != true
  134. unless (direction_x > 0 ? passable?(x-1,y,6) : passable?(x+1,y,4))
  135. @trace[i-1,0] = -1
  136. return false
  137. end
  138. end
  139. if @le_show
  140. @trace[i-1,0] = x
  141. @trace[i-1,1] = y
  142. $scene.spriteset.tilemap.flash_data[x,y] = @le_color
  143. end
  144. end
  145. else
  146. while difference_y.abs > i+1
  147. i+=1
  148. y = @y+i*direction_y
  149. if direction_x>0
  150. x = @x+i*difference_x/(difference_y+0.0)*direction_x*direction_y+0.5
  151. else
  152. x = @x-i*difference_x/(difference_y+0.0)*direction_x*direction_y+0.5
  153. end
  154. x = x.floor
  155. y = y.floor
  156. if @le_clairv != true
  157. unless (direction_y > 0 ? passable?(x,y-1,2) : passable?(x,y+1,8))
  158. @trace[i-1,0] = -1
  159. return false
  160. end
  161. end
  162. if @le_show
  163. @trace[i-1,0] = x
  164. @trace[i-1,1] = y
  165. $scene.spriteset.tilemap.flash_data[x,y] = @le_color
  166. end
  167. end
  168. end
  169. return true
  170. end
  171. #--------------------------------------------------------------------------
  172. # ● 清楚痕迹
  173. #--------------------------------------------------------------------------
  174. def clear
  175. for i in 0 .. @trace.xsize-1
  176. break if @trace[i,0] == -1
  177. $scene.spriteset.tilemap.flash_data[@trace[i,0],@trace[i,1]] = 0
  178. end
  179. @trace[0,0] = -1
  180. end
  181. end
  182. #==============================================================================
  183. # ■ Spriteset_Map
  184. #------------------------------------------------------------------------------
  185. # 重载地图显示
  186. #==============================================================================
  187. class Spriteset_Map
  188. attr_reader:tilemap
  189. alias :original_ini :initialize
  190. def initialize
  191. original_ini
  192. @tilemap.flash_data=Table.new(@tilemap.map_data.xsize,@tilemap.map_data.ysize)
  193. end
  194. end
  195. #==============================================================================
  196. # ■ Scene_Map
  197. #------------------------------------------------------------------------------
  198. # 重载地图场景
  199. #==============================================================================
  200. class Scene_Map
  201. attr_reader:spriteset
  202. end
  203. #==============================================================================
  204. # ■ Game_Map
  205. #------------------------------------------------------------------------------
  206. #  重载地图类
  207. #==============================================================================
  208. class Game_Map
  209. alias original_update update
  210. def update
  211. # 清除视线痕迹
  212. for event in @events.values
  213. event.clear
  214. end
  215. original_update
  216. end
  217. end
复制代码

作者: eva2914771    时间: 2012-9-23 14:07
发完了。。之前在论坛上学到了很多东西让我受益匪浅。。所以我也不能一直做个伸手党。。。。就在这发一帖。。帖子很烂。。大家多包涵。。
作者: 行风之影    时间: 2012-9-23 14:22
好吧
改天会用到的
作者: summer92    时间: 2012-9-23 16:12
这种是好东西,LZ辛苦了
作者: 冰舞蝶恋    时间: 2012-9-24 18:13
看起来好麻烦啊。是真的实际效果很棒吗,还是浪费版面了。
求个工程。

顺便:楼主你是怎么做到连帖的!?
作者: 游弋    时间: 2012-9-24 18:49
这个事件未必也太长了吧好像没人回复啊。
作者: 1243852    时间: 2012-9-24 19:31
  ..楼主最好发一个范例。不是每个人都玩儿过英雄传说。。我真不知道,你这样做的是什么效果

作者: 946936684    时间: 2012-9-24 19:54
……大连帖
作者: 亿万星辰    时间: 2012-9-24 20:12
本帖最后由 亿万星辰 于 2012-9-24 20:15 编辑

求语言描述一下这个英雄传说里的遇敌效果……
没准儿还有其他的实现方法可以改进的……
作者: 小强无敌    时间: 2012-9-24 22:17
eva2914771 发表于 2012-9-23 14:01
还有就是要用到的脚本。。。这个脚本连接我找不到了。。。就在这发下好了。。 ...

小强无敌表示:
其实楼主可以一层就发完的,干嘛发这么多帖子。。。
这是连了多少贴啊。。。
作者: eva2914771    时间: 2012-9-25 19:20
第一次~~发帖啊。。。什么都不知道啊。。。对了没范例。这就弄。。。。
作者: eva2914771    时间: 2012-9-25 19:32
本帖最后由 eva2914771 于 2012-9-25 19:34 编辑

弄好了 我把链接弄在第一个帖子上了。。实在不好意思。。。太粗心了。。
作者: 奉命在先    时间: 2012-9-25 20:51
大家都很想知道英雄传说是什么遇敌效果,LZ速速回答
作者: eva2914771    时间: 2012-9-27 17:19
本帖最后由 eva2914771 于 2012-9-27 20:53 编辑
亿万星辰 发表于 2012-9-24 20:12
求语言描述一下这个英雄传说里的遇敌效果……
没准儿还有其他的实现方法可以改进的…… ...


弄好了。。。 论坛不能连发贴子吗?不是故意连帖的。。。。 。下次我会注意的!求原谅!
作者: knlau    时间: 2013-1-28 13:18
本帖最后由 knlau 于 2013-1-28 14:17 编辑

在ACE到一样用到^^, 谢谢楼主的敎学




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