> 技术文档 > RPG Maker xp:20年前的游戏引擎到底怎么样_rpg maker xp 引擎

RPG Maker xp:20年前的游戏引擎到底怎么样_rpg maker xp 引擎

首先我们来看看菜单栏

分别是  文件  编辑  视图  模式  绘图  比例  工具  游戏  帮助

File主要用于对工程进行操作,如创建工程,打开工程,保存工程

Edit主要是一些快捷操作,如复制,撤销等

View主要对层进行操作,xp中一共有三层Layer,View可以看到只显示当前层及以下层

第一层正常显示:

View进行操作:

Mode可以操作层Layer和事件Events,这二者就是xp制作rpg核心部分,Layer制作视觉效果,Events制作交互,这二者也可在下面的工具栏中直接使用。

Draw主要用于绘制场景,xp已为你准备好了素材,你只需要用铅笔等工具在画布上绘制即可,Draw中的工具同样也可在工具栏中直接使用。

Scale用于对画布的大小进行调整。

Tools中包括数据库,材料库,脚本编辑器,声音测试器。在数据库中你可以更改角色,敌人的数值,设置属性克制关系等。在材料库中你可以对原始素材进行更改,我们现在对游戏的启动界面进行更改我们到Tools中找到Materiabase并Import导入要更改的图片,命名为001-Title01

(原来的图片会被覆盖),运行游戏,背景就会改变了。

脚本编辑器用来管理代码,rpg maker xp基于ruby语言,在看脚本代码要先了解ruby语言的语法,ruby用$代表全局变量,全局变量可以在程序的任何地方调用,xp用全局变量管理游戏的状态,系统的开关,场景的跳转等。游戏一运行,Main脚本启动。

begin # Prepare for transition Graphics.freeze # Make scene object (title screen) $scene = Scene_Title.new # Call main method as long as $scene is effective while $scene != nil $scene.main end # Fade out Graphics.transition(20)rescue Errno::ENOENT # Supplement Errno::ENOENT exception # If unable to open file, display message and end filename = $!.message.sub(\"No such file or directory - \", \"\") print(\"Unable to find file #{filename}.\")end

Graphics.freeze冻结当前画面(为了防止$scene初始化闪烁),$scene完成初始化,Scene_Title的main方法启用,此时就出现了开始菜单,Graphic.transition(20)结束冻结。来到Scene_Title类,

 def main # If battle test if $BTEST battle_test return end # Load database $data_actors = load_data(\"Data/Actors.rxdata\") $data_classes = load_data(\"Data/Classes.rxdata\") $data_skills = load_data(\"Data/Skills.rxdata\") $data_items = load_data(\"Data/Items.rxdata\") $data_weapons = load_data(\"Data/Weapons.rxdata\") $data_armors = load_data(\"Data/Armors.rxdata\") $data_enemies = load_data(\"Data/Enemies.rxdata\") $data_troops = load_data(\"Data/Troops.rxdata\") $data_states = load_data(\"Data/States.rxdata\") $data_animations = load_data(\"Data/Animations.rxdata\") $data_tilesets = load_data(\"Data/Tilesets.rxdata\") $data_common_events = load_data(\"Data/CommonEvents.rxdata\") $data_system = load_data(\"Data/System.rxdata\") # Make system object $game_system = Game_System.new # Make title graphic @sprite = Sprite.new @sprite.bitmap = RPG::Cache.title($data_system.title_name) # Make command window s1 = \"New Game\" s2 = \"Continue\" s3 = \"Shutdown\" @command_window = Window_Command.new(192, [s1, s2, s3]) @command_window.back_opacity = 160 @command_window.x = 320 - @command_window.width / 2 @command_window.y = 288 # Continue enabled determinant # Check if at least one save file exists # If enabled, make @continue_enabled true; if disabled, make it false @continue_enabled = false for i in 0..3 if FileTest.exist?(\"Save#{i+1}.rxdata\") @continue_enabled = true end end # If continue is enabled, move cursor to \"Continue\" # If disabled, display \"Continue\" text in gray if @continue_enabled @command_window.index = 1 else @command_window.disable_item(1) end

main方法初始化了基本资源,如角色,技能等。game_system初始化存储了系统的设置,如BGM等。初始化全局变量sprite使它显示菜单并加载图片。command_window调整菜单的位置,Window_Command类自动为s1,s2,s3分配索引。

 def update # Update command window @command_window.update # If C button was pressed if Input.trigger?(Input::C) # Branch by command window cursor position case @command_window.index when 0 # New game command_new_game when 1 # Continue command_continue when 2 # Shutdown command_shutdown end end end

再根据选择的索引实现对应的方法,比如0。

 def command_new_game # Play decision SE $game_system.se_play($data_system.decision_se) # Stop BGM Audio.bgm_stop # Reset frame count for measuring play time Graphics.frame_count = 0 # Make each type of game object $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 # Set up initial party $game_party.setup_starting_members # Set up initial map position $game_map.setup($data_system.start_map_id) # Move player to initial position $game_player.moveto($data_system.start_x, $data_system.start_y) # Refresh player $game_player.refresh # Run automatic change for BGM and BGS set with map $game_map.autoplay # Update map (run parallel process event) $game_map.update # Switch to map screen $scene = Scene_Map.new end

初始化资源的同时改变$scene的值,再到Main脚本中运行。跳转到Scene_Map类。xp就是这样实现场景的跳转的。

Game用于运行游戏。

Help用于查看文档。

在此处创建地图,不同的地图,xp提供了不同的原始素材。

创建地图的时候要注意遮罩规则,即Painter\'s Algorithm(画家算法),从低 Z 值到高 Z 值顺序渲染,后渲染的对象覆盖先渲染的对象,layer1先渲染,再layer2再layer3。

Events是rpg的核心玩法,选中events,右键地图方格创建新的事件

Coditions决定事件出现的条件,Graphic是事件处的图片,它可以是人物,也可以是可交互的场景,右侧是移动规则,Options可以对动画的播放进行控制,Trigger是设置事件触发的条件,可以是接触触发也可以是手动触发。Name下面的数字页代表事件页,事件的判断是从右往左,在右侧空白部分就可以编写事件了,Show Text是显示文本,你可以用它编写对话。

也可以用Control Switches对开关进行操作来设置分支选项。第二页比较常用的是场所移动

在你的门位置设置事件,使用Events中的Transfer Player进行场景的移动。

设置角色入队事件

设置箱子事件

设置坐船事件

创建林中路

我们再编辑其它的事件使游戏内容更充实

总的来说rpg maker xp时代久远,操作简单,适合新手,而且体验20年前的游戏引擎也能了解古典jrpg的制作。

rpg maker xp还有许多功能待你发现,也可在此基础上创新,动手书写属于你自己的故事吧。

游戏测试视频链接用20年前的游戏引擎rpg maker xp制作古典jrpg游戏_游戏热门视频

DeskQos工作室