赞 | 189 |
VIP | 627 |
好人卡 | 188 |
积分 | 95 |
经验 | 171230 |
最后登录 | 2023-6-18 |
在线时间 | 5073 小时 |
Lv4.逐梦者 (版主)
- 梦石
- 0
- 星屑
- 9497
- 在线时间
- 5073 小时
- 注册时间
- 2013-6-21
- 帖子
- 3580
|
原因是战斗开始之前要有很多准备工作,包括设置敌人队伍,设置是否可以逃跑等等,这些如果没有设置好就直接进入战斗场景当然会报错。
我提示你一个方法,你可以按照这个思路找找脚本。
方法一:首先,事件[战斗处理]是能够直接进入战斗的,关于[战斗处理]在脚本的解释器类 Interpreter 中,在 Interpreter2 分割定义里面有所有命令代码的标志,在这里我们看到[战斗处理]是command_301,找到它的定义之后就会看到以下代码:- def command_301
- # 如果不是无效的队伍
- if $data_troops[@parameters[0]] != nil
- # 设置中断战斗标志
- $game_temp.battle_abort = true
- # 设置战斗调用标志
- $game_temp.battle_calling = true
- $game_temp.battle_troop_id = @parameters[0]
- $game_temp.battle_can_escape = @parameters[1]
- $game_temp.battle_can_lose = @parameters[2]
- # 设置返回调用
- current_indent = @list[@index].indent
- $game_temp.battle_proc = Proc.new { |n| @branch[current_indent] = n }
- end
- # 推进索引
- [url=home.php?mod=space&uid=370741]@Index[/url] += 1
- # 结束
- return false
- end
复制代码 在这里设置了许多临时变量,但是并没有看到场面转移到战斗画面的迹象,其实不是这样的,注意中间的那个设置战斗调用标志,$game_temp.battle_calling = true,搜索之,看到在Scene_Map下有与之相关的字段:- # 不在主角移动中的情况下
- unless $game_player.moving?
- # 执行各种画面的调用
- if $game_temp.battle_calling
- call_battle
- elsif $game_temp.shop_calling
- call_shop
- elsif $game_temp.name_calling
- call_name
- elsif $game_temp.menu_calling
- call_menu
- elsif $game_temp.save_calling
- call_save
- elsif $game_temp.debug_calling
- call_debug
- end
- end
复制代码 以及下面的call_battle方法:- def call_battle
- # 清除战斗调用标志
- $game_temp.battle_calling = false
- # 清除菜单调用标志
- $game_temp.menu_calling = false
- $game_temp.menu_beep = false
- # 生成遇敌计数
- $game_player.make_encounter_count
- # 记忆地图 BGM 、停止 BGM
- $game_temp.map_bgm = $game_system.playing_bgm
- $game_system.bgm_stop
- # 演奏战斗开始 SE
- $game_system.se_play($data_system.battle_start_se)
- # 演奏战斗 BGM
- $game_system.bgm_play($game_system.battle_bgm)
- # 矫正主角姿势
- $game_player.straighten
- # 切换到战斗画面
- $scene = Scene_Battle.new
- end
复制代码 在这里我们看到了画面跳转的语句,但是在这之前还要记录地图BGM并且演奏战斗BGM。
方法二:在编辑模式中,“战斗测试”可以进入战斗场景,搜索之,在Scene_Title里面:- def battle_test
- # 载入数据库 (战斗测试用)
- $data_actors = load_data("Data/BT_Actors.rxdata")
- $data_classes = load_data("Data/BT_Classes.rxdata")
- $data_skills = load_data("Data/BT_Skills.rxdata")
- $data_items = load_data("Data/BT_Items.rxdata")
- $data_weapons = load_data("Data/BT_Weapons.rxdata")
- $data_armors = load_data("Data/BT_Armors.rxdata")
- $data_enemies = load_data("Data/BT_Enemies.rxdata")
- $data_troops = load_data("Data/BT_Troops.rxdata")
- $data_states = load_data("Data/BT_States.rxdata")
- $data_animations = load_data("Data/BT_Animations.rxdata")
- $data_tilesets = load_data("Data/BT_Tilesets.rxdata")
- $data_common_events = load_data("Data/BT_CommonEvents.rxdata")
- $data_system = load_data("Data/BT_System.rxdata")
- # 重置测量游戏时间用的画面计数器
- Graphics.frame_count = 0
- # 生成各种游戏对像
- $game_temp = Game_Temp.new
- $game_system = Game_System.new
- $game_switches = Game_Switches.new
- $game_variables = Game_Variables.new
- $game_self_switches = Game_SelfSwitches.new
- $game_screen = Game_Screen.new
- $game_actors = Game_Actors.new
- $game_party = Game_Party.new
- $game_troop = Game_Troop.new
- $game_map = Game_Map.new
- $game_player = Game_Player.new
- # 设置战斗测试用同伴
- $game_party.setup_battle_test_members
- # 设置队伍 ID、可以逃走标志、战斗背景
- $game_temp.battle_troop_id = $data_system.test_troop_id
- $game_temp.battle_can_escape = true
- $game_map.battleback_name = $data_system.battleback_name
- # 演奏战斗开始 BGM
- $game_system.se_play($data_system.battle_start_se)
- # 演奏战斗 BGM
- $game_system.bgm_play($game_system.battle_bgm)
- # 切换到战斗画面
- $scene = Scene_Battle.new
- end
复制代码 前面那些都是基础工作,但是我们仍可以看到,在战斗之前要设置角色(如果已经在游戏中可不必设置),设置敌人队伍,战斗中标志,允许逃跑,播放BGM,所以你就应该知道怎么去调用Scene_Battle了 |
|