条件分岐のスクリプト

アラン
記事: 10
登録日時: 2018年1月18日(木) 18:13

条件分岐のスクリプト

投稿記事by アラン » 2021年1月14日(木) 09:18

「変数1~8に番号が格納されているアクターのいずれかが防具22番を装備していたらスイッチ5をオンにする」
という処理を作りたくて以下のようなスクリプトを書きましたところcannnot read property 'hasArmor' of nullと返されました。

どなたかお力添えいただけないでしょうか。

コード: 全て選択

◆スクリプト:for(var i = 1; i <= 8; i++)
:     :{
:     :    if($gameActors.actor($gameVariables.value(i)).hasArmor($dataWeapons[22]))
:     :   {
:     :      $gameSwitches.setValue(5,true)
:     :   }
:     :}
最後に編集したユーザー アラン on 2021年1月14日(木) 10:37 [ 編集 3 回目 ]

アバター
Plasma Dark
記事: 669
登録日時: 2020年2月08日(土) 02:29
連絡を取る:

Re: 条件分岐スクリプトのcannot read propertyエラー

投稿記事by Plasma Dark » 2021年1月14日(木) 10:07

まず、前提として $gameActors は Game_Actors クラスのインスタンスです。

rmmz_objects.js 内の Game_Actors.prototype.actors をご覧いただけると、アクターIDにデータベース上に存在しない数値を入力した場合にnullが返されることがわかるかと思います。
nullに対して .hasArmor メソッドを呼ぼうとしたため、 Cannot read property 'hasArmor' of null と怒られたというわけです。
$gameActors.actor(アクターID) の戻り値がnullでないことをチェックしましょう。

「変数1~8番に番号が格納されているアクターが防具22番を装備していたらスイッチ5をオンにする」


変数1~8にアクターIDを格納しているということですが、これが「パーティメンバー全員」という意図であるとしたら、ゲーム内変数やnullチェックなしにもっと楽に書くこともできます。

コード: 全て選択

$gameSwitches.setValue(5, $gameParty.members().some(actor => actor.hasArmor($dataArmors[22])));

※ご指摘の通り、閉じカッコが足りておりませんでした。修正しました。

このコードについては、詳しく説明しませんので、気になる場合は下記を参考に読んでみてください。
- rmmz_objects.js 内の Game_Party.prototype.members
- Array.prototype.some https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/some
最後に編集したユーザー Plasma Dark on 2021年1月14日(木) 15:25 [ 編集 1 回目 ]
アラン
記事: 10
登録日時: 2018年1月18日(木) 18:13

Re: 条件分岐スクリプトが常にfalseとなる。

投稿記事by アラン » 2021年1月14日(木) 10:28

返信ありがとうございます。
そちらの推測どおり、パーティーメンバー内に防具22番を装備したアクターがいればスイッチをオンにするという処理がしたかったということです。

いただいたコードを早速試してみたのですが、

SyntaxError
nussubg ) after argumente list


とのエラーが出力されました。プラグインはいくつか導入しているのですが、こちらに何か原因はあるのでしょうか。
添付ファイル
プラグイン.png
アバター
ムノクラ
記事: 2011
登録日時: 2018年2月23日(金) 11:41
連絡を取る:

Re: 条件分岐スクリプトが常にfalseとなる。

投稿記事by ムノクラ » 2021年1月14日(木) 12:34

アラン さんが書きました:返信ありがとうございます。
そちらの推測どおり、パーティーメンバー内に防具22番を装備したアクターがいればスイッチをオンにするという処理がしたかったということです。

いただいたコードを早速試してみたのですが、

SyntaxError
nussubg ) after argumente list


とのエラーが出力されました。プラグインはいくつか導入しているのですが、こちらに何か原因はあるのでしょうか。


)が1つ足りなかったようですね。

コード: 全て選択

$gameSwitches.setValue(5, $gameParty.members().some(actor => actor.hasArmor($dataArmors[22])));


SyntaxErrorの時は、大抵がこういったケアレスミス的なものが多いです。
(DarkPlasma氏にしては珍しい…)
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
アラン
記事: 10
登録日時: 2018年1月18日(木) 18:13

Re: 条件分岐のスクリプト

投稿記事by アラン » 2021年1月14日(木) 13:03

解決しました。ありがとうございます。

“MZ:質問” へ戻る