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

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

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

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

enchant.js

enchant.jsとは、アプリやゲームを簡単に開発できるオープンソースのHTML5+JavaScriptベースのフレームワークです。プログラミング学習にも用いられ、多くの素材やプラグインが用意されています。

Q&A

解決済

1回答

781閲覧

enchant.jsで、ontouchend内の命令が反応しない

jyarin

総合スコア12

JavaScript

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

enchant.js

enchant.jsとは、アプリやゲームを簡単に開発できるオープンソースのHTML5+JavaScriptベースのフレームワークです。プログラミング学習にも用いられ、多くの素材やプラグインが用意されています。

0グッド

0クリップ

投稿2020/03/31 12:01

モグラたたきを作っているのですが、
Botan[counter].ontouchend = function(){}内の命令が作用しません。
僕の予想では、出てきたモグラ(BotanImg)をクリックすれば、得点(point)が1増えて、モグラは消える(BlackBotanImgに戻る)はずなのですが、そうなりません。

javascript

1enchant(); 2 3window.onload = function(){ 4 var game = new Game(400,500); 5 6 var AtariSound = "atari.mp3"; 7 game.preload([AtariSound]); 8 9 var BotanImg = "botan.png"; 10 game.preload([BotanImg]); 11 var BlackBotanImg = "blackbotan.png"; 12 game.preload([BlackBotanImg]); 13 14 game.onload = function(){ 15 16 var Point = 0; 17 var LIMIT_TIME = 15; 18 var Mogu = [];//0=受付状態,1=点灯状態,2=休止状態 19 for (var i=0;i<16;i++){ 20 Mogu[i] = 0; 21 } 22 var RndForMogu = []; 23 var ReviveTime = []; 24 for (var i=0;i<16;i++){ 25 ReviveTime[i] = 0; 26 } 27 28 var S_MAIN = new Scene(); 29 30 game.pushScene(S_MAIN); 31 32 S_MAIN.backgroundColor = "black"; 33 34 35 var S_Text = new Label(); 36 S_Text.font = "20px Meiryo"; 37 S_Text.color = 'rgba(255,255,255,1)'; 38 S_Text.width = 400; 39 S_Text.moveTo(0,20); 40 S_MAIN.addChild(S_Text); 41 42 var Time_Lavel = new Label(); 43 Time_Lavel.font = "20px Meiryo"; 44 Time_Lavel.color = 'rgba(255,255,255,1)'; 45 Time_Lavel.width = 400; 46 Time_Lavel.moveTo(0,0); 47 S_MAIN.addChild(Time_Lavel); 48 49 var Botan = new Array(); 50 51 52 game.onenterframe = function(){ 53 54 for (var i=0;i<16;i++){ 55 RndForMogu[i] = Math.floor(Math.random()*100); 56 if(RndForMogu[i] == 1 && Mogu[i] == 0){ 57 Mogu[i] = 1; 58 } 59 } 60 61 var counter = 0; 62 for (var y=0;y<4;y++){ 63 for (var x=0;x<4;x++){ 64 Botan[counter] = new Sprite(100,100); 65 Botan[counter].x = x * 100; 66 Botan[counter].y = y * 100 + 100; 67 S_MAIN.addChild(Botan[counter]); 68 69 ////////////////////////////////////// 70 // 問題の箇所   // 71 ////////////////////////////////////// 72 Botan[counter].ontouchend = function(){//クリックされたときの対応 73 if(Mogu[counter] == 1){ 74 game.assets[AtariSound].clone().play(); 75 Mogu[counter] = 2; 76 Point++; 77 ReviveTime[counter] = parseInt(game.frame/game.fps); 78 } 79 } 80 81 if(Mogu[counter] == 1){//画像の決定(非出現時は真っ黒な画像にする) 82 Botan[counter].image = game.assets[BotanImg]; 83 }else{ 84 Botan[counter].image = game.assets[BlackBotanImg]; 85 } 86 87 if(Mogu[counter] == 2 && (ReviveTime[counter] - parseInt(game.frame/game.fps) >= 1)){//叩いた後一定時間が経てば、再び出てくる 88 Mogu[counter] = 0; 89 } 90 counter ++; 91 } 92 } 93 94 S_Text.text = "スコア:" + Point; 95 96 time = LIMIT_TIME - parseInt(game.frame/game.fps) +""; 97 Time_Lavel.text = "残り時間:" + time; 98 99 } 100 } 101 102 game.start(); 103}

javascriptを用いるのは、これが初めてなので、基礎中の基礎で間違いがあるかもしれません。
ご指導宜しくお願いします。

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

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

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

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

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

jyarin

2020/04/01 08:53

ご指導ありがとうございます。 「画面内に表示されたモグラ(botan.png)をクリックしたところ、音(atari.mp3)が鳴らず、Pointも増えず(「スコア:」の後の数字が0のままで)、モグラも消えなかった(blackbotan.pngが表示されなかった)」 です。
guest

回答1

0

ベストアンサー

js

1 Botan[counter].ontouchend = function(){//クリックされたときの対応 2 if(Mogu[counter] == 1){

こちらのコードですが、Botan[counter]counterと、Mogu[counter]counterとは、違う値であると思うのですが、それは想定されているとおりですか?

投稿2020/04/01 03:37

Lhankor_Mhy

総合スコア36115

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

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

jyarin

2020/04/01 09:12

同じ値であるつもりでプログラミングを書いてきました。 しかし、2つのcounterが違う値を指すのであれば、僕はプログラムの流れ方すら理解していないでしょう。(僕の思い描いている流れでは、確実に同じ値になるため) そして、プログラムの流れ方までここで教えて貰うのは、流石に時間をお掛けしすぎだと思いますし、本などで学べば済むと思いますので、一旦ベストアンサーといたします。 ご協力頂きありがとうございました。
Lhankor_Mhy

2020/04/01 12:53

ご自分でお調べになるのは素晴らしいと思うのですが、私が言ったことが正しいのかどうかは検証されましたか?
jyarin

2020/04/01 14:22

一度、2つのcounterのがどのような値をとるのかを確かめるために、47行目付近の S_MAIN.addChild(Time_Lavel); の下に 、、、、、 var Check1 = new Label(); Check1.font = "20px Meiryo"; Check1.color = 'rgba(255,255,255,1)'; Check1.width = 400; Check1.moveTo(0,60); S_MAIN.addChild(Check1); var Check2 = new Label(); Check2.font = "20px Meiryo"; Check2.color = 'rgba(255,255,255,1)'; Check2.width = 400; Check2.moveTo(0,80); S_MAIN.addChild(Check2); 、、、、、 と書き、また//  問題の箇所   //の下を、 、、、、、 Check1.text = ""+counter; Botan[counter].ontouchend = function(){//クリックされたときの対応 Check2.text = ""+counter; if(Mogu[counter] == 1){ 、、、、、 に書き換えたところ、座標(0,60)には何も表示されず、(0,80)にはずっと「15」と表示されていました。 このように、検証の仕方すらよく分からないのです。 こんな状況では、なにかを教えて頂いても、それに納得や検証が出来ないと思います。 なのでまずは、javascriptがどのように動くのかを学ぶ事にしますね。 ありがとうございました。 (ちなみに今までは、既存のプログラムを見て、どのように動くのかを勘で理解する、ロゼッタストーンの解読ばりに面倒で不確かな手段を使ってきました。)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問