Project1

标题: 关于横版战斗 [打印本页]

作者: cmmd1    时间: 2015-10-16 19:37
标题: 关于横版战斗
横版战斗里面怎么样让角色和敌人出现待机和各种动作?比如防御
作者: 汪汪    时间: 2015-10-16 20:46
那就不只是横版战斗了……你需要搜索全动画战斗什么的。
作者: 邪月长啸    时间: 2015-10-17 07:33
我这有个,你试试
战斗图要做成像下面这样的

另附脚本
(原脚本的注释都是英文,我用百度翻译的,有点奇怪)
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================

  4. #==============================================================================
  5. # * Animated_Sprite                                Scripted by: SiR_VaIlHoR
  6. #                                                  Edited by: 柳柳
  7. #------------------------------------------------------------------------------
  8. #  A class for animated sprites.
  9. #==============================================================================

  10. #66RPG,超级横版战斗脚本简要说明:

  11. #默认情况下,把一张战斗图截成4列,>8行,如果感觉4列4帧的动画还不能满足要求,看
  12. #def pose(number,frame = 4),更改=4,以及相关部分。

  13. #战斗图从上到下:前进图,等待图,防御图,挨打图,普通攻击图(默认的武器),施展魔法,
  14. #倒地不行了,胜利姿势,自定义武器1,自定义武器2……

  15. #这个脚本的模型是老外编写的,其中参考了XMXS的一个方法,我添加了一些功能,去掉素材限制。

  16. #不同职业拥有的图片数可以不一样,参考工程和录像教学

  17. #==============================================================================
  18. # □ RPG::Class
  19. #==============================================================================
  20. module RPG
  21.   class Class
  22.     def name
  23.       name = @name.split(/,/)[0]
  24.       return name != nil ? name : ''
  25.     end
  26.     def name2
  27.       name = @name.split(/,/)[1]
  28.       return name != nil ? name : ''
  29.     end
  30.   end
  31.   class Weapon
  32.     def name
  33.       name = @name.split(/,/)[0]
  34.       return name != nil ? name : ''
  35.     end
  36.     def name2
  37.       name = @name.split(/,/)[1]
  38.       return name != nil ? name : ''
  39.     end   
  40.   end
  41. end

  42. class Game_Actor
  43.   #--------------------------------------------------------------------------
  44.   # ● 更改名称
  45.   #     name : 新的名称
  46.   #--------------------------------------------------------------------------
  47.   def picturephase
  48.     name = $data_classes[class_id].name2
  49.     return name != nil ? name : "66RPG"
  50.   end
  51. end

  52. class Game_Enemy
  53.   #--------------------------------------------------------------------------
  54.   # ● 获取名称
  55.   #--------------------------------------------------------------------------
  56.   def name
  57.     name = $data_enemies[@enemy_id].name.split(/,/)[0]
  58.     return name != nil ? name : ''
  59.   end
  60.   def picturephase
  61.     name = $data_enemies[@enemy_id].name.split(/,/)[1]
  62.     return name != nil ? name : "66RPG"
  63.   end
  64. end

  65. class Animated_Sprite < RPG::Sprite
  66. #--------------------------------------------------------------------------
  67. #可访问的实例变量。
  68. #--------------------------------------------------------------------------
  69. attr_accessor :frames        #动画的帧的数目
  70. attr_accessor :delay         # 帧间延迟时间(速度)
  71. attr_accessor :frame_width   # 每一帧的宽度
  72. attr_accessor :frame_height  # 每一帧的高度
  73. attr_accessor :offset_x      # 在第一帧的X坐标
  74. attr_accessor :offset_y      # Y的所有帧的坐标
  75. attr_accessor :current_frame # 当前的动画帧
  76. attr_accessor :moving        # 是精灵移动?

  77. #--------------------------------------------------------------------------
  78. # - Initialize an animated sprite
  79. #   viewport : Sprite viewport
  80. #--------------------------------------------------------------------------
  81. def initialize(viewport = nil)
  82.    super(viewport)
  83.    @frame_width, @frame_height = 0, 0
  84.    change    # 一个基本的变化来设置初始变量
  85.    @old = Graphics.frame_count  # 对于延迟的方法
  86.    @goingup = true    # 增加动画?(if @rm2k_mode is true)
  87.    @once = false      # 是动画只播放一次?
  88.    @animated = true   # 用于停止动画的时候”曾经是真实的
  89. end

  90. #--------------------------------------------------------------------------
  91. # RPG的评论
  92. #变化源矩形(改变动画)
  93. #帧:动画的帧的数目
  94. #延迟:帧延迟,控制动画速度
  95. # offx:在第一帧的X坐标
  96. #抉择:Y所有帧的坐标
  97. # STARTF:动画起始帧
  98. #一旦:是动画只播放一次?
  99. # rm2k_mode:动画模式:1-2-3-2如果属实,1-2-3-1假
  100. #
  101. #评论cybersam
  102. #
  103. #的rm2k_mode不是礼物了…
  104. #如果你想的话,#特征然后用rm2k或使用RPG的SCRîPT…
  105. #--------------------------------------------------------------------------
  106. def change(frames = 0, delay = 0, offx = 0, offy = 0,
  107.             startf = 0, once = false)
  108.    @frames = frames
  109.    @delay = delay
  110.    @offset_x, @offset_y = offx, offy
  111.    @current_frame = startf
  112.    @once = once
  113.    x = @current_frame * @frame_width + @offset_x
  114.    self.src_rect = Rect.new(x, @offset_y, @frame_width, @frame_height)
  115.    @goingup = true
  116.    @animated = true
  117. end

  118. #--------------------------------------------------------------------------
  119. # 更新动画和运动
  120. #--------------------------------------------------------------------------
  121. def update
  122.    super
  123.    if self.bitmap != nil and delay(@delay) and @animated
  124.      x = @current_frame * @frame_width + @offset_x
  125.      self.src_rect = Rect.new(x, @offset_y, @frame_width, @frame_height)
  126.        @current_frame = (@current_frame + 1) unless @frames == 0
  127.        @animated = false if @current_frame == @frames and @once
  128.        @current_frame %= @frames
  129.    end
  130. end

  131. #--------------------------------------------------------------------------
  132. # -移动精灵
  133. # X:对目标点的X坐标
  134. # Y Y的目标点的坐标
  135. #速度:运动速度(0 =延迟,1 + =更快)
  136. #延迟:如果速度是0延迟运动
  137. #--------------------------------------------------------------------------
  138. def move(x, y, speed = 1, delay = 0)
  139.    @destx = x
  140.    @desty = y
  141.    @move_speed = speed
  142.    @move_delay = delay
  143.    @move_old = Graphics.frame_count
  144.    @moving = true
  145. end

  146. #--------------------------------------------------------------------------
  147. #移动精灵destx和类
  148. #--------------------------------------------------------------------------
  149. def update_move
  150.    return unless @moving
  151.    movinc = @move_speed == 0 ? 1 : @move_speed
  152.    if Graphics.frame_count - @move_old > @move_delay or @move_speed != 0
  153.      self.x += movinc if self.x < @destx
  154.      self.x -= movinc if self.x > @destx
  155.      self.y += movinc if self.y < @desty
  156.      self.y -= movinc if self.y > @desty
  157.      @move_old = Graphics.frame_count
  158.    end
  159.    if @move_speed > 1  # 检查如果精灵无法做到这一点
  160.      self.x = @destx if (@destx - self.x).abs % @move_speed != 0 and
  161.                         (@destx - self.x).abs <= @move_speed
  162.      self.y = @desty if (@desty - self.y).abs % @move_speed != 0 and
  163.                         (@desty - self.y).abs <= @move_speed
  164.    end
  165.    if self.x == @destx and self.y == @desty
  166.      @moving = false
  167.    end
  168. end

  169. #--------------------------------------------------------------------------
  170. #暂停动画,但还是更新运动
  171. #帧:帧的数目
  172. #--------------------------------------------------------------------------
  173. def delay(frames)
  174.    update_move
  175.    if (Graphics.frame_count - @old >= frames)
  176.      @old = Graphics.frame_count
  177.      return true
  178.    end
  179.    return false
  180. end
  181. end

  182. #=============================================================================
  183. #
  184. #在这里,我们走…
  185. #这使得SCRîPT很容易实现
  186. #只需添加一个新的SCRîPT上面的“主要”SCRîPT
  187. #并将这整件事在那里
  188. #
  189. #你可以看到精灵改变代码是从日本SCRîPT
  190. #所以妖怪变的学分去他们…
  191. #我编辑这一点,它可以显示更多的精灵和精灵动画
  192. #和增加了一些其他的东西…接下来的事情是球员的运动…
  193. #
  194. #
  195. #
  196. #我也是变化的îPt在这î可控硅SCR催化剂…
  197. #学分这是谁做的这个家伙…
  198. #
  199. #▼▲▼xrxs11。0▼▲▼戦闘・バトラーモーション版本。
  200. #
  201. #因为这不是用了…它不需要信用卡了…
  202. #但我会让它在这里因为它帮了我很多…
  203. #
  204. #
  205. #为理念…小姐为我提供了很好的思路
  206. #,帮了我很多,我没找到一种方法,其中的一些功能…
  207. #
  208. #这里更多的信贷来的地方…
  209. #的RPG的SCRîPT…
  210. #这里不是整个事情…
  211. #但有些snipplet你知道女巫时,阅读评论
  212. #
  213. #
  214. #如果你想要# SCRîPT了更多一些…
  215. #最多的东西是评论…但如果你仍然有问题或
  216. #建议的话可以联系我
  217. #
  218. #如何或在哪里可以联系我…
  219. #在通过时,电子邮件的http://www.rmxp.net论坛:[email protected]
  220. #目的:通过#或cych4n或ICQ:73130840
  221. #
  222. #记住这是仍在测试阶段…
  223. #和我要工作在一些其他的添加剂…喜欢的人物动作…
  224. #但不会加入我们…因为我需要先弄清楚…
  225. #
  226. #
  227. #
  228. #哦呵呵…在我忘记之前…
  229. #抱歉为坏的英文…^ - ^ ''''
  230. #
  231. #
  232. #==============================================================================
  233. #
  234. #在这里我要告诉你,你需要给你的甜心什么名字
  235. #战斗的精灵的…
  236. #
  237. #好…在这里…因为我使用RPG的运动îPt晶闸管…
  238. #有很多变化…
  239. #
  240. #当你看# SCRîPT你会找到符合的姿势(N)”或“enemy_pose(N)”
  241. #因为我想我#精灵有不同的精灵…我还添加了一个选项
  242. #这些…
  243. #现在如果你#后添加一个数N(N为女巫精灵使用)
  244. #如8…(“姿势(4,8)”)这将告诉SCRîPT,第四动画
  245. #有8帧…
  246. #构成用于球员…和敌人enemy_pose…
  247. #没有比这更多的…
  248. #我用我的老精灵数量#…(这一次只有一个精灵……)
  249. #
  250. #说明动画精灵…(数字)
  251. #
  252. #
  253. # 0 =移动(在战争中)
  254. # 1 =备用
  255. # 2 =辩护
  256. # 3 =打(攻击)
  257. # 4 =攻击
  258. # 5 =使用技能
  259. # 6 =死亡
  260. # 7 =胜利的姿势…这个想法是从RPG的…
  261. #
  262. #
  263. #当然这只是代码的开始…
  264. #所以更多的动画可以实现…
  265. #但现在这应该是足够的…
  266. #
  267. #很多已经改变了这里…现在看起来做的…
  268. #当然好编辑需要做,所以它看起来和伟大的作品你
  269. #游戏…
  270. #
  271. #
  272. #
  273. #第一字符的运动…完成
  274. #第二字运动中攻击…完成
  275. #第三字符出现在敌人攻击时…完成
  276. #
  277. #第四敌人运动…完成
  278. #第五运动中攻击敌人…完成
  279. #第六敌人似乎在敌人攻击时…完成
  280. #
  281. #第七每个武器都有自己的动画…完成
  282. #第八每个技能都有它自己的动画…完成
  283. #
  284. #
  285. #
  286. #的interisted…我的新项目是一个电影播放器
  287. #(这实际上起到AVI,指导价格等…
  288. #却不认为这会很快结束…^ - ^”
  289. #
  290. #但我可以试试别的我开始之前的代码,一个…
  291. #==============================================================================



  292. class Game_Actor < Game_Battler

  293. #你没有改变你的游戏的演员,让人物schows
  294. #从侧面…
  295. #这会为你做的…^ - ^
  296. def screen_x
  297.    if self.index != nil
  298.      return self.index * 30+ 375
  299.    else
  300.      return 0
  301.    end
  302. end

  303. def screen_y
  304.    return self.index * 45 + 175
  305. end

  306. def screen_z
  307.    if self.index != nil
  308.      return self.index
  309.    else
  310.      return 0
  311.    end
  312. end
  313. end


  314. # RPG's snipplet...
  315. class Spriteset_Battle
  316. attr_accessor :actor_sprites
  317. attr_accessor :enemy_sprites


  318. alias original_initialize initialize
  319. def initialize
  320. # _派对@启动游戏_ party.actors.size _ number=元
  321. #ビューポートを作成
  322.    @viewport0 = Viewport.new(0, 0, 640, 480)
  323.    @viewport1 = Viewport.new(0, 0, 640, 320)
  324.    @viewport2 = Viewport.new(0, 0, 640, 480)
  325.    @viewport3 = Viewport.new(0, 0, 640, 480)
  326.    @viewport4 = Viewport.new(0, 0, 640, 480)
  327.    @viewport1.z = 50
  328.    @viewport2.z = 50
  329.    @viewport3.z = 200
  330.    @viewport4.z = 5000

  331.    @battleback_sprite = Sprite.new(@viewport0)
  332.    
  333.    @enemy_sprites = []
  334.    for enemy in $game_troop.enemies #.reverse
  335.      @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
  336.    end
  337.    
  338.    @actor_sprites = []
  339.    @actor_sprites.push(Sprite_Battler.new(@viewport2,$game_party.actors[0]))
  340.    @actor_sprites.push(Sprite_Battler.new(@viewport2,$game_party.actors[1]))
  341.    @actor_sprites.push(Sprite_Battler.new(@viewport2,$game_party.actors[2]))
  342.    @actor_sprites.push(Sprite_Battler.new(@viewport2,$game_party.actors[3]))
  343.    
  344.    @weather = RPG::Weather.new(@viewport1)
  345.    @picture_sprites = []
  346.    for i in 51..100
  347.      @picture_sprites.push(Sprite_Picture.new(@viewport3,
  348.        $game_screen.pictures[i]))
  349.    end
  350.    @timer_sprite = Sprite_Timer.new
  351.    update
  352. end



  353. alias original_update update
  354. def update
  355.    @viewport1.z = 50 and @viewport2.z = 51 if $actor_on_top == true
  356.    @viewport1.z = 51 and @viewport2.z = 50 if $actor_on_top == false
  357.     # 刷新角色的活动块 (对应角色的替换)
  358.     @actor_sprites[0].battler = $game_party.actors[0]
  359.     @actor_sprites[1].battler = $game_party.actors[1]
  360.     @actor_sprites[2].battler = $game_party.actors[2]
  361.     @actor_sprites[3].battler = $game_party.actors[3]
  362.     # 战斗背景的文件名与现在情况有差异的情况下
  363.     if @battleback_name != $game_temp.battleback_name
  364.       @battleback_name = $game_temp.battleback_name
  365.       if @battleback_sprite.bitmap != nil
  366.         @battleback_sprite.bitmap.dispose
  367.       end
  368.       @battleback_sprite.bitmap = RPG::Cache.battleback(@battleback_name)
  369.       @battleback_sprite.src_rect.set(0, 0, 640, 480)
  370.     end
  371.     # 刷新战斗者的活动块
  372.     for sprite in @enemy_sprites + @actor_sprites
  373.       sprite.update
  374.     end
  375.     # 刷新天气图形
  376.     @weather.type = $game_screen.weather_type
  377.     @weather.max = $game_screen.weather_max
  378.     @weather.update
  379.     # 刷新图片活动块
  380.     for sprite in @picture_sprites
  381.       sprite.update
  382.     end
  383.     # 刷新计时器活动块
  384.     @timer_sprite.update
  385.     # 设置画面的色调与震动位置
  386.     @viewport1.tone = $game_screen.tone
  387.     @viewport1.ox = $game_screen.shake
  388.     # 设置画面的闪烁色
  389.     @viewport4.color = $game_screen.flash_color
  390.     # 刷新显示端口
  391.     @viewport1.update
  392.     @viewport2.update
  393.     @viewport4.update
  394. end
  395. end
  396. # end

  397. # ==============================================================================
  398. #精灵战士的服装战斗系统
  399. # ==============================================================================
  400. #我们做一些动画和东西…
  401. #我知道这不是最好的办法…
  402. #但这是第一次的工作方式,我找到了…
  403. #这需要正确理解动画作品…
  404. #如果你想改变一些东西…
  405. #在这我没有解释太多因为它真的容易,如果你知道你在做什么
  406. #否则将采取你的时间去了解它,但我想的人
  407. #试图编辑本就知道他/她做…^ - ^
  408. #
  409. #
  410. #
  411. #这里我会完全取代“sprite_battler”类…
  412. #所以如果你已经改变了一些东西在那里你需要改变它在这里就好了
  413. #(我认为…我没有测试它…所以你了)
  414. #我标记我只增加——> #
  415. #什么需要说明的有一个评论…
  416. #但并不是所有的评论#…
  417. #所以如果你不知道这意味着什么,或者你只是想知道为什么它是存在的,
  418. #它做什么,那么你需要联系我或任何人谁明白…^ - ^
  419. #如何你可以联系我看到上面…在这个SCRîPt的顶部…


  420. class Sprite_Battler < Animated_Sprite

  421. attr_accessor :battler
  422. attr_reader   :index
  423. attr_accessor :target_index
  424. attr_accessor :frame_width


  425. def initialize(viewport, battler = nil)
  426.    super(viewport)
  427.    @battler = battler
  428.    @pattern_b = 0 #
  429.    @counter_b = 0 #
  430.    @index = 0     #
  431.    if @battler != nil
  432.      tempbitmap = RPG::Cache.battler(@battler.battler_name, @battler.battler_hue)
  433.      @frame_width = tempbitmap.width/4
  434.      picturephase = @battler.picturephase
  435.      if picturephase == "66RPG"
  436.        @frame_height = tempbitmap.height/8
  437.      else
  438.        @frame_height = tempbitmap.height/8
  439.      end   
  440.    else
  441.      @frame_width, @frame_height = 1,1
  442.    end  
  443.    # start sprite
  444.    @battler.is_a?(Game_Enemy) ? enemy_pose(1) : pose(1)
  445.    @battler_visible = false
  446.    if $target_index == nil
  447.      $target_index = 0
  448.    end
  449. end

  450. def index=(index) #
  451.    @index = index  #
  452.    update          #
  453. end               #

  454. def dispose
  455.    if self.bitmap != nil
  456.      self.bitmap.dispose
  457.    end
  458.    super
  459. end

  460. def enemy                                             #
  461.    $target_index += $game_troop.enemies.size
  462.    $target_index %= $game_troop.enemies.size
  463.    return $game_troop.enemies[$target_index]           #
  464. end                                                   #

  465. def actor                                             #
  466.    $target_index += $game_party.actors.size
  467.    $target_index %= $game_party.actors.size
  468.    return $game_party.actors[$target_index]            #
  469. end           

  470. #==============================================================================
  471. #这里是RPG的SCRîPT snipplet…
  472. #我只改变线从这…
  473. #
  474. #这里你可以添加更多的精灵了…如果你有更多的…^ - ^
  475. #==============================================================================
  476. def pose(number, frames = 4)
  477.     case number
  478.     when 0  # run
  479.     change(frames, 5, 0, 0, 0)
  480.     when 1  # standby
  481.     change(frames, 5, 0, @frame_height)
  482.     when 2 # defend
  483.     change(frames, 5, 0, @frame_height * 2)
  484.     when 3 # Hurt, loops
  485.     change(frames, 5, 0, @frame_height * 3)
  486.     when 4 # attack no loop
  487.     change(frames, 5, 0, @frame_height * 4, 0, true)
  488.     when 5 # skill
  489.     change(frames, 5, 0, @frame_height * 5)
  490.     when 6 # death
  491.     change(frames, 5, 0, @frame_height * 6)
  492.     when 7 # winning pose
  493.     change(frames, 5, 0, @frame_height * 7)
  494.     when 8 # no sprite
  495.     change(frames, 5, 0, @frame_height * 8)
  496.     when 9 # no sprite
  497.     change(frames, 5, 0, @frame_height * 9)
  498.     when 10 # no sprite
  499.     change(frames, 5, 0, @frame_height * 10)
  500.     when 11 # no sprite
  501.     change(frames, 5, 0, @frame_height * 11)
  502.     when 12 # no sprite
  503.     change(frames, 5, 0, @frame_height * 12)
  504.     when 13 # no sprite
  505.     change(frames, 5, 0, @frame_height * 13)
  506.     when 14 # no sprite
  507.     change(frames, 5, 0, @frame_height * 14)
  508.     when 15 # no sprite
  509.     change(frames, 5, 0, @frame_height * 15)
  510.     when 16 # no sprite
  511.     change(frames, 5, 0, @frame_height * 16)
  512.     when 17 # no sprite
  513.     change(frames, 5, 0, @frame_height * 17)
  514.     when 18 # no sprite
  515.     change(frames, 5, 0, @frame_height * 18)
  516.     when 19 # no sprite
  517.     change(frames, 5, 0, @frame_height * 19)
  518.     when 20 # no sprite
  519.     change(frames, 5, 0, @frame_height * 20)
  520.     # ...etc.
  521.    else
  522.      change(frames, 5, 0, @frame_height * number, 0)
  523.    end
  524. end

  525. #--------------------------------------------------------------------------
  526. #变化的敌人的战斗姿态
  527. #号:姿势数
  528. #--------------------------------------------------------------------------
  529. def enemy_pose(number ,enemy_frames = 4)
  530.    case number
  531.    when 0  # run
  532.      change(enemy_frames, 5, 0, 0, 0)
  533.    when 1  # standby
  534.      change(enemy_frames, 5, 0, @frame_height)
  535.    when 2 # defend
  536.      change(enemy_frames, 5, 0, @frame_height * 2)
  537.    when 3 # Hurt, loops
  538.      change(enemy_frames, 5, 0, @frame_height * 3)
  539.    when 4 # attack
  540.      change(enemy_frames, 5, 0, @frame_height * 4, 0, true)
  541.    when 5 # skill
  542.      change(enemy_frames, 5, 0, @frame_height * 5)
  543.    when 6 # death
  544.      change(enemy_frames, 5, 0, @frame_height * 6)
  545.    when 7 # no sprite
  546.      change(enemy_frames, 5, 0, @frame_height * 7)
  547.      # ...etc.
  548.    else
  549.      change(enemy_frames, 5, 0, @frame_height * number, 0)
  550.    end
  551. end
  552. #==============================================================================
  553. # sniplet end...
  554. #==============================================================================


  555. def update
  556.    super
  557.    
  558.    if @battler == nil                                                     
  559.      self.bitmap = nil                                                     
  560.      loop_animation(nil)                                                   
  561.      return                                                               
  562.    end                                                                     
  563.    if @battler.battler_name != @battler_name or
  564.       @battler.battler_hue != @battler_hue

  565.      @battler_name = @battler.battler_name
  566.      @battler_hue = @battler.battler_hue
  567.      self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  568.      @width = bitmap.width
  569.      @height = bitmap.height
  570.      self.ox = @frame_width / 2
  571.      self.oy = @frame_height

  572.      if @battler.dead? or @battler.hidden
  573.        self.opacity = 0
  574.      end
  575.      self.x =  @battler.screen_x
  576.      self.y =  @battler.screen_y
  577.      self.z = @battler.screen_z
  578.    end

  579.    if @battler.damage == nil and
  580.       @battler.state_animation_id != @state_animation_id
  581.      @state_animation_id = @battler.state_animation_id
  582.      loop_animation($data_animations[@state_animation_id])
  583.    end

  584.    if @battler.is_a?(Game_Actor) and @battler_visible
  585.      if $game_temp.battle_main_phase
  586.        self.opacity += 3 if self.opacity < 255
  587.      else
  588.        self.opacity -= 3 if self.opacity > 207
  589.      end
  590.    end

  591.    if @battler.blink
  592.      blink_on
  593.    else
  594.      blink_off
  595.    end

  596.    unless @battler_visible
  597.      if not @battler.hidden and not @battler.dead? and
  598.         (@battler.damage == nil or @battler.damage_pop)
  599.        appear
  600.        @battler_visible = true
  601.      end
  602.      if not @battler.hidden and
  603.         (@battler.damage == nil or @battler.damage_pop) and
  604.         @battler.is_a?(Game_Actor)
  605.        appear
  606.        @battler_visible = true
  607.      end
  608.    end
  609.    if @battler_visible
  610.      if @battler.hidden
  611.        $game_system.se_play($data_system.escape_se)
  612.        escape
  613.        @battler_visible = false
  614.      end
  615.      if @battler.white_flash
  616.        whiten
  617.        @battler.white_flash = false
  618.      end
  619.      if @battler.animation_id != 0
  620.        animation = $data_animations[@battler.animation_id]
  621.        animation(animation, @battler.animation_hit)
  622.        @battler.animation_id = 0
  623.      end
  624.      if @battler.damage_pop
  625.        damage(@battler.damage, @battler.critical)
  626.        @battler.damage = nil
  627.        @battler.critical = false
  628.        @battler.damage_pop = false
  629.      end
  630.      if @battler.damage == nil and @battler.dead?
  631.        if @battler.is_a?(Game_Enemy)
  632.          $game_system.se_play($data_system.enemy_collapse_se)
  633.          collapse
  634.          @battler_visible = false
  635.        else
  636.          $game_system.se_play($data_system.actor_collapse_se) unless @dead
  637.          @dead = true
  638.          pose(6)
  639.        end
  640.      else
  641.        @dead = false
  642.      end
  643.    end                                                                #
  644. end
  645. end


  646. #==============================================================================
  647. # Scene_Battle Costum  Battle System
  648. #==============================================================================

  649. class Scene_Battle


  650. def update_phase4
  651.    case @phase4_step
  652.    when 1
  653.      update_phase4_step1
  654.    when 2
  655.      update_phase4_step2
  656.    when 3
  657.      update_phase4_step3
  658.    when 4
  659.      update_phase4_step4
  660.    when 5
  661.      update_phase4_step5
  662.    when 6
  663.      update_phase4_step6
  664.    when 7
  665.      update_phase4_step7
  666.    when 8
  667.     update_phase4_step8   
  668.    end
  669. end


  670. def make_basic_action_result
  671.    
  672.    if @active_battler.is_a?(Game_Actor)
  673.      $actor_on_top = true
  674.    elsif @active_battler.is_a?(Game_Enemy)
  675.      $actor_on_top = false
  676.    end
  677.    
  678.    if @active_battler.current_action.basic == 0
  679. # ============================================================================
  680. #武器开始…
  681. # ============================================================================
  682. #
  683. # =================================不同武器不同的动画
  684. #
  685. #正如你可以看到,这是相当简单的#…
  686. #如果你想添加一个武器动画列表然后看下面的SCRîPT…
  687. #,我希望你会发现这是如何工作的…
  688. #
  689. #
  690. #如果不#…
  691. #这里是这样的…
  692. #第一件事…
  693. #只是复制和粘贴”的“@active_battler_enemy.weapon_id = =一致。”
  694. #只是在最后的“weapon_sprite的…
  695. #
  696. #这里的ID是你需要看看你的游戏数据库的数量,站在
  697. #你的武器的名字是你需要在这里输入的ID…
  698. #
  699. #也是一样的怪物的方…^ - ^
  700. #怪物通常不需要武器…更多的精灵
  701. #
  702. #如果你想使用更多#…然后替换“@ weapon_sprite_enemy = 4”
  703. #这些线…(但是你需要编辑)
  704. #
  705. #如果@active_battler.weapon_id = = 1 # <——武器的ID号
  706. # @ weapon_sprite_enemy = 4 # <——战斗动画
  707. # elsif @active_battler.weapon_id = = 5 # <——武器的ID号
  708. # @ weapon_sprite_enemy = 2 # <——战斗动画
  709. # elsif @active_battler.weapon_id = = 9 # <——武器的ID号
  710. # @ weapon_sprite_enemy = 0 # <——战斗动画
  711. # elsif @active_battler.weapon_id = = 13 # <——武器的ID号
  712. # @ weapon_sprite_enemy = 6 # <——战斗动画
  713. #其他#
  714. # @ weapon_sprite_enemy = 4
  715. #结束
  716. #
  717. # =================================结束

  718.      if @active_battler.is_a?(Game_Actor)
  719.        if $data_weapons[@active_battler.weapon_id] == nil
  720.          @weapon_sprite = 4
  721.        else
  722.          if $data_weapons[@active_battler.weapon_id].name2 == nil or
  723.            $data_weapons[@active_battler.weapon_id].name2 == ""
  724.            @weapon_sprite = 4
  725.          else
  726.            @weapon_sprite = $data_weapons[@active_battler.weapon_id].name2.to_i
  727.          end
  728.        end
  729.       
  730. #怪物部分在这里…^ - ^

  731.      else # @active_battler.is_a?(Game_Enemy)
  732.          @weapon_sprite_enemy = 4
  733.      end
  734.       
  735. #
  736. #=============================================================================
  737. # WEAPONS END....
  738. #=============================================================================
  739.      
  740.      
  741.      @animation1_id = @active_battler.animation1_id
  742.      @animation2_id = @active_battler.animation2_id
  743.      if @active_battler.is_a?(Game_Enemy)
  744.        if @active_battler.restriction == 3
  745.          target = $game_troop.random_target_enemy
  746.        elsif @active_battler.restriction == 2
  747.          target = $game_party.random_target_actor
  748.        else
  749.          index = @active_battler.current_action.target_index
  750.          target = $game_party.smooth_target_actor(index)
  751.        end
  752. #======== 这里是运动和动画的设置…
  753.          x = target.screen_x - RPG::Cache.battler(@active_battler.battler_name, @active_battler.battler_hue).width/6
  754.          @spriteset.enemy_sprites[@active_battler.index].enemy_pose(0)
  755.          @spriteset.enemy_sprites[@active_battler.index].move(x, target.screen_y, 10)
  756. # =========在这里,如果你看看RPG的运动设置,你会看到
  757. # =========,他以40为动画的速度…
  758. # =========我东西太快所以我制定了10所以看起来平滑...
  759.      end
  760.      if @active_battler.is_a?(Game_Actor)
  761.        if @active_battler.restriction == 3
  762.          target = $game_party.random_target_actor
  763.        elsif @active_battler.restriction == 2
  764.          target = $game_troop.random_target_enemy
  765.        else
  766.          index = @active_battler.current_action.target_index
  767.          target = $game_troop.smooth_target_enemy(index)
  768.        end
  769. #======= 对于球员同样的事情…^ - ^
  770.        x = target.screen_x + RPG::Cache.battler(@active_battler.battler_name, @active_battler.battler_hue).width/8
  771.        @spriteset.actor_sprites[@active_battler.index].pose(0)
  772.        @spriteset.actor_sprites[@active_battler.index].move(x, target.screen_y, 10)
  773.      end
  774.      @target_battlers = [target]
  775.      for target in @target_battlers
  776.        target.attack_effect(@active_battler)
  777.      end
  778.      return
  779.    end
  780.    if @active_battler.current_action.basic == 1
  781.      if @active_battler.is_a?(Game_Actor)
  782.        @spriteset.actor_sprites[@active_battler.index].pose(2) #防御
  783.      else
  784.        @spriteset.enemy_sprites[@active_battler.index].enemy_pose(2) #defence
  785.      end
  786.      @help_window.set_text($data_system.words.guard, 1)
  787.      return
  788.    end
  789.    if @active_battler.is_a?(Game_Enemy) and
  790.       @active_battler.current_action.basic == 2
  791.      @help_window.set_text("逃走", 1)
  792.      @active_battler.escape
  793.      return
  794.    end
  795.    if @active_battler.current_action.basic == 3
  796.      $game_temp.forcing_battler = nil
  797.      @phase4_step = 1
  798.      return
  799.    end
  800.    
  801.    if @active_battler.current_action.basic == 4
  802.      if $game_temp.battle_can_escape == false
  803.        $game_system.se_play($data_system.buzzer_se)
  804.        return
  805.      end
  806.      $game_system.se_play($data_system.decision_se)
  807.      update_phase2_escape
  808.      return
  809.    end
  810. end
  811. #--------------------------------------------------------------------------
  812. # skill aktion...
  813. #--------------------------------------------------------------------------
  814. def make_skill_action_result
  815.    @skill = $data_skills[@active_battler.current_action.skill_id]
  816.    unless @active_battler.current_action.forcing
  817.      unless @active_battler.skill_can_use?(@skill.id)
  818.        $game_temp.forcing_battler = nil
  819.        @phase4_step = 1
  820.        return
  821.      end
  822.    end
  823.    @active_battler.sp -= @skill.sp_cost
  824.    @status_window.refresh
  825.    @help_window.set_text(@skill.name, 1)
  826.    
  827. # =============================================================================
  828. #技能的精灵开始
  829. # =============================================================================
  830. #这是为武器一样…
  831. #为人本的第一次
  832. #看SCRîPT我希望它是很容易理解的…
  833. #
  834. #另一个有早期版本的这个SCRîPT他们不需要explenation
  835. #…我认为…
  836. #认为改变是线在动画ID给精灵…
  837. #数后的“姿态”是动画的一致。它为每一个其他的动画以及..
  838. #如果你有技能,有更多的帧动画…
  839. #然后插入帧的数量后第一个数字…
  840. #看来这个…”姿势(5,8)“<<——5是动画…
  841. # 8是最大帧(这意味着你的动画有8帧……)^ - ^
  842.    
  843.    if @active_battler.is_a?(Game_Actor)
  844.      if @skill.name != "one of the skills" # <--skill doesn't exist => all the skills have the skill animation!
  845.        @spriteset.actor_sprites[@active_battler.index].pose(5) # <-- sprite number
  846.      end
  847.    else
  848.      if @skill.name != "one of the skills" # <-- first skill name
  849.        @spriteset.enemy_sprites[@active_battler.index].enemy_pose(5) # <-- sprite number
  850.      end
  851.    end
  852. #=============================================================================
  853. # SKILL SPRITES END
  854. #=============================================================================
  855.    
  856.    @animation1_id = @skill.animation1_id
  857.    @animation2_id = @skill.animation2_id
  858.    @common_event_id = @skill.common_event_id
  859.    set_target_battlers(@skill.scope)
  860.    for target in @target_battlers
  861.      target.skill_effect(@active_battler, @skill)
  862.    end
  863. end
  864. #--------------------------------------------------------------------------
  865. #在这里,我们如何使项目使用aktions
  866. #--------------------------------------------------------------------------
  867. def make_item_action_result
  868. #对不起我没这方面的工作…
  869. #因为我没有一个精灵,使用物品的…
  870. #所以我刚刚添加的备用的精灵在这里…
  871. #当我得到这个#更多的时间我会尽我所能做的这一个…^ - ^
  872. #其同上面的…
  873.    if @active_battler.is_a?(Game_Actor)
  874.      @spriteset.actor_sprites[@active_battler.index].pose(1)
  875.    else
  876.      @spriteset.enemy_sprites[@active_battler.index].enemy_pose(1)
  877.    end
  878.    
  879.    @item = $data_items[@active_battler.current_action.item_id]
  880.    unless $game_party.item_can_use?(@item.id)
  881.      @phase4_step = 1
  882.      return
  883.    end
  884.    if @item.consumable
  885.      $game_party.lose_item(@item.id, 1)
  886.    end
  887.    @help_window.set_text(@item.name, 1)
  888.    @animation1_id = @item.animation1_id
  889.    @animation2_id = @item.animation2_id
  890.    @common_event_id = @item.common_event_id
  891.    index = @active_battler.current_action.target_index
  892.    target = $game_party.smooth_target_actor(index)
  893.    set_target_battlers(@item.scope)
  894.    for target in @target_battlers
  895.      target.item_effect(@item)
  896.    end
  897. end

  898. # ==============================================================================
  899. #这里了…从RPG的SCRîPT snipplet
  900. # ==============================================================================
  901. #这是胜利的姿势…
  902. #如果你使用我的老习惯水平SCRî接着你需要增加
  903. #标记线给你“def start_phase5”中的“scene_battle 2”和删除这一…
  904. # - > = ***** =
  905. #结束标志,你需要删除…
  906. #和-> ===== } {
  907. #标志,你需要复制和粘贴在另一条线…
  908. #你需要添加在同一位置…

  909. def start_phase5
  910.    @phase = 5
  911.    $game_system.me_play($game_system.battle_end_me)
  912.    $game_system.bgm_play($game_temp.map_bgm)
  913.    exp = 0
  914.    gold = 0
  915.    treasures = []
  916.    for enemy in $game_troop.enemies
  917.      unless enemy.hidden
  918.        exp += enemy.exp
  919.        gold += enemy.gold
  920.        if rand(100) < enemy.treasure_prob
  921.          if enemy.item_id > 0
  922.            treasures.push($data_items[enemy.item_id])
  923.          end
  924.          if enemy.weapon_id > 0
  925.            treasures.push($data_weapons[enemy.weapon_id])
  926.          end
  927.          if enemy.armor_id > 0
  928.            treasures.push($data_armors[enemy.armor_id])
  929.          end
  930.        end
  931.      end
  932.    end
  933.    treasures = treasures[0..5]
  934.    for i in 0...$game_party.actors.size
  935.      actor = $game_party.actors[i]
  936.      @spriteset.actor_sprites[i].pose(7) unless actor.dead? # {=====}
  937.      if actor.cant_get_exp? == false
  938.        last_level = actor.level
  939.        actor.exp += exp
  940.        if actor.level > last_level
  941.          @status_window.level_up(i)
  942.        end
  943.      end
  944.    end
  945.    $game_party.gain_gold(gold)
  946.    for item in treasures
  947.      case item
  948.      when RPG::Item
  949.        $game_party.gain_item(item.id, 1)
  950.      when RPG::Weapon
  951.        $game_party.gain_weapon(item.id, 1)
  952.      when RPG::Armor
  953.        $game_party.gain_armor(item.id, 1)
  954.      end
  955.    end
  956.    @result_window = Window_BattleResult.new(exp, gold, treasures)
  957.    @phase5_wait_count = 100
  958. end
  959. #   =*****=
  960. #--------------------------------------------------------------------------
  961. #更新运动
  962. #由于RPG不是用来评论…我要评论它再次…
  963. #--------------------------------------------------------------------------
  964. def update_phase4_step3
  965.    if @active_battler.current_action.kind == 0 and
  966.       @active_battler.current_action.basic == 0
  967.       # 在这一个…我们有我们的武器动画…玩家和怪物
  968.      if @active_battler.is_a?(Game_Actor)
  969.        @spriteset.actor_sprites[@active_battler.index].pose(@weapon_sprite)
  970.      elsif @active_battler.is_a?(Game_Enemy)
  971.        @spriteset.enemy_sprites[@active_battler.index].enemy_pose(@weapon_sprite_enemy)
  972.      end
  973.    end
  974.    if @animation1_id == 0
  975.      @active_battler.white_flash = true
  976.    else
  977.      @active_battler.animation_id = @animation1_id
  978.      @active_battler.animation_hit = true
  979.    end
  980.    @phase4_step = 4
  981. end

  982. def update_phase4_step4
  983.    # 这是热播的动画…
  984.    for target in @target_battlers
  985.      if target.is_a?(Game_Actor) and !@active_battler.is_a?(Game_Actor)
  986.        if target.guarding?
  987.          @spriteset.actor_sprites[target.index].pose(2)
  988.        else
  989.          @spriteset.actor_sprites[target.index].pose(3)
  990.        end
  991.        elsif target.is_a?(Game_Enemy) and !@active_battler.is_a?(Game_Enemy)
  992.        if target.guarding?
  993.          @spriteset.enemy_sprites[target.index].enemy_pose(2)
  994.        else
  995.          @spriteset.enemy_sprites[target.index].enemy_pose(3)
  996.        end
  997.      end
  998.      target.animation_id = @animation2_id
  999.      target.animation_hit = (target.damage != "Miss")
  1000.    end
  1001.    @wait_count = 8
  1002.    @phase4_step = 5
  1003. end

  1004. def update_phase4_step5
  1005.    if @active_battler.hp > 0 and @active_battler.slip_damage?
  1006.      @active_battler.slip_damage_effect
  1007.      @active_battler.damage_pop = true
  1008.    end

  1009.    @help_window.visible = false
  1010.    @status_window.refresh
  1011.    #这里是后卫动画…
  1012.    if @active_battler.is_a?(Game_Actor)
  1013.      @spriteset.actor_sprites[@active_battler.index].pose(1)
  1014.    else
  1015.      @spriteset.enemy_sprites[@active_battler.index].enemy_pose(1)
  1016.    end
  1017.    for target in @target_battlers
  1018.      if target.damage != nil
  1019.        target.damage_pop = true
  1020.        if @active_battler.is_a?(Game_Actor)
  1021.          @spriteset.actor_sprites[@active_battler.index].pose(1)
  1022.        else
  1023.          @spriteset.enemy_sprites[@active_battler.index].enemy_pose(1)
  1024.        end
  1025.      end
  1026.    end
  1027.    @phase4_step = 6
  1028. end
  1029. #--------------------------------------------------------------------------
  1030. # ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ)
  1031. #--------------------------------------------------------------------------
  1032. def update_phase4_step6
  1033.    
  1034. #我们询问玩家死亡和是一名球员或敌人…
  1035. #这些线的运行和待机动画的…
  1036.    if @active_battler.is_a?(Game_Actor) and !@active_battler.dead?
  1037.      @spriteset.actor_sprites[@active_battler.index].move(@active_battler.screen_x, @active_battler.screen_y, 20)
  1038.      @spriteset.actor_sprites[@active_battler.index].pose(0)
  1039.    elsif !@active_battler.dead?
  1040.      @spriteset.enemy_sprites[@active_battler.index].move(@active_battler.screen_x, @active_battler.screen_y, 20)
  1041.      @spriteset.enemy_sprites[@active_battler.index].enemy_pose(0)
  1042.    end
  1043.    for target in @target_battlers
  1044.      if target.is_a?(Game_Actor) and !target.dead?
  1045.          @spriteset.actor_sprites[target.index].pose(1)
  1046.        elsif !target.dead?
  1047.          @spriteset.enemy_sprites[target.index].enemy_pose(1)
  1048.      end
  1049.    end
  1050.    $game_temp.forcing_battler = nil
  1051.    if @common_event_id > 0
  1052.      common_event = $data_common_events[@common_event_id]
  1053.      $game_system.battle_interpreter.setup(common_event.list, 0)
  1054.    end
  1055.    @phase4_step = 7
  1056. end

  1057. def update_phase4_step7
  1058.    
  1059. #我们询问玩家死亡和是一名球员或敌人…
  1060. #这些线的运行和待机动画的…
  1061.    if @active_battler.is_a?(Game_Actor) and !@active_battler.dead?
  1062.      @spriteset.actor_sprites[@active_battler.index].pose(1)
  1063.    elsif !@active_battler.dead?
  1064.      @spriteset.enemy_sprites[@active_battler.index].enemy_pose(1)
  1065.    end

  1066.    $game_temp.forcing_battler = nil
  1067.    if @common_event_id > 0
  1068.      common_event = $data_common_events[@common_event_id]
  1069.      $game_system.battle_interpreter.setup(common_event.list, 0)
  1070.    end
  1071.    @phase4_step = 1
  1072. end

  1073. #这是一个额外的…没有这个动画而无法正常工作的。.

  1074. def update
  1075.    if $game_system.battle_interpreter.running?
  1076.      $game_system.battle_interpreter.update
  1077.      if $game_temp.forcing_battler == nil
  1078.        unless $game_system.battle_interpreter.running?
  1079.          unless judge
  1080.            setup_battle_event
  1081.          end
  1082.        end
  1083.        if @phase != 5
  1084.          @status_window.refresh
  1085.        end
  1086.      end
  1087.    end
  1088.    $game_system.update
  1089.    $game_screen.update
  1090.    if $game_system.timer_working and $game_system.timer == 0
  1091.      $game_temp.battle_abort = true
  1092.    end
  1093.    @help_window.update
  1094.    @party_command_window.update
  1095.    @actor_command_window.update
  1096.    @status_window.update
  1097.    @message_window.update
  1098.    @spriteset.update
  1099.    if $game_temp.transition_processing
  1100.      $game_temp.transition_processing = false
  1101.      if $game_temp.transition_name == ""
  1102.        Graphics.transition(20)
  1103.      else
  1104.        Graphics.transition(40, "Graphics/Transitions/" +
  1105.          $game_temp.transition_name)
  1106.      end
  1107.    end
  1108.    if $game_temp.message_window_showing
  1109.      return
  1110.    end
  1111.    if @spriteset.effect?
  1112.      return
  1113.    end
  1114.    if $game_temp.gameover
  1115.      $scene = Scene_Gameover.new
  1116.      return
  1117.    end
  1118.    if $game_temp.to_title
  1119.      $scene = Scene_Title.new
  1120.      return
  1121.    end
  1122.    if $game_temp.battle_abort
  1123.      $game_system.bgm_play($game_temp.map_bgm)
  1124.      battle_end(1)
  1125.      return
  1126.    end
  1127.    if @wait_count > 0
  1128.      @wait_count -= 1
  1129.      return
  1130.    end

  1131.    # 这一战役而持有的球员
  1132.    for actor in @spriteset.actor_sprites
  1133.      if actor.moving
  1134.        return
  1135.      end
  1136.    end
  1137.    # 这是敌人…
  1138.    for enemy in @spriteset.enemy_sprites
  1139.      if enemy.moving# and $game_system.animated_enemy
  1140.        return
  1141.      end
  1142.    end
  1143.    
  1144.    if $game_temp.forcing_battler == nil and
  1145.       $game_system.battle_interpreter.running?
  1146.      return
  1147.    end
  1148.    case @phase
  1149.    when 1
  1150.      update_phase1
  1151.    when 2
  1152.      update_phase2
  1153.    when 3
  1154.      update_phase3
  1155.    when 4
  1156.      update_phase4
  1157.    when 5
  1158.      update_phase5
  1159.    end
  1160. end #==============================================================================
  1161. # 结束的snipplet
  1162. #如果你想评论,在这里只看scene_battle 4…
  1163. #我加了一些评论以来RPG没有添加任何…
  1164. #==============================================================================
  1165. end

  1166. #==============================================================================
  1167. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  1168. #==============================================================================
复制代码

作者: cmmd1    时间: 2015-10-19 20:05
邪月长啸 发表于 2015-10-17 07:33
我这有个,你试试
战斗图要做成像下面这样的

谢谢,我用了熊式横版战斗。不过还是谢谢你的热心。此帖终结。




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