このスクリプトでTypeError: "this" is not a functionと出てきてしまいます。

返信する
kirin
記事: 6
登録日時: 2020年4月12日(日) 16:53

このスクリプトでTypeError: "this" is not a functionと出てきてしまいます。

投稿記事 by kirin »

if ($gameVariables.value(4) <= 113 && $gameVariables.value(4) >=108) {

var targetID = $gameVariables.value(4) - 107;

var aaa = Math.abs(targetID - $gameVariables.value(100));
if (aaa >= 3) {
this.changeHp($gameActors.actor(targetID),(this.param(3)*2)-$gameActors.actor($gameVariables.value(100)).param(2), true);
}
}

オンラインアクションPvPで対象のイベントIDの値によって対象かどうか判断し、そうだった場合に対象actorのHPを増減させるスクリプトなのですが、おそらくthisの部分に問題があるのだと思います。

変数の4番にはターゲットのイベントIDが代入されています。
actorの位置にそれぞれ見えないイベントを置いてそれによって当たり判定などを行っています。(全プレイヤーの座標は共有されている)
108~113までがプレイヤーの下に置かれているイベントです。
107引くことによってプレイヤーナンバーに変換しています(プレイヤー1~6まで)

プレイヤー1~3は同じチーム、4~6は同じチームなので差の絶対値が3以上の場合のみ攻撃が通ると判断します。

そして問題の箇所です。
ターゲットになったプレイヤーの防御力*2-攻撃しているプレイヤー(自身)の攻撃力分ターゲットになったプレイヤーのHPを減らしています。

ゲーム変数100は他プレイヤーと共有されず、自身のプレイヤーナンバーが格納されています。

このスクリプトが実行された時点で真っ黒になりエラーになってしまいます。
内容はあまり関係ないような気がしますが、わかりやすくなるように書いておきます。助けてください、吐きそうです。
アバター
Plasma Dark
記事: 736
登録日時: 2020年2月08日(土) 02:29
連絡する:

Re: このスクリプトでTypeError: "this" is not a functionと出てきてしまいます。

投稿記事 by Plasma Dark »

コードを書くときは Code ボタンを使ってコードタグを挿入し、その中に書くようにしてください。
インデントもへったくれもなくなって読めなくなります。

この文脈における this とは何か、理解された上で書かれているでしょうか。
イベントコマンドのスクリプトで書いている場合、実行中のインタプリタが this になります。

ところで、 Game_Interpreter には param なる関数は定義されていないのですが、 this.param(3) とは何を意味しているのでしょう。
ターゲットプレイヤーの防御力を取得する方法はこれで本当に合っていますか?
kirin
記事: 6
登録日時: 2020年4月12日(日) 16:53

Re: このスクリプトでTypeError: "this" is not a functionと出てきてしまいます。

投稿記事 by kirin »

this…
考えたこともありませんでした。取得方法を検索したらこれが出てきたので何も考えずに使っていました。
調べてきます。
kirin
記事: 6
登録日時: 2020年4月12日(日) 16:53

Re: このスクリプトでTypeError: "this" is not a functionと出てきてしまいます。

投稿記事 by kirin »

thisについてはよくわかりませんでした。


http://rpgmaker-script-wiki.xyz/hpud_mv.php

こちらのサイトを参照して使ったのですが…
this.paramについても同様にほかのサイトを参照しただけでよくわかっていません。

でもthisの内容がわからないなら、普通にactorの防御力が格納されている変数を参照すればよかったですよね。

コード: 全て選択

if ($gameVariables.value(4) <= 113 && $gameVariables.value(4) >=108) {

var targetID = $gameVariables.value(4) - 107;

var aaa = Math.abs(targetID - $gameVariables.value(100));
if (aaa >= 3) {

$gameActors.actor(targetID).gainHp($gameActors.actor(targetID).param(3)*2 - $gameActors.actor($gameVariables.value(100)).param(2));

}
}
こんな感じで書き直してみました。
thisやapplyなどの基礎的なことがわかっていないため、他のjsファイルを見てみてもさっぱりわからずググったことを組み合わせていました。javascriptの書き方や作法についてもっと勉強してきます。特に.でつながってるあれとか…C#でも使った気がしてるんですけど、何分かなり前の事で忘れてしまいました。丁寧にありがとうございました。
返信する

“MV:質問”に戻る