質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1898閲覧

JavaScriptにおけるオブジェクトコピーとsetIntervalにおける不具合について

GenbuHase

総合スコア27

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1グッド

1クリップ

投稿2016/08/28 03:35

編集2016/08/28 03:56

###概要
初の質問ですので質問の仕方などに不備があるかもしれません。
JavaScriptでは代入演算子では【参照】の扱いになってしまうため、
<コード1>のように無名関数で回避しようと試みましたが、
相変わらず不具合が発生しています。

######<コード1>

JavaScript

1for (var EventID = 0; EventID < MapData[3].length; EventID++) { 2 Ctx4.drawImage(TipImg, 16 * (MapData[3][EventID]["TipID"] % 8), 16 * (Math.floor(MapData[3][EventID]["TipID"] / 8)), 16, 16, 16 * MapData[3][EventID]["Position"][0], 16 * MapData[3][EventID]["Position"][1], 16, 16); 3 4 switch (MapData[3][EventID]["Type"]) { 5 case 1: 6 var X = MapData[3][EventID]["Position"][0], Y = MapData[3][EventID]["Position"][1]; 7 var Fuc = EventFucs[EventID]; 8 9 Timers.push(setInterval((function (X, Y, Fuc) { 10 return function () { 11 if (CharaPos[0] == X && CharaPos[1] == Y) { 12 Fuc(); 13 } 14 } 15 })(X, Y, Fuc), 10)); 16 17 break; 18 19 case 2: 20 var X = MapData[3][EventID]["Position"][0], Y = MapData[3][EventID]["Position"][1]; 21 var Fuc = EventFucs[EventID]; 22 23 Keys.push(function (Event) { 24 (function (X, Y, Fuc) { 25 if (Event.keyCode == Resource.SystemData.Key.Decide) { 26 if ((CharaPos[0] == X && CharaPos[1] == Y + 1) && CharaPos[2] == R.DIRECTION.N) { 27 Fuc(); 28 } else if ((CharaPos[0] == X && CharaPos[1] == Y - 1) && CharaPos[2] == R.DIRECTION.S) { 29 Fuc(); 30 } else if ((CharaPos[0] == X + 1 && CharaPos[1] == Y) && CharaPos[2] == R.DIRECTION.W) { 31 Fuc(); 32 } else if ((CharaPos[0] == X - 1 && CharaPos[1] == Y) && CharaPos[2] == R.DIRECTION.E) { 33 Fuc(); 34 } 35 } 36 })(X, Y, Fuc); 37 }); 38 39 document.addEventListener("keydown", Keys[i]); 40 41 break; 42 } 43}

###詳細
現在自由研究の作品としてRPGを製作しています。
幾つかのイベントを登録したはずが、
最後に登録したイベントのみが反映されるという不具合が発生しております。

###実際に使用しているサイト
[The Called Name](https://genbuproject.github.io/Genbu-Project-Official-Site/Content/The Called Name)

###元ソース
RPG Helper Alpha 1.3.js
RPG Helper Alpha 1.3.css

The Called Name


ご回答宜しくお願い致します。

Diawel👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

この部分を、

javascript

1Keys.push(function (Event) { 2 (function (X, Y, Fuc) { 3 if (Event.keyCode == Resource.SystemData.Key.Decide) { 4 if ((CharaPos[0] == X && CharaPos[1] == Y + 1) && CharaPos[2] == R.DIRECTION.N) { 5 Fuc(); 6 } else if ((CharaPos[0] == X && CharaPos[1] == Y - 1) && CharaPos[2] == R.DIRECTION.S) { 7 Fuc(); 8 } else if ((CharaPos[0] == X + 1 && CharaPos[1] == Y) && CharaPos[2] == R.DIRECTION.W) { 9 Fuc(); 10 } else if ((CharaPos[0] == X - 1 && CharaPos[1] == Y) && CharaPos[2] == R.DIRECTION.E) { 11 Fuc(); 12 } 13 } 14 })(X, Y, Fuc); 15});

このように書き変えてみてください。上手く動きませんか?

javascript

1(function (X, Y, Fuc) { 2 Keys.push(function (Event) { 3 if (Event.keyCode == Resource.SystemData.Key.Decide) { 4 if ((CharaPos[0] == X && CharaPos[1] == Y + 1) && CharaPos[2] == R.DIRECTION.N) { 5 Fuc(); 6 } else if ((CharaPos[0] == X && CharaPos[1] == Y - 1) && CharaPos[2] == R.DIRECTION.S) { 7 Fuc(); 8 } else if ((CharaPos[0] == X + 1 && CharaPos[1] == Y) && CharaPos[2] == R.DIRECTION.W) { 9 Fuc(); 10 } else if ((CharaPos[0] == X - 1 && CharaPos[1] == Y) && CharaPos[2] == R.DIRECTION.E) { 11 Fuc(); 12 } 13 } 14 }); 15})(X, Y, Fuc);

投稿2016/08/28 03:59

MakeNowJust

総合スコア545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

GenbuHase

2016/08/28 04:00

試してみます。 回答ありがとうございます!(o_ _)o))
GenbuHase

2016/08/28 04:41

出来ました! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問