设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 4206|回复: 1
打印 上一主题 下一主题

[交流讨论] 死亡后不出现Gameover而是原地复活的方法

[复制链接]

Lv2.观梦者

梦石
0
星屑
356
在线时间
97 小时
注册时间
2017-12-7
帖子
14
跳转到指定楼层
1
发表于 2019-9-3 19:32:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 mh40907895 于 2019-9-3 19:32 编辑

在做一个游戏时候找了很久都没找到暗雷遇怪如何在人物死后原地复活的方法,本人又对脚本编写基本停留在大概能看懂的地步。
所以我只能硬着头皮去试着改改。
以下教程适合我这种对编写脚本头大的新人学习,对于论坛的各位dalao来说是小巫见大巫了
======分割线=======
首先,要实现这个目的,事件是解决不了的了,必须要修改js文件,我们知道如果是事件遇怪的话,可以设置一个允许失败,设置以后的效果是死亡之后不出现Gameover界面,而是直接返回战斗之前的地图画面然后自动复活。那么,马上我们就应该想到,如果把这个效果拿去替换掉默认的死亡方式,那这个问题就迎刃而解了,说干就干。
第一步是如何找到这个死亡界面,这里我必须推荐Notepad++这个软件,真的很好用,而且有一个功能是搜索所有打开的文件,那么我们就把所有的自带的那些js都扔进去然后搜索gameover
然后能得到一堆搜索结果,但是不要急,一个一个看。
这时,要注意,我们要找的那一条是设置了选项的死亡方式,所以前后一定会有if这种语句,那么挨个看下来,在rpg_managers.js里面这一段很符合我们的要求。
  1. BattleManager.updateBattleEnd = function() {
  2.     if (this.isBattleTest()) {
  3.         AudioManager.stopBgm();
  4.         SceneManager.exit();
  5.     } else if (!this._escaped && $gameParty.isAllDead()) {
  6.         if (this._canLose) {
  7.             $gameParty.reviveBattleMembers();
  8.             SceneManager.pop();
  9.         } else {
  10.             SceneManager.goto(Scene_Gameover);
  11.         }
  12.     } else {
  13.         SceneManager.pop();
  14.     }
  15.     this._phase = null;
  16. };
复制代码
这一段中间的
  1. $gameParty.reviveBattleMembers();
  2. SceneManager.pop();
复制代码

  1. SceneManager.goto(Scene_Gameover);
复制代码
看起来就是我们要找的东西,毕竟用初中英语也知道party有队伍的意思,revive是复活,第二句是什么不知道,不管他,第三句的goto和Scene_Gameover就更不用说了,然后,我们把第三句替换成前两句就得到了
  1. BattleManager.updateBattleEnd = function() {
  2.     if (this.isBattleTest()) {
  3.         AudioManager.stopBgm();
  4.         SceneManager.exit();
  5.     } else if (!this._escaped && $gameParty.isAllDead()) {
  6.         if (this._canLose) {
  7.             $gameParty.reviveBattleMembers();
  8.             SceneManager.pop();
  9.         } else {
  10.             $gameParty.reviveBattleMembers();
  11.             SceneManager.pop();
  12.         }
  13.     } else {
  14.         SceneManager.pop();
  15.     }
  16.     this._phase = null;
  17. };
复制代码
那么我们测试一下,emmm完美!直接返回了而且生命恢复了1,那么我们就该来看一眼上面说的SceneManager.pop();能不能简化,其实这很容易解决,原来ruby时候前面加个#就可以让这段变成注释,现在呢是用/**/把需要注释掉的句子包起来就行了,也就是说变成/*SceneManager.pop();*/,ok我们测试一下,显然运行出了问题,死亡以后卡在战斗界面回不去了,那么这一句即使不知道是什么意思我们也知道应该保留。但是你以为这样就完事了么!当然不是,虽然我不会写脚本,但是既然要做游戏我们就绝不能允许人物死亡以后就原地复活,连一句话都没有!
那么在复活那里就应该加一句来调用一个公共事件,这样事件党们就又可以为所欲为了!
很简单,加一句
  1. $gameTemp.reserveCommonEvent(X);
复制代码
这里的X可以替换成任何你想变成的公共事件的编号。
好了,这个效果就算完成了~
我要滚去做游戏啦~

评分

参与人数 3+3 收起 理由
liz_fly + 1 塞糖
一纸书凡 + 1 认可答案
白嫩白嫩的 + 1 塞糖

查看全部评分

Lv2.观梦者

梦石
0
星屑
299
在线时间
37 小时
注册时间
2023-2-10
帖子
12
2
发表于 2023-3-16 11:43:40 | 只看该作者
帮大忙了,感谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-1 00:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表