【GameMaker】スクリプトが正しく呼べていないとき
うまく処理をまとめてスクリプトにしたのに。。
思ったように動かない ( ;ᯅ; )
起きたこと
スクリプトにweaponクラスを実装した。
weaponクラスをもとに「shotgun」を作ったが、
「if (shotgun.isDefaultItemObj) {}」の分岐が必ずTrueになってしまう。
shotgun.itemObjには「obj_shotgun」がコンストラクタで入っているので、正しくはfalseになるはず。
/* Step Event */
var shotgun = weapon("gun", obj_shotgun);
// かならずTrueになってしまう?
if (shotgun.isDefaultItemObj) {
// 処理
}
/* weapon.scr */
function weapon(
_category="", _itemObj=obj_dummy
) constructor {
category = _category;
itemObj = _itemObj;
isDefaultItemObj = function() {
return itemObj == obj_dummy
}
}
原因
()なしの「isDefaultItemObj」で関数を呼び出していた。shotgun.isDefaultItemObjが関数として存在しているかどうかが評価されるので、常にtrueで返ってきてしまっている。
対応
isDefaultItemObj()とする。
シンタックスエラーもコンパイルエラーも発生しないので、見落としやすい!
if (shotgun.isDefaultItemObj()) {
// 処理
}
補遺
スクリプトの関数呼び出し自体に()をつけ忘れていても同じことが発生する模様。
※今回ならweapon関数
この記事が気に入ったらサポートをしてみませんか?