RPG rpgmakerxp素材 xp 出生点人物朝向

(转)完全不懂RPG&Maker&XP的来这里看下[一]
此文字教程,是面向完全不懂RPG Maker
XP的新手而撰写。它将从最基本的入门开始,涉及了所有的事件条目,教你制作一个完全默认的游戏,不涉及任何脚本的修改。当你遵循此教程做完你的第一个游戏之后,应该已经能对RPG
XP的基本功能有所了解。在学习的过程中,欢迎提出问题,不过请保证你的描述清晰具体,并且是基于认真思考之后依旧留存的疑问。
本教程的目录(楼数)
1-1 RM开始:新建工程,保存工程,测试游戏
1-2 RM开始:绘制地图
2-1 数据库设置:角色相关【职业、特技、物品、武器&防具】
2-2 数据库设置:敌人相关【敌人、队伍】
2-3 数据库设置:状态、动画相关
2-4 数据库设置:地图图块、系统相关
2-5 数据库设置:自定素材导入【如何使用自己的素材?】
3-1 地图事件设置剧情篇:显示文章、选择项、增减物品金钱、开关变量操作、条件分歧、移动路线等
3-2 地图事件设置地图篇:场所移动、显示图片、天气操作、渐变和画面色调、地图设置等
3-3 地图事件设置战斗篇:战斗处理、我方和敌方的参数增减等
地图事件设置其他篇:禁止&呼叫菜单和存档、更改窗口图形、返回标题、BGM等相关音频播放等
4-1 补充部分:计时器、数值输入、标签、循环
4-2 补充部分:公共事件的使用法
4-3 补充部分:数据库“队伍”里面的事件设置法
4-4 补充部分:测试游戏时候所用的Debug模式
4-5 补充部分:制作可以发布的完整游戏包
1-1 新建工程
咳,那么安装RMXP的部分我就跳过了,大家应该都知道怎么安装吧- -|||
打开RMXP之后,可以在左上角看到一个白纸图标,它代表新建一个RMXP工程,也就是你制作的的游戏。当然,你也可以通过“文件”菜单里面的“新建工程”来完成这个功能。
选择了新建工程之后,就会弹出这样的窗口。
其中,“文件夹名”代表你放游戏的那个文件的名称,可以随意自己取一个,方便自己找就行了,不过建议是和你游戏的名字一样比较好。然后,“标题”代表你这个游戏的名字,比如《勇者大冒险》之类的……=
=|||当你命名了文件夹名的时候,文件路径就会被自动生成在“位置”一栏。你也可以自己定义一个比较容易找的位置(使用右边那个“...”的按钮来设定路径)。
新建工程之后,就会出现这样的界面。当你在游戏工程里做了设置之后,可以单击左数第三个图标——“保存”你的设定。当然,在“文件”菜单下选择保存也可以。按下右上角的红叉会关闭工程,如果你做出了更改而忘记保存,它同样会弹出对话框询问你是否保存更改。
当你新建了你的工程以后,就可以在设定好的路径下看到你的游戏文件夹了。其中,画红圈的那个Game.exe文件是你的游戏执行程序,只要打开它就可以直接进行游戏。而蓝圈的那个是你的工程文件,当你需要编辑这个游戏工程的时候,就打开这个。
不过,你不需要每次都通过点击Game.exe文件测试你做好的游戏,因为RMXP自带游戏测试功能,你只要在打开工程的时候按下F12就能测试了。当然,在你工程的图标面板上倒数第一个绿色三角形的图标也是测试游戏。
(注意:在你测试游戏的时候,无法编辑工程。但是如果是直接点击Game.exe进行测试就可以。)
而测试游戏的时候,你会发现角色在一片小小的空空的草地上晃来晃去,什么都没有发生-。-虽然按下ESC可以调出菜单,但是也仅此而已……
不用着急,因为这只是个开始而已。接下来我会教大家怎么绘制比较基本的地图,然后通过数据库、事件等,将你们的第一个游戏丰满起来,成为一个真正的游戏。
1-2 绘制地图
接下来,我们开始画出RPG游戏里的地图,要注意的是,这个教程只使用默认图块。在工程左下角的区域你能够看到你所有的地图文件,当然现在只有一张-
-|||。想添加新的地图或者更改当前的地图,只要在上面单击右键就能看到选择菜单。
当你选择了“新建地图”指令的时候,就会弹出这样的窗口。你可以在里面随意给新的地图起名字方便查找。比如说,我们给它命名为“主角的家”,作为游戏最开始的场景。地图的宽和高决定整个地图的大小,最大可以绘制出500*500的地图,但是由于大地图会很拖慢游戏的速度,所以不建议太大。然后,由于是家,所以不能选择“草原”作为绘制地图的图块,所以我们要在“背景”里面选择一个有室内图块的来采用。
顺道解释一下,“图块”就是在左边那些树啊花啊房子啊的图片——类似积木这样的东西,绘制地图就是用这些积木来拼出一张地图。于是,我们选择了“森林小镇内部”作为画主角家的房子的图块。
在下面有个“自动切换BGM”和“自动切换BGS”的选项,这是一个辅助设定,当进入这张地图的时候是否自动播放你设定好的背景音乐和背景音效,即使是不设定也可以,因为在后面的事件操作里,我会教大家怎么播放BGM。
右边是一个“遇敌列表”,也就是设置在这张地图上会出现的“地雷”式敌人,由于主角在家一般不太可能遇到敌人,所以这个我们也暂时不管-
-|||,等教完大家如何在数据库里设置敌人队伍之后,再来顺便教一下这里的部分。
当你新建好了地图之后,就能够看见上面的那些图块随着你选择了“森林小镇内部”而变成室内的陈设了。然后是比较重点的部分:我们要利用地图的层和绘制工具来画出一个房间。
这些图标就是画地图所需要用到的。从左开始的前四个图标为地图层的切换。整体来讲,一张地图被分为四层,第一层常用来画地面、河流、天花板和墙壁等,第二层则用来画墙壁、陈设,如果是野外的地图可能还需要画一些遮蔽。第三层添加最后的点缀,比如花草树木、放在第二层物品之上的物品(如桌子上的茶杯),或者一些需要挡住第二层东西的设施,而第四层则是设置事件的层。现在我们暂时不需要用到事件层,所以将它略过。整个地图层的优先级是:第三层&第二层&第一层,也就是说第三层的东西将在最前面显示。
接下来的五个图标是绘制地图的工具,铅笔、方形、圆形、填充和选择。它们的应用法则和正常的画图程序很相像,只不过笔刷变成了左边那些图块罢了。右边三个放大镜表示地图的比例尺,分别有1:1、1:2、和1:4三种,可以使用它们预览出大小比例不等的地图,当地图尺寸较大的时候比较方便。不过这只是预览时尺寸的改变,实际地图还是会以1:1状态下的大小为准。
好,现在我们来看左边的图块。首先是最上面一排,这些图块比较特殊,它们是被称为自动元件的东西,也就是不同的地图图块可以“公用”的部分。一般情况下,它们可以是地图的天花板、地面、草地、水面、瀑布等,而且在不同的图块里可以通用。另外,画地图的时候自动元件也有一些技巧,这个在后面我会给出别人的教程让大家参考。
当前被选中的这个空白部分等同你的地图的橡皮擦,当你绘制出错的时候,可以用这个图块将它们擦去。要注意的是,只有左上角这个图块才是橡皮,别的空白部分都不是,如果用那些来擦,可能会出现通行错误。
(上面这张,左上角那个图块,才是橡皮)
(这个就不是橡皮,虽然它也是空白图块= =)
选择第二个图块(天花板),用填充工具将整个地图填充上这个图块。现在你看到屏幕变成一片漆黑了。制作游戏开头的时候,有时有些人也会用这种效果来制造黑幕-
-不过我本人不是很喜欢用就是了。
使用第二排的第一个图块(木地板),利用矩形工具和铅笔工具即可勾勒出整个房子的大概轮廓。当然你也可以用自动元件里面的地毯来绘制地面,不过这里主角不是有钱人,住不起那么奢侈的房子-
-所以只是用木地板画就好。记得要给房子留一个门(通常会留在下面,如这张图就是,注意到房子下方有一个格子的凸出,那就是门)。
接下来,绘制墙壁。这里注意一个绘画小技巧:当你需要将两个或者多个格子的图块一起画上去的时候,只要在选择图块的时候按住鼠标左键并且拖动,就可以选定矩形范围的图块画上去了。此时图块的单位就以你选定的那个范围为一单位,画的时候也是如此。
但是,在绘制边缘墙壁的时候,会出现这样的问题,某些图块有一部分空白,让地图上也出现了空白,怎么办呢?这时候就要利用不同层的叠加来解决这个问题。解决办法是——切换到上一层(比如此例中可以切换到第二层),将此图块绘制在同样的位置,而第一层里面可保持原来的木地板图块。按一下F4预览看看吧,这样这个问题就能解决了。此为运用层的优先级画地图的基本技能,需要能够熟练掌握。
&(出现的绘制问题)&&&&&&&
(解决之后的效果)&
(方法:运用不同层的优先级)
然后,第二层绘制部分,加上处在“下方”的陈设。所以大家可能看到这张地图的一些图块上有不少缺口,没关系,在第三层我们可以慢慢补上。简而言之,凡是你觉得应该会被遮挡住的东西,都可以画在第二层。
然后切换到第三层,添置细节:挡住凳子的桌子边角,放在桌子上面的茶壶,床头柜上的圣经(- -),以及灶台前面的柴薪等等。
F4可以切换暗淡显示(区分层用),一般情况下可以使用F4来预览最后绘制完成的效果。这样主角的房子就算绘制完成了。当然本人不是美工-
-也不能画得那么漂亮……只是告诉大家一些基本用法。
2-1 角色相关
数据库是RPG游戏的重头,角色、物品、武器、敌人等东西都要预先在这里设定好,之后再做剧情的时候就可以直接从这里调用。其实在默认的新工程里面,角色的数据都是被设定过了一个默认数值的,但是如果你不想让你的主角是万年阿尔西斯的话,就要在数据库里自行调整。那么首先我们就用F9或者在“工具”里面打开数据库吧。
现在在数据库里面点选第一个标签“角色”,即可设定我方角色的名字以及各项数值。接下来我们从左到右慢慢解释,并且你也可以跟着我一起来设定属于自己的角色。
首先,学会设置角色的数量,也就是说有些RPG里面角色不需要8个那么多,而有些游戏里面,角色需要十几个。那么我们可以点选左下角的那个“更改最大值”,比如我这个这个游戏只想要4个角色,那么就在里面改为4。点击确认之后,你就会发现从第四个角色开始,下面的那些多出来的角色都被删掉了。而如果你选择了10个或者更多个,你会发现多出来了几个没有名字的空白角色。
然后就是关于每个角色的详细设定了,拿第一个主角为例,在名称里面可以直接修改为你喜欢的人名。名称下面有个职业选择,这是关系到你这个角色可以拿什么武器可以学习什么技能的设置,我们待会儿在“职业”部分会详细讲到,现在先放在这里。然后是这个角色的初期等级和最终等级,也就是他的升级范围,比如你希望他登场时是10级,最高只能练到80级,那么就分别填上10和80。然后就是EXP曲线了——它是你这个角色升级需求经验的一个对照表。点击那个向右的小三角,你就能看到这样的窗口,通过微调左右两边的数值,来得到一个你认为比较合适的升级曲线。比如说,希望他每次升级要很多经验,就把数值调高,反之则调低。
接下来是关于角色行走图和战斗图的设定。行走图就是在游戏执行的时候在地图上跑来跑去的那种小娃娃=
=(众:废话……)设置行走图,只要在“角色脸谱”下面那个原本的行走图上双击即可打开选择窗口。在这里我们就随便选一个好了。战斗图同样方法来设置,不过要记住,选择的战斗图要尽量和行走图的样子一致,否则在走路时一个样子战斗时突然成另一个人会很囧(美少女战士变身?OTZ||||||)
接下来我们看右边的那些五颜六色的三角形,它们其实是角色能力增幅的曲线设置。那么,我只拿其中MAXHP(最大生命)的设置做说明,其他的设置方法和这个是一样的。双击MAXHP的三角曲线打开设置窗口,可以看到左边有ABCDE五个按钮,这个是系统默认给你预置的五个等级,点击可以让系统自行给你设定一个范围。一般来说,E设定的是最平缓的,也就是最小生命和最大生命差值比较小,增幅也比较小的。而A则是个大陡坡,1级是700到了99级就变成7000那种-
-。所以数据方面自己也要学会均衡,以免让游戏难度出现问题。
而如果你希望自己来设置,可以点击“生成曲线”然后在弹出的窗口里设置1级的最大生命和99级的最大生命,然后让系统帮你制造出增值曲线。那个“早熟”与“晚熟”的设定是你增幅快慢的先后顺序,比如说,如果你比较“早熟”,可能在游戏前几十级的时候你的MAXHP升级增长特别快,每升一级1可以增加100多那样子,但是到了后期升一级可能只有30多。“晚熟”就是相反的效果。
追加一点(感谢13号地图君友情提醒{/hx}):你也可以自己用鼠标在上面画出你觉得合适的能力曲线,比如可以制造出在中间一段时间升级突然很快到后期越升级生命反而越低之类的角色……
那么,除了MAXHP之外其他的参数也同样可以设定。角色可增长的四种能力参数为力量、灵巧、速度和魔力,力量决定了物理攻击和物理技能的强弱,灵巧决定回避率和逃跑成功率,速度决定行动顺序和逃跑成功率,魔力决定魔法特技的威力,这些在设定技能的时候我会详细讲到。接下来是关于角色的初期装备,这个很简单,只要到时候在职业和武器装备里面设定好即可。右边那个“固定”是设置要不要让这个装备不能够卸下来(毕竟裸奔总是不好的-w-),但是即使是在这里固定了装备,游戏里依然能用事件操作将其更换。
接下来我们说关于角色职业设定的问题。从最左边开始,最大数值的设定和职业名字的设定都和角色一样,就无需赘述了,你可以给你的角色职业命名为“间谍”或者“卖白菜的”之类的,随你喜欢-
-通常情况下,有几个角色就设置几个职业与其对应,但是也可以一对多——也就是说,想设置“同行”的角色也是没问题的。但是要注意,同一个职业的话可装备的武器、属性状态影响以及以及可学习的技能都会是一模一样的,如果两个角色在这些方面有微妙差异,还是建议另开一个职业填上相同名字即可。
然后是职业位置——分为前卫、中卫、后卫三种(怎么像足球……|||),它们代表战斗中角色挨打的概率,简而言之就是战斗时的“站位”,比较靠前的角色自然挨打的频率比较高。所以如果是不耐打的角色,建议给他安排“后卫”的职业。
然后是关于装备和武器的设定,这个很容易懂,当你勾选上一些装备之后,它们就能被这个职业的角色所装备。右边是属性状态的有效度问题,这个我们在后面讲到属性和状态部分的时候我再详细说,此时可以暂时略过。
右下角就是设置角色可以学习的特技了,按delete可以删除现有特技,而在空白处双击一下即可打开下面的窗口,然后就能增加新的可学习的特技以及习得该特技的等级,那么当该职业的角色升级到这个等级时,就能掌握相应的技能。
接下来我们说说特技的设定。它是无论角色和敌人都会使用到的,所以如果你有一些技能敌我皆用,数据一定要调试平衡。左边最大值和名称更改略过不提,从右边开始我们继续挨个讲。
图标——这个是在游戏的技能窗口中显示出来的,一般情况下一个直观的图标可以让人对这个技能的属性有所了解,比如这个技能的图标是一把剑,那么可能就是物理攻击的技能,如果是一团火,可能是魔法,如果是十字架,可能是治疗……等。按右边的小三角就可以在弹出的窗口中选择合适的技能图标了,这个步骤就不截图了,很简单。接下来是技能说明,这个也是自己随便写,不用多说。不过注意100个字的字数限制,超过字数它会自动提示你。
效果范围——这个决定了技能的作用对象,在下拉菜单里我们可以看到有对敌、对己、对己(HP为0)等范围。如果将技能作用于敌方,多半是攻击技能,作用为自己的时候,多半是治疗系技能。不过要注意,如果己方死亡,那么只有“己方单体(HP
0)”的技能才对其发挥作用。所以多半设定了该范围技能的被看作复活的技能。其实怎么说呢……默认的技能里面把各个范围的技能都涉及到了,可以通过研究它们来掌握不同技能的设定。
可能使用时——这个决定技能的使用时机,如果是“平时”,那么无论战斗还是非战斗场合都可以自由使用该技能。如果设定为“战斗中”,则只能战斗中使用。而“菜单中”则是非战斗场合使用的技能。当然,你也可以设计“不能使用”的技能……虽然能用到的可能很小=
使用方、对象方的动画——这个也很直观,首先在“动画”那里画好你的技能动画,然后在这里设置,使用方是发动技能的那个人显示的动画,而对象方则是被技能作用的那个人。战斗时,会先播放使用方的动画,然后是对象方的动画。
菜单画面使用的SE——对于默认无法在战斗中使用的技能,在菜单里直接使用没有动画,如果想表现技能使用了一下的效果,可以在这里设置一个音效。按下右边的小三角,然后在SE列表中选择即可。你也可以通过“音量”和“音调”将默认的音效改动一些。“播放”可以预览你调整好的音效,选择好之后按确定即可。
接下来就是重点的数据方面的设置了,没有它们你的技能动画再华丽也只能打出数字零。那么首先,消耗SP……这个不用我说了吧-
-,设置技能的SP损耗。“威力”是技能的一个基本数值,在这里比较重要的是,如果你要设置治疗技能,除了在上面把攻击范围设置为我方之外,这里的威力值要设置为负数。否则就成了攻击我方队员的*****技能了=
然后是那个攻击力F……唉,这个我都不想罗嗦了,“帮助”里面就有详细说明,所以照搬过来吧。(再次小贴士:请善用右上角的小问号或者右键单击那些文字选择“帮助”)
下面的力量F灵巧F之类的也都以此类推,不过要区分一下“命中率”和“回避F”的区别:命中率指代的是你这个技能本身发动的成功率,它与敌人的系数毫无关系,也就是说这代表你自己角色念咒发招的失败可能,如果设置为100%,那么就绝对能发动成功。而“回避F”则是基于技能已经打出去的前提下,是否考虑敌人的速度和回避能力的影响,如果是0,那么就无视敌方的闪避能力直接命中,如果加上系数,可能高敏捷和速度的敌人就会有概率躲过你的技能攻击。分散度指代的是该技能的一个最终威力浮动,也就是说,如果一个技能的攻击力计算完之后是100,那么如果加上10分散度,最终可能是110-90之间的数值。
右边有个属性和状态的设置,这个依然,等讲到属性状态的时候我再来说。
顺便提醒一下:按F1的话,可以在“帮助”的目录里找到战斗和技能相关的计算式,可以利用它们帮助你计算游戏数值来调节平衡度。
说完了技能说物品吧,这个只能为角色所使用的东西设定起来容易多了,只要针对己方的数值来设定即可。当然这并不绝对,因为物品也可以设置为攻击敌人的道具。接下来我们就分别说说好了。
最大数值名称说明动画等等这些和技能设定一样的东西我们都可以不用说了,直接看下面的那些数据设定。价格是指该物品在商店出售的时候的价格,也可以根据你自己的剧情随意设定。“消耗”与“不消耗”也是很直观的设置,如果吃完就没了,那就是消耗品。可以反复使用的,那是不消耗品。再右边的是个能力值增长,也就是说使用该物品之后会使己方的数值上升多少多少。具体数值在选择了上升项目之后,填在数字框即可。
下面有个HP回复率、回复量,也很直观,一个是代表可以回复角色当前最大生命的百分比,另一个可以直接设定数量。要注意的是它们的效果是“叠加”的,而不是“代替”的,也就是说如果你设置了回复率25,然后又设置了回复量500,那么这个药品的回复数目就是“当前角色最大HP的25%
500点”数值。SP也是同理的。需要注意的是——回复量、回复率这些东西都是可以设为负数的,也就是说,你可以利用它们做出服用之后补HP但是减少SP的药品,也可以将作用范围设置为敌方,然后制作出攻击敌人的道具——这种时候,“对象方动画”就会作用于敌人身上了。
然后是“命中率”的设置,同样决定该物品使用的成功率。多半会用在设置攻击类道具上吧,平时吃药一般都该100%命中……或者你也可以设置更低的命中率以体现战斗中慌慌张张容易把药弄洒的情况=
=(误)。其他的功能也都和技能差不多,状态属性依然放在后面说。
然后我们来说说比较重要的武器和防具部分。
先说武器……其实这都很简单,唯一要提到的是“攻击力”,这个代表你发动物理攻击的最基本伤害值,也就是说如果角色没有“攻击力”,他的力量再大,所有的物理攻击都会是0……所以一定要让角色的武器有攻击力,并且要保证角色装备着武器进行战斗。当然,你如果想制造武器没有攻击力纯依靠魔法作战的角色也可以……=
防具这里,首先看种类,一共有四种防具来设置,默认地是盾、头盔、衣服和装饰品,但是这些东西的名称是可以改变的。必须要设定的数值是物理防御和魔法防御。它们是属于由防具赋予的系数,也不会随着角色等级提升而变动,但是敌人战斗和技能伤害又会直接与其挂钩,所以最好设置多个逐步强化的装备,以防角色在后期被打得太惨。另外这里有个“自动状态”,表示在装备该防具的时候,会给角色自动附加一个状态。具体状态的设置部分,我们很快就会讲到。
2-2 敌人相关
角色设置完毕了,接下来就是角色的死对头——敌人部分了。首先点击“敌人”标签,切换到敌人的设置界面。
最大值敌人名称战斗图什么的都一目了然可以自己设置,在此不多罗嗦,右边那一串数值也是和角色设置差不多的东西,你可以自己调整,注意敌我实力平衡即可。测试战斗的方法后面我会讲到。随后我们可以看到设置打败这个敌人能够获得的“EXP”、“金钱”和“宝物”,在“宝物”的设置里我们可以设置该敌人掉落的战利品,并且在“出现”的数字栏里面填上掉落物品的概率。
接下来比较重要的部分是设置敌人的“行动”,这也是是战斗增加乐趣的重要环节。按Del或者点击右键删除都可以去掉你不喜欢的行动。双击空白处打开设置行动的窗口。
在这里我一个一个讲:首先是条件——这个如果不设置的话,就会默认为该行动只要一进入战斗就有可能被用,而具体概率在下方就可以设置。然后我们来分别说说这四种条件:
回合——设定固定的回合数让这个敌人有一定概率做出该行动。固定会采用a+bx的形式(学过一元一次方程的都该懂这个吧-
-)也就是说,如果将第一个数字填上2,第二个数字填上3,敌人的行动回合就是2+3x,也就是第2回合(x=0),第5回合(x=1),第8回合(x=2)……等这些回合行动,直到战斗结束为止。
HP多少以下——这个也很好理解,当该敌人的生命在多少百分比之下的时候,做出行动。可以用这个制作当敌人觉得自己快不行了的时候的垂死一击,或者补血行动之类的-
等级多少以上——这个不是指敌人,而是指我方的等级。可以利用这个做出当我方等级很低的时候,敌人很暴虐用很厉害的大招虐主角;而当角色等级很高的时候,敌人会逃离战斗之类的……
开关XXX为ON——这个……呃,涉及到开关的运用,一般情况下来说制定一些特殊的情况,这个我们在讲开关用法的时候会顺便提及。
设置完条件,就可以设置行动了。基本行动有攻击、防御、逃跑、什么也不做四种,这个也很明白不用多说。特技方面,你就可以从事先设定好的特技列表里面选择出你需要让敌人使用的特技就可以了。概率的数字大概是按照多少成的可能来算的,比如设置为7的话,就是七成可能。
属性状态部分依旧放在后面说,接下来我们看看敌人“队列”的设置。
好,现在选择“队列”标签即可打开这个比较关键的部分了,它是一切战斗的基础。首先看到这个画面,左手边依然可以设置最大队伍数量这个不用多说,从中间的设置部分来看起。名称,可以自己定也可以让电脑给你自定(自动生成名称),它会根据你调入队伍的敌人数目和种类自动为你生成队伍的名字方便记住。参考默认的队伍就能明白了,图中有两只幽灵,那么就是幽灵*2。再右边的“战斗背景”是在你测试战斗的时候显示的背景,用来调试你把敌人的位置是不是放得对(比如森林中把敌人放在树上这样的囧事=
=),和游戏的战斗背景无关,那个需要另外在“图块”选项里调整。
然后再右边就是战斗测试了,只会单独测试这一场和敌人的战斗。单击“战斗测试”,可以调整当前参战的角色和角色的等级、装备等,这样即使是测试BOSS战也可以预先设定好一个合适的等级来应对。“初始化”就是将这些角色还原为数据库最一开始设置的状态。默认战斗里,队伍最多只能有四个人。(XDDD剑同学我不厚道盗用你名字了别打我)
当你点选了画面中一只幽灵后,“删除”那个键就可以用了。你可以用“删除”或者“全部删除”清除当前队伍中的敌人,然后添加新的敌人进去。在右边的列表里是你设置好了的“敌人”部分,只要选择你需要添加的敌人,按“添加”就可以了。然后你就能看到敌人的战斗图出现在画面上,用鼠标排列一下合适的位置即可。如果懒得排,也可以点击“整列”让电脑自动帮你排成一条横队在画面最下方。你最多允许添加的敌人只有八名。然后,在下面有一个“战斗事件”,这个是专门安排在战斗中的一些特殊事件的,当我们讲了地图事件之后,我们再专门抽出时间来讲这个地方的设置。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。查看: 2605|回复: 5
RPG Maker XP 人物仓库 脚本
阅读权限150
在线时间 小时
本帖最后由 zjjxs 于
21:07 编辑
#==============================================================================
# ■ 人物仓库ver1.02正式版
# 修改了Game_Party
# 功能:
# 用来存放角色的仓库……
# 召唤画面用$scene = Chaochao_Scene_Party.new
# 其它使用说明在代码里已经备注。
#==============================================================================
class Chaochao_Window_PartyLeft & Window_Selectable
&&def initialize
& & super(0, 0, 320, 224)
& & self.contents = Bitmap.new(width - 32, height - 32)
& & self.index = 0
& & refresh
&&end
&&def actor
& & return @actors[self.index]
&&end
&&def refresh
& & if self.contents != nil
& && &self.contents.dispose
& && &self.contents = nil
& & end
& & @actors = []
& & for i in 0...$game_party.actors.size
& && &@actors.push($game_party.actors[i])
& & end
& &
& & @item_max = 4
& & if @item_max & 0
& && &self.contents = Bitmap.new(width - 32, (row_max+1) * 32)
& && &for i in 0...@item_max
& && &&&draw_item(i)
& && &end
& & end
&&end
&&def draw_item(index)
& & if @actors[index] != nil
& && &actor = @actors[index]
& && &text = @actors[index].name
& && &lv = @actors[index].level.to_s + & &
& && &if $game_party.chaochao.include?(actor.id) or $game_party.actors.size &= 1
& && &&&self.contents.font.color = Color.new(255, 0, 0) #不能被移动的颜色
& && &else
& && &&&self.contents.font.color = Color.new(0, 255, 0) #可以被移动的颜色
& && &end
& && &self.contents.draw_text(4, index * 32 + 32, 288, 32, text)
& && &self.contents.font.color = normal_color
& && &self.contents.font.size = 16
& && &self.contents.draw_text(4, index * 32 + 36, 288, 32,&&&Level:& &&, 2)
& && &colorx = [255.0000 - 255.0000/60 * @actors[index].level,0].max
& && &colory = [255.0000 / 60 * @actors[index].level,255].min
& && &self.contents.font.color = Color.new(colorx, colory, 0)
& && &self.contents.draw_text(4, index * 32 + 36, 288, 32,&&lv, 2)
& && &self.contents.font.color = normal_color
& && &self.contents.font.size = 22
& & else
& && &self.contents.draw_text(4, index * 32 + 32, 288, 32,&&&米有人物!&)
& & end
&&end
&&def update_cursor_rect
& & if @index & 0
& && &self.cursor_rect.empty
& && &return
& & end
& & row = @index / @column_max
& & if row & self.top_row
& && &self.top_row = row
& & end
& & if row & self.top_row + (self.page_row_max - 1)
& && &self.top_row = row - (self.page_row_max - 1)
& & end
& & cursor_width = self.width / @column_max - 32
& & x = @index % @column_max * (cursor_width + 32)
& & y = @index / @column_max * 32 - self.oy + 32
& & self.cursor_rect.set(x, y, cursor_width, 32)
&&end
&&def item_max
& & return @item_max
&&end
&&def actor?(index)
& & return @actors[index] == nil ? false : true
&&end
&&def set_index(x)
& & @index = x
&&end
end
#------------------------------------------------------------------------------
class Chaochao_Window_PartyRight & Window_Selectable
&&def initialize
& & super(320, 0, 320, 224)
& & self.contents = Bitmap.new(width - 32, height - 32)
& & self.index = -1
& & refresh
&&end
&&def actor
& & return @actors[self.index]
&&end
&&def refresh
& & if self.contents != nil
& && &self.contents.dispose
& && &self.contents = nil
& & end
& & @actors = []
& & for i in 0...$game_party.actors2.size
& && &@actors.push($game_party.actors2[i])
& & end
& &
& & @item_max = $game_party.actors2.size
& & if @item_max & 0
& && &self.contents = Bitmap.new(width - 32, row_max * 32)
& && &for i in 0...@item_max
& && &&&draw_item(i)
& && &end
& & elsif @item_max == 0
& && &
& & end
&&end
&&def draw_item(index)
& & actor = @actors[index]
& & text = @actors[index].name
& & lv = @actors[index].level.to_s + & &
& & if $game_party.chaochao2.include?(actor.id) or $game_party.actors.size &= 4
& && &&&self.contents.font.color = Color.new(255, 0, 0) #不能被移动的颜色
& && &else
& && &&&self.contents.font.color = Color.new(0, 255, 0) #可以被移动的颜色
& && &end
& & self.contents.draw_text(4, index * 32, 288, 32, text)
& & self.contents.font.color = normal_color
& & self.contents.font.size = 16
& & self.contents.draw_text(4, index * 32 + 4, 288, 32,&&&Level:& &&, 2)
& & colorx = [255.0000 - 255.0000/60 * @actors[index].level,0].max
& & colory = [255.0000 / 60 * @actors[index].level,255].min
& & self.contents.font.color = Color.new(colorx, colory, 0)
& & self.contents.draw_text(4, index * 32 + 4, 288, 32,&&lv, 2)
& & self.contents.font.color = normal_color
& & self.contents.font.size = 22
&&end
&&def update_cursor_rect
& & if @index & 0
& && &self.cursor_rect.empty
& && &return
& & end
& & row = @index / @column_max
& & if row & self.top_row
& && &self.top_row = row
& & end
& & if row & self.top_row + (self.page_row_max - 1)
& && &self.top_row = row - (self.page_row_max - 1)
& & end
& & cursor_width = self.width / @column_max - 32
& & x = @index % @column_max * (cursor_width + 32)
& & y = @index / @column_max * 32 - self.oy
& & self.cursor_rect.set(x, y, cursor_width, 32)
&&end
&&def item_max
& & return @item_max
&&end
&&def actor?(index)
& & return @actors[index] == nil ? false : true
&&end
&&def set_index(x)
& & @index = x
&&end
end
#------------------------------------------------------------------------------
class Chaochao_Window_PartyData & Window_Base
&&
&&def initialize
& & super(0, 224, 640, 256)
& & self.contents = Bitmap.new(width - 32, height - 32)
& & @actor = nil
&&end
&&
&&def set_actor(actor)
& & self.contents.clear
& & draw_actor_name(actor, 4, 0)
& & draw_actor_state(actor, 140, 0)
& & draw_actor_hp(actor, 284, 0)
& & draw_actor_sp(actor, 460, 0)
& & @actor = actor
& & self.visible = true
&&end
&&def clear
& & self.contents.clear
&&end
end
#------------------------------------------------------------------------------
class Game_Party
&&attr_reader& &:actors2
&&attr_reader& &:chaochao#不能从队伍向备用角色移动的角色ID
&&attr_reader& &:chaochao2#不能从备用角色向队伍移动的角色ID
&&def initialize
& & @actors = []
& & @gold = 0
& & @steps = 0
& & @items = {}
& & @weapons = {}
& & @armors = {}
& & @actors2 = []
& & @chaochao = []
& & @chaochao2 = []
&&end
&&def add_actor(actor_id,type=1)#type为1是向队伍中添加,为2则相反。
& & case type
& & when 1
& && &if $game_actors[actor_id] != nil
& && &&&actor = $game_actors[actor_id]
& && &&&#如果队伍没有满和队伍中没有此角色
& && &&&if @actors.size & 4 and not @actors.include?(actor) and not @actors2.include?(actor)
& && && & @actors.push(actor)
& && && & $game_player.refresh
& && &&&end
& && &end
& & when 2
& && &if $game_actors[actor_id] != nil
& && &&&actor = $game_actors[actor_id]
& && &&&#如果角色不在队伍中和不在备用角色队伍中的情况下
& && &&&#向备用角色中添加角色
& && &&&if not @actors.include?(actor) and not @actors2.include?(actor)
& && && & @actors2.push(actor)
& && && & $game_player.refresh
& && &&&end
& && &end
& & end
&&end
&&
&&def huanren(index,type=1)#type为1是从备用角色向队伍中移动,为2则相反。
& & actor = $game_actors[index]
& & case type
& & when 1
& && &if @actors.size & 4 and @actors2.include?(actor) and not @chaochao2.include?(index) and not @actors.include?(actor)
& && &&&@actors.push(actor)
& && &&&@actors2.delete(actor)
& && &&&$game_system.se_play($data_system.decision_se)
& && &&&$game_player.refresh
& && &end
& & when 2
& && &if @actors.include?(actor) and not @chaochao.include?(index) and not @actors2.include?(actor)
& && &&&@actors2.push(actor)
& && &&&@actors.delete(actor)
& && &&&$game_system.se_play($data_system.decision_se)
& && &&&$game_player.refresh
& && &end
& & end
&&end
&&
&&#type1,1是操作队伍中的角色能否向备用队伍移动,2则相反。
&&#type2,1是添加不能移动的,2是删除不能移动的。
&&def yidong(actor_id,type1,type2=1)
& & case type2
& & when 1
& && &case type1
& && &when 1
& && &&&@chaochao.push(actor_id)
& && &when 2
& && &&&@chaochao2.push(actor_id)
& && &end
& & when 2
& && &case type1
& && &when 1
& && &&&@chaochao.delete(actor_id)
& && &when 2
& && &&&@chaochao2.delete(actor_id)
& && &end
& & end
&&end
&&
&&#type,1从队伍中离开,2从备用角色中离开,3从队伍和备用角色中离开。
&&def remove_actor(actor_id,type=1)
& & actor = $game_actors[actor_id]
& & case type
& & when 1
& && &@actors.delete(actor)
& && &$game_player.refresh
& & when 2
& && &@actors2.delete(actor)
& && &$game_player.refresh
& & when 3
& && &@actors.delete(actor)
& && &@actors2.delete(actor)
& && &$game_player.refresh
& & end
&&end
&&
&&def refresh
& & new_actors = []
& & new_actors2 = []
& & for i in [url=mailto:0...@actors.size]0...@actors.size[/url]
& && &if $data_actors[@actors[i].id] != nil
& && &&&new_actors.push($game_actors[@actors[i].id])
& && &end
& & end
& & @actors = new_actors
& & for i in [url=mailto:0...@actors2.size]0...@actors2.size[/url]
& && &if $data_actors[@actors2[i].id] != nil
& && &&&new_actors2.push($game_actors[@actors2[i].id])
& && &end
& & end
& & @actors2 = new_actors2
&&end
end
#------------------------------------------------------------------------------
class Chaochao_Scene_Party
&&def main
& & @left_temp_command = 0
& & @right_temp_command = 0
& & @temp = 0
& & @left_window = Chaochao_Window_PartyLeft.new
& & @left_window.active = true
& & @right_window = Chaochao_Window_PartyRight.new
& & @right_window.active = false
& & @data_window = Chaochao_Window_PartyData.new
& & update_data
& & Graphics.transition
& & loop do
& && &Graphics.update
& && &Input.update
& && &update
& && &if $scene != self
& && &&&break
& && &end
& & end
& & Graphics.freeze
& & @left_window.dispose
& & @right_window.dispose
& & @data_window.dispose
&&end
&&
&&def update
& & @left_window.update
& & @right_window.update
& & @data_window.update
& & update_command
& & update_data
&&end
&&
&&def update_command
& & if Input.trigger?(Input::B)
& && &$game_system.se_play($data_system.cancel_se)
& && &#画面切换
& && &$scene = Scene_Map.new
& && &return
& & end
& & if @left_window.active
& && &update_left
& && &return
& & end
& & if @right_window.active
& && &update_right
& && &return
& & end
&&end
&&
&&def update_left
& & if Input.trigger?(Input::RIGHT)
& && &if @right_window.item_max & 0
& && &&&@left_temp_command = @left_window.index
& && &&&@left_window.set_index(-1)
& && &&&$game_system.se_play($data_system.cursor_se)
& && &&&@left_window.active = false
& && &&&@right_window.active = true
& && &&&@left_window.refresh
& && &&&@right_window.refresh
& && &&&@right_window.set_index(@right_temp_command)
& && &&&return
& && &else
& && &&&$game_system.se_play($data_system.buzzer_se)
& && &&&return
& && &end
& & end
& & if Input.trigger?(Input::C)
& && &if @left_window.active and @left_window.actor?(@left_window.index) and $game_party.actors.size & 1 and not $game_party.chaochao.include?($game_party.actors[@left_window.index].id)
& && &&&$game_party.huanren($game_party.actors[@left_window.index].id,2)#type为1是从备用角色向队伍中移动,为2则相反。
& && &&&@left_window.refresh
& && &&&@right_window.refresh
& && &else
& && &&&$game_system.se_play($data_system.buzzer_se)
& && &end
& & end
& & return
&&end
&&
&&def update_right
& & if Input.trigger?(Input::LEFT)
& && &if @left_window.item_max & 0
& && &&&@right_temp_command = @right_window.index
& && &&&@right_window.set_index(-1)
& && &&&$game_system.se_play($data_system.cursor_se)
& && &&&@left_window.active = true
& && &&&@right_window.active = false
& && &&&@left_window.refresh
& && &&&@right_window.refresh
& && &&&@left_window.set_index(@left_temp_command)
& && &&&return
& && &else
& && &&&$game_system.se_play($data_system.buzzer_se)
& && &&&return
& && &end
& & end
& & if Input.trigger?(Input::C)
& && &if $game_party.actors.size &= 4
& && &&&$game_system.se_play($data_system.buzzer_se)
& && &&&return
& && &end
& && &if @right_window.active and @right_window.actor?(@right_window.index) and not $game_party.chaochao2.include?($game_party.actors2[@right_window.index].id)
& && &&&$game_party.huanren($game_party.actors2[@right_window.index].id,1)#type为1是从备用角色向队伍中移动,为2则相反。
& && &&&if $game_party.actors2.size == 0
& && && & @right_temp_command = @right_window.index
& && && & @right_window.set_index(-1)
& && && & $game_system.se_play($data_system.cursor_se)
& && && & @left_window.active = true
& && && & @right_window.active = false
& && && & @left_window.refresh
& && && & @right_window.refresh
& && && & @left_window.set_index(@left_temp_command)
& && &&&end
& && &&&if @right_window.index & 0
& && && & @right_window.set_index(@right_window.index-1)
& && &&&end
& && &&&@left_window.refresh
& && &&&@right_window.refresh
& && &else
& && &&&$game_system.se_play($data_system.buzzer_se)
& && &end
& & end
& & return
&&end
&&
&&def update_data
& & if @left_window.active
& && &if $game_party.actors[@left_window.index] != nil
& && &&&@data_window.set_actor($game_party.actors[@left_window.index])
& && &else
& && &&&@data_window.clear
& && &end
& && &return
& & end
& & if @right_window.active
& && &if $game_party.actors2[@right_window.index] != nil
& && &&&@data_window.set_actor($game_party.actors2[@right_window.index])
& && &else
& && &&&@data_window.clear
& && &end
& && &return
& & end
&&end
end
复制代码
在线时间 小时
CODE CODE CODE
阅读权限99
在线时间 小时
CODE CODE CODE
阅读权限150
在线时间 小时
CODE CODE CODE
在线时间 小时
我在提醒你要使用【CODE】
阅读权限150
在线时间 小时
琢磨了半天原来是这个意思。。
Powered by

我要回帖

更多关于 rpgmakerxp素材 的文章

 

随机推荐