Project1

标题: 判定隊伍中某項數值最高的人物 (已解決) [打印本页]

作者: yamatonadesiko0    时间: 2017-12-21 22:02
标题: 判定隊伍中某項數值最高的人物 (已解決)
本帖最后由 yamatonadesiko0 于 2017-12-23 22:47 编辑

如題,想寫一個事件由成員中幸運最高的一位發言,但是要判定隊伍中誰的幸運最高,我只想到可以用事件比較變量大小,步驟實在太多,不知道有沒有簡單一點的寫法?
作者: qknight    时间: 2017-12-22 00:16
这是个死办法,要取巧也没办法简化太多,仅提供下个人的思路
假设你的队伍只有四个人(更多人的话还是同样的方法,只不过工作量更大)
如果1号角色的幸运≥2号角色且≥3号角色且≥4号角色,那么1号角色发言,否则分歧一下,让2号角色来比较是不是最大,否则再分歧一下,让三号角色来比较是不是最大,否则就4号角色发言
这个办法需要分歧三轮。
当然,你的队伍不一定是四个人,假设是n个人(n≥2),那么这个方法需要分歧(n-1)轮,使用2n个临时变量(一个变量储存角色的ID值、一个变量储存角色的幸运值),不需要开关,总的来说还是比较简单的(大概)

也许你知道了,但还是附带一下你会用到的脚本写法:
令变量1等于“游戏数据”第1个成员的角色ID,然后变量2等于脚本“$gameActors.actor($gameVariables.value(1)).luk”(1号变量ID角色的幸运值)
要发言时,对话框中
\P[1]  显示出队伍第一个角色的名字
同理
\P[2]  显示出队伍第二个角色的名字

最后,因为还是不知道你队伍中会有几个人,所以别忘了计算一下队伍人数,别分歧到不存在的队友身上去了(比如说你队伍中只有三个人,你却用脚本储存第四个人的幸运值有多少,那就可能令游戏报错)
作者: yamatonadesiko0    时间: 2017-12-22 03:24
qknight 发表于 2017-12-22 00:16
这是个死办法,要取巧也没办法简化太多,仅提供下个人的思路
假设你的队伍只有四个人(更多人的话还是同样 ...

看來也只能先這樣寫了,頭疼啊
作者: 芯☆淡茹水    时间: 2017-12-22 09:01
  1. var data = $gameParty.members().map(function(a){return a.luk;});
  2. var max = Math.max.apply(Math, data);
  3. var index = data.indexOf(max);
复制代码


这个 index 就是幸运最高的角色在队伍中的序号
作者: yamatonadesiko0    时间: 2017-12-23 01:00
芯☆淡茹水 发表于 2017-12-22 09:01
这个 index 就是幸运最高的角色在队伍中的序号

再請教一下,我想把index當作2號變數運用,腳本內這樣寫:
$gameVariables.value(2) += index
似乎不行,該如何改寫是好?
作者: yamatonadesiko0    时间: 2017-12-23 17:39
@芯☆淡茹水 @全世界
唉...果然實際動手後發現許多之前沒想過的問題...
根據之前說的,實際執行發現如果有兩個以上隊員運氣數值相同時就會回傳0作為結果,所以我試著改寫了一下:
  1. var data = $gameParty.members().map(function(a){return a.luk;});
  2. var result = data.filter(function(element, index, arr){return arr.indexOf(element) === index;});
  3. alert(result)
  4. var max = Math.max.apply(Math, result);
  5. alert(max)
  6. var index = data.indexOf(max);
  7. alert(index)
  8. $gameVariables.setValue(2, index);
复制代码

得到的結果是(28,40,38,40)、(40)、(1)
似乎是在把(40)這個數值還原成隊員序號的時候出了問題,有可能實現在兩個或兩個以上數值相同的隊員中選出一個嗎?

作者: 芯☆淡茹水    时间: 2017-12-23 20:03
本帖最后由 芯☆淡茹水 于 2017-12-23 20:08 编辑

var data = $gameParty.members().map(function(a){return a.luk;});
var max = Math.max.apply(Math, data);
var result =  $gameParty.members().filter(function(a){return a.luk == max;});

这个 result  数组里面就包含所有幸运最大的角色,是 Game_Actor 对象。
如果 result.length == 1 就只有一个,  result.length > 1 就是多个,具体怎么选可以用这个  result 数组去操作




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