Project1

标题: 如何实现教学性质的战斗处理 [打印本页]

作者: pdjtjdds    时间: 2013-10-10 10:28
标题: 如何实现教学性质的战斗处理
    向各位高手请教,如果想要实现这样一种效果:遇到怪物后,怪物会提出一个问题,回答正确玩家攻击怪物,怪物无法反击,回答错误则怪物进行攻击,玩家无法反击。之后回合跟此相似,直到怪物或玩家没血为止。
   请问这种效果如何实现,谢谢!
作者: 熊喵酱    时间: 2013-10-10 10:39
用事件吧
不用戰鬥處理
作者: pdjtjdds    时间: 2013-10-11 09:29
用事件总感觉比较繁琐哈,有没有简便一点的方法呢?
作者: pdjtjdds    时间: 2013-10-11 09:45
比如说如果使用顺序结构,每一回合都要有很多步骤(判断血量,插入文字、插入选项、攻击动画、减少血量等等),太麻烦。而如果使用循环结构,想要实现随机出题就很难办.......
作者: 喵呜喵5    时间: 2013-10-11 09:47
范例工程
(新建一个工程,用附件中的Data替换掉新工程中的Data)

Data.rar

201.68 KB, 下载次数: 107


作者: pdjtjdds    时间: 2013-10-11 09:50
谢谢,下下来慢慢学习哈
作者: pdjtjdds    时间: 2013-10-11 09:53
能不能麻烦喵呜喵5给简单地说下实现的原理,这样学起来也会有个方向?(不好意思,俺是新手)
作者: 喵呜喵5    时间: 2013-10-11 13:56
pdjtjdds 发表于 2013-10-11 09:53
能不能麻烦喵呜喵5给简单地说下实现的原理,这样学起来也会有个方向?(不好意思,俺是新手) ...

意思就是这种模版符合你的要求?
这个做起来很简单,就是给敌群设置一个反复执行的公共事件罢了
作者: pdjtjdds    时间: 2013-10-12 10:03
单位电脑上没装RMVA,晚上回家试验了一下,有这么几个问题:1、要想碰到的每个怪都问不同的问题,用公共事件会不会不够用?2、攻击时如何加入双方的战斗画面并显示双方血量?(要不玩的时候没有代入感)3、用事件的话如何在攻击中实现特殊道具的攻击加成?(比如说普通攻击每次减对方5血,剧情得到某件道具并使用后每次就可减对方7血)问题比较多,先谢谢啦!
作者: 喵呜喵5    时间: 2013-10-12 11:15
pdjtjdds 发表于 2013-10-12 10:03
单位电脑上没装RMVA,晚上回家试验了一下,有这么几个问题:1、要想碰到的每个怪都问不同的问题,用公共事 ...

是否需要保留原来的战斗模式?还是游戏中所有的战斗都变成这种对话战?
作者: pdjtjdds    时间: 2013-10-12 15:10
其实是想给小朋友做一个学习练习性质的小游戏,能通过调整战斗模式实现这种效果最好(我在数据库那儿折腾了好久都没成功),实在不行的话就只有让所有的战斗变成这种对话战了。
作者: pdjtjdds    时间: 2013-10-12 15:16
比如说在野外设置了多个怪物,当玩家碰到怪物后,怪物说我们赌一把吧,你答对了我的问题我就白让你打,否则你白给我打。然后怪物出题(不同的怪物题目不同,同一怪物不同的回合题目也不一样),玩家选择了正确选项,玩家攻击怪物,怪物丢了5血。之后怪物出题,玩家选了错误的选项,怪物攻击玩家,玩家丢了N血(N视不同的怪物而定),之后继续,直到一方没血为止.....
作者: 喵呜喵5    时间: 2013-10-12 15:33
pdjtjdds 发表于 2013-10-12 15:16
比如说在野外设置了多个怪物,当玩家碰到怪物后,怪物说我们赌一把吧,你答对了我的问题我就白让你打,否则 ...

就是说不需要保留默认的战斗了对吧?
今天没时间了,明天我做个模板给你
作者: pdjtjdds    时间: 2013-10-12 15:39
这真是太感谢了
作者: 喵呜喵5    时间: 2013-10-13 15:19
pdjtjdds 发表于 2013-10-12 15:39
这真是太感谢了

Data.rar (205.48 KB, 下载次数: 45)

完成

重要的处理都在公共事件1里面,你自己看看,看不懂的地方请用帖子左下角的回复功能回复我(这样回复的话我会收到提醒)


作者: pdjtjdds    时间: 2013-10-14 07:31
好的,谢谢,晚上回家再好好研究。
作者: pdjtjdds    时间: 2013-10-14 09:24
喵呜喵5 发表于 2013-10-13 15:19
完成

重要的处理都在公共事件1里面,你自己看看,看不懂的地方请用帖子左下角的回复功能回复我(这样 ...

看后很受启发,较好地解决了随机出题的问题,这样每张地图的战斗用一个公共事件就可以解决了。但考虑到是面向小朋友做的教学类的小游戏,战斗时的情景能直观一些肯定会更好。比如说显示战斗中玩家和怪物(不同战斗面对的怪物也不同)的攻击动画,人物和怪物的最大血量与剩余血量,攻击后人物和怪物失掉的血量等,这样小朋友玩起来会比较有成就感。请问这些有没有比较好的解决办法?
作者: 喵呜喵5    时间: 2013-10-14 14:43
pdjtjdds 发表于 2013-10-14 09:24
看后很受启发,较好地解决了随机出题的问题,这样每张地图的战斗用一个公共事件就可以解决了。但考虑到是 ...

Project1.rar (228.76 KB, 下载次数: 51)


作者: pdjtjdds    时间: 2013-10-14 16:46
喵呜喵5 发表于 2013-10-14 14:43

非常感谢!
又,我下载了你的《尸体未命名》,但试玩过程中发现除了对话可正常显示外,其它的全是一片漆黑,请问可能是什么原因?
作者: 喵呜喵5    时间: 2013-10-14 17:24
pdjtjdds 发表于 2013-10-14 16:46
非常感谢!
又,我下载了你的《尸体未命名》,但试玩过程中发现除了对话可正常显示外,其它的全是一片漆 ...

那个不是黑屏,是游戏最开头的剧情“在黑暗中用方向键控制人物寻找电灯开关”,找到开关后就有画面了
作者: pdjtjdds    时间: 2013-10-23 15:50
喵呜喵5 发表于 2013-10-14 14:43

要先选择战斗才能选择答题,感觉第一步没有意义,请问能不能把选择战斗那一步略过去?
作者: Soy_meng    时间: 2013-10-23 17:09
替换脚本"教学式战斗脚本",其实就是把与@party_command_window有关的注释掉

  1. #请不要删除本脚本上方的两个脚本

  2. class Array
  3.   def random(number)
  4.     sort_by{rand}.slice(0...number)   
  5.   end
  6. end
  7. class Game_Interpreter
  8.   def chouti   
  9.     tiku = $data_enemies[$game_troop.members[0].enemy_id].read_note('题目')
  10.     if tiku != nil
  11.       $game_variables[1] = tiku.random(1)[0]
  12.     else
  13.       msgbox "这个敌人没有设置题目"
  14.       exit
  15.     end
  16.   end
  17.   def direndonghua
  18.     enemy = $game_troop.members[0]
  19.     index = $data_enemies[enemy.enemy_id].read_note('战斗动画')        
  20.     return true if !index   
  21.     false
  22.   end
  23. end
  24. class Game_Party < Game_Unit
  25.   def max_battle_members
  26.     return 1
  27.   end
  28. end
  29. class Window_ActorCommand < Window_Command
  30.   def make_command_list
  31.     return unless @actor
  32.     add_attack_command
  33.     add_skill_commands
  34.     add_item_command
  35.   end
  36. end
  37. class Window_BattleStatus < Window_Selectable
  38.   def item_max
  39.     1
  40.   end
  41.   def draw_item(index)
  42.     actor = $game_party.battle_members[index]
  43.     rect = item_rect(index)
  44.     draw_actor_face(actor, rect.x + 10, rect.y + 1)
  45.     draw_actor_simple_status(actor, rect.x + 120, rect.y)
  46.   end  
  47.   def draw_actor_simple_status(actor, x, y)
  48.     x += 20   
  49.     draw_actor_name(actor, x, y)   
  50.     draw_actor_icons(actor, x, y + line_height * 2)
  51.     draw_actor_class(actor, x + 120, y)
  52.     draw_actor_hp(actor, x + 25, y + line_height * 1 + 10)
  53.     draw_actor_mp(actor, x + 25, y + line_height * 2 + 10)
  54.   end
  55. end
  56. class Scene_Battle < Scene_Base
  57.   #--------------------------------------------------------------------------
  58.   # ● 生成所有窗口
  59.   #--------------------------------------------------------------------------
  60.   def create_all_windows
  61.     create_message_window
  62.     create_scroll_text_window
  63.     create_log_window
  64.     create_status_window
  65.     create_info_viewport
  66.     #create_party_command_window
  67.     create_actor_command_window
  68.     create_help_window
  69.     create_skill_window
  70.     create_item_window
  71.     create_actor_window
  72.     create_enemy_window
  73.   end
  74.   #--------------------------------------------------------------------------
  75.   # ● 回合开始
  76.   #--------------------------------------------------------------------------
  77.   def turn_start
  78.     #@party_command_window.close
  79.     @actor_command_window.close
  80.     @status_window.unselect
  81.     @subject =  nil
  82.     BattleManager.turn_start
  83.     @log_window.wait
  84.     @log_window.clear
  85.   end
  86.   #--------------------------------------------------------------------------
  87.   # ● 更新信息显示的显示端口
  88.   #--------------------------------------------------------------------------
  89.   def update_info_viewport
  90.     #move_info_viewport(0)   if @party_command_window.active
  91.     move_info_viewport(128) if @actor_command_window.active
  92.     move_info_viewport(64)  if BattleManager.in_turn?
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ● 开始角色指令的选择
  96.   #--------------------------------------------------------------------------
  97.   def start_actor_command_selection
  98.     @status_window.select(BattleManager.actor.index)
  99.     #@party_command_window.close
  100.     @actor_command_window.setup(BattleManager.actor)
  101.   end
  102.   #--------------------------------------------------------------------------
  103.   # ● 信息窗口打开时的更新
  104.   #    在状态窗口关闭完成前,信息窗口的打开度设置为 0 。
  105.   #--------------------------------------------------------------------------
  106.   def update_message_open
  107.     if $game_message.busy? && !@status_window.close?
  108.       @message_window.openness = 0
  109.       @status_window.close
  110.       #@party_command_window.close
  111.       @actor_command_window.close
  112.     end
  113.   end
  114.   def start_party_command_selection
  115.     unless scene_changing?
  116.       refresh_status
  117.       @status_window.unselect
  118.       @status_window.open
  119.       if BattleManager.input_start
  120.        command_fight
  121.       else
  122.         #@party_command_window.deactivate
  123.         turn_start
  124.       end
  125.     end
  126.   end
  127.   
  128.   def command_attack
  129.     $game_temp.reserve_common_event(1)
  130.     turn_end
  131.   end
  132.   def apply_item_effects(target, item)
  133.     target.item_apply(@subject, item)
  134.     refresh_status
  135.   end
  136. end
复制代码

作者: pdjtjdds    时间: 2013-10-24 07:22
Soy_meng 发表于 2013-10-23 17:09
替换脚本"教学式战斗脚本",其实就是把与@party_command_window有关的注释掉

非常感谢!
作者: pdjtjdds    时间: 2014-2-25 14:28
喵呜喵5 发表于 2013-10-14 14:43

请问有两个地方有没有办法给进一步优化一下:1、战斗中敌我双方的攻击均是面向全体的,时间长了会有些单调,有没有办法改成对单个人(或怪物)的?2、选题时每个题目出现的几率一样,这样导致有的题目会频繁的重复出现,能不能设计一下,减少前面出现并回答正确的题目出现的几率?
作者: 周子沐大师    时间: 2014-2-25 18:44
比较简单……
1、先显示题目,最好用AB、12之类的序号,方便玩家选择。
2、然后新建判断。
3、接着新建分支。
4、第一个分支是战斗处理。
5、第二个是剧情发展。

万能的事件啊!!!{:2_275:}
作者: pdjtjdds    时间: 2014-2-27 10:57
不明觉厉,看来还是得加强学习啊。
作者: 喵呜喵5    时间: 2014-3-3 18:56
关于你的第一个要求……
本来写这个脚本的时候我考虑的就是一个敌人和一个主角的情况,多个战斗角色的情况我得再稍微想想怎么实现……

第二个不抽取重复题目的功能已经实现,只有全部题目抽完之后才能重新抽到重复的题目

Project1.rar (237.98 KB, 下载次数: 62)
作者: pdjtjdds    时间: 2014-3-4 10:13
收到,谢谢,帮了大忙了。
最近也在学习脚本,刚开始只是想做一个非常简单的小游戏,现在工作没做多少,想法却越来越多,看来做游戏真不是件容易的事呢。




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