ページ 1 / 1
【解決済み】同じマスに複数イベントが重なっている時、個別にイベントIDを所得するスクリプト
Posted: 2021年2月06日(土) 12:56
by ぷらずま
お世話になっております。
同じマスに2つのイベントが重なっている場合、
$gameMap.eventIdXy(x, y)でIDを所得するとイベントIDが小さい方を優先して得ますが、
これを2つともIDを取得して、個別に参照することは可能でしょうか。
例えば、ID3とID8のイベントが重なっている場所のIDを$gameMap.eventIdXy(x, y)で取得すると、
ID3の方だけ得られますが、これをID3とID8の両方を得てそれぞれ別の変数に格納したりする方法はあるでしょうか。
viewtopic.php?t=8470
すでに同様の質問として、↑の質問がありましたが
$gameMap.eventsXy(x, y) と $gameMap.eventsNtXy(x, y) の両方とも上手くいきません。
([Object,Object]の配列しか取得できない)
お願いいたします。
Re: 同じマスに複数イベントが重なっている時、個別にイベントIDを所得する方法
Posted: 2021年2月06日(土) 13:33
by WTR
$gameMap.eventsXy(x, y) で取得しているのはイベントIDではなく、イベントオブジェクトそのものです。
IDが知りたいならイベントオブジェクトからさらにそのイベントIDを取得する必要があります。
$gameMap.eventsXy(x, y) で3つのイベントオブジェクトが見つかったのなら
それぞれのイベントID は
$gameMap.eventsXy(x,y)[0].eventId()
$gameMap.eventsXy(x,y)[1].eventId()
$gameMap.eventsXy(x,y)[2].eventId()
で取得できます。
Re: 同じマスに複数イベントが重なっている時、個別にイベントIDを所得する方法
Posted: 2021年2月06日(土) 21:28
by ぷらずま
WTR様
ありがとうございます。
$gameMap.eventsXy(x,y)[0].eventId()で個別にIDを取得できました。
しかし、このスクリプトを用いて特定の処理を組みたいのですが、そちらが上手く機能しません…。
もう少しだけよろしいでしょうか。
座標(変数2,変数3)にあるすべてのイベントに対し、
「そのイベントIDが0でないとき、メモ欄に[敵]の文字が入っているかを判別し、
入っていたらそのイベントのセルフスイッチDをONにする」
という処理をしたくスクリプトを組みました。
var LightX = $gameVariables.value(2);
var LightY = $gameVariables.value(3);
var array = $gameMap.eventsXy(LightX, LightY);
for(var i = 0; i < array.length; i++){
$gameVariables.setValue(8,$gameMap.eventsXy(LightX,LightY).eventId())
if($gameVariables.value(8) !== 0){
//(if($dataMap.events[$gameVariables.value(8)].note.indexOf("[敵]")){
//($gameSelfSwitches.setValue([this._mapId, $gameVariables.value(8), "D"], true))
})
}
変数8というのは取得したイベントのIDを格納する場所です。
javascript自体がまだ勉強途中で、どこが間違っているのか分かりません。
どなたかご教授いただければと思います。
Re: 同じマスに複数イベントが重なっている時、個別にイベントIDを所得するスクリプト
Posted: 2021年2月06日(土) 21:54
by WTR
細かく見てませんが
7行目コメントアウトされているif文は、indexOf() の戻り値が 0 のとき偽になると思います。
if (0) は実行されない。
メモ欄の頭に [敵] があると indexOf() で 0 が返るのでダメじゃないでしょうか。
>= 0 もしくは !== -1 なら動くのでは。
Re: 同じマスに複数イベントが重なっている時、個別にイベントIDを所得するスクリプト
Posted: 2021年2月07日(日) 14:14
by ぷらずま
WTR様
ありがとうございます。
まだスクリプトは上手く機能はしないのですが、色々と試行錯誤してみます。
Re: 【解決済み】同じマスに複数イベントが重なっている時、個別にイベントIDを所得するスクリプト
Posted: 2021年2月07日(日) 16:20
by WTR
コード: 全て選択
var LightX = $gameVariables.value(2);
var LightY = $gameVariables.value(3);
var array = $gameMap.eventsXy(LightX, LightY);
for(var i = 0; i < array.length; i++){
$gameVariables.setValue(8,array[i].eventId())
if(array[i].event().note.indexOf("[敵]") >= 0){
$gameSelfSwitches.setValue([this._mapId, array[i].eventId(), "D"], true)
}
}
こんなでどうでしょうか。
一応デバッグに役立つかもしれないので変数8への代入を残しましたが別に使っていません。
Re: 【解決済み】同じマスに複数イベントが重なっている時、個別にイベントIDを所得するスクリプト
Posted: 2021年2月08日(月) 16:43
by ぷらずま
WTR様
上記のスクリプトで上手く動作しました!
これで制作を進められます。
度々アドバイスをくださり、ありがとうございました!