enchant.jsによるゲーム開発のボスに攻撃できない問題について

このQ&Aのポイント
  • enchant.jsを使ってゲームを作っています。敵を作り、ボスを表示するまで、たどり着きましたが、ボスに攻撃を当てようと玉を打つと止まります。
  • 原因はplayershootクラスにあると考えていますが、うまくいかず、アドバイスをいただけないでしょうか?
  • 要約文2
回答を見る
  • ベストアンサー

enchant.js によるゲーム開発

enchant.jsを使ってゲームを作っています。 敵を作り、ボスを表示するまで、たどり着きましたが、 ボスに攻撃を当てようと玉を打つと止まります。 playerShootクラスの処理を消すと打つことはできますが、ボスに攻撃をあてることはできません。 なので、原因はplayershootクラスにあると考えていますが、 うまくいかず、アドバイスをいただけないでしょうか? //プレイヤーが撃つ弾のクラス var PlayerShoot = enchant.Class.create(Shoot, { initialize: function(x, y){ Shoot.call(this, x, y, 0); //弾のサイズ this.width = 15; this.height = 15; this.image = game.assets['images/playerShoot.png']; this.addEventListener('enterframe', function(){ if(boss.intersect(this)){ //ライフが0でなければ小爆発 if(bosslife > 0){ this.remove(); bosslife --; var miniblast = new MiniBlast(this.x, this.y); //ライフが0になったら大爆発 }else{ var ultrablast = new UltraBlast(boss.x, boss.y); game.rootScene.removeChild(boss); this.remove(); } } }); } });

noname#176921
noname#176921

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

エラーが出ている場合、そのエラーメッセージには何と書かれていますか? コード内で使われている変数やクラスは全部定義されて、初期化されていますか?

noname#176921
質問者

お礼

回答をいただき、ありがとうございました。 今回、急遽enchant.jsに手を出したため、理解が追いついておりませんでした。 無事に、自己解決しました。 お手数をおかけいたしました。

関連するQ&A

  • javascriptのenchantの打ちミス

    javascriptのenchantで打ちミスをしてつまづいてます。 だけど、どこがどうミスしてるのかわかりません。 プログラム作成で利用しているサイトはこちらです。 http://code.9leap.net/codes/edit/83463 参考書はこれです。↓↓ http://www.amazon.co.jp/s/ref=nb_sb_noss_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&url=search-alias%3Daps&field-keywords=javascript+%E3%82%B2%E3%83%BC%E3%83%A0&rh=i%3Aaps%2Ck%3Ajavascript+%E3%82%B2%E3%83%BC%E3%83%A0 ソースはこれです。↓↓ enchant(); var game; var scoreLabel; var timeLabel; var mogura =new Array(9); function rand(num){ return Math.floor(Math.random()*num); } Mogura =Class.create(Sprite,{ initialize:function(x,y){ Sprite.call(this,80,80); this.image =game.assets["mogura.png"]; this.x=x; this.y=y; this.status=-rand(200); }, onenterframe:function(){ this.staus++; if(this.status<0){ this.frame=0; }else if(this.status==0){ this.frame=1; }else if(this.status == 30){ this.status=-rand(200); } }, ontouchend:function(){ if(this.frame==1){ this.frame=2; this.status=0; scoreLabel.score+100; } } }); window.onload=function(){ game=new Game(320,320); game.rootScene.backgroundColor="rgb(144,198,116)"; game.preload("mogura.png"); game.onload =function(){ for(var i=0; i<9;i++){ mogura[i]=new Mogura( 20+i%3*100, 50+Mathfloor(i/3)*80); game.rootScene.addChild(mogura[i]); } scoreLabel = new ScoreLabel(5,5); scoreLabel.score=0; game.rootScene.addChild(scoreLAbel); timeLabel =new TimeLabel(5,25,"countdown"); timeLabel.time =10; timeLabel.onenterframe =function(){ if(timeLabel.time<=0){ game.end(); } } game.rootScene.addChild(timeLabel); } game.start(); } このソースの15行目の }else if(this.status==0){で黄色の三角マークが出ているのですが、 どこが間違ってるのかまったくわかりません。 全部消してやり直しても同じところで同じマークが出てしまいます。 どこが間違ってて、どうすればいいのか、教えてください。

  • 超初心者の質問

    今enchant.jsというライブラリで実際に自分でコードを書いてみようと思い、数列ほどのコードを見よう見まねで足してみたのですがうまくいきません。 enchant (); window.onload = function(){ var game = new Game(); game.fps = 30; game.preload('http://enchantjs.com/assets/images/chara1.gif'); game.onload = function(){ var bear = new Sprite(32, 32); bear.image = game.assets['http://enchantjs.com/assets/images/chara1.gif']; bear.tick = 0; bear.anim = [0, 1, 0, 2]; game.rootScene.addChild(bear); bear.addEventListener(Event.ENTER_FRAME, function() { bear.tick++; bear.frame = bear.anim[bear.tick % 4]; if (bear.scaleX == 1){ bear.x += 20; if (bear.x > 320 - 32)bear.scaleX = -1; } else{ bear.x -=7; if (bear.x < 0) bear.scaleX = 1; } }); bear.onEnterFrame = function() { var input = game.input; if (input.up) { this.y -= 5; } if (input.down) { this.y += 5; } }; }; game.start(); }; 下のほうの bear.onEnterFrame = function() { var input = game.input; if (input.up) { bear.y -= 5; } if (input.down) { bear.y += 5; } }; が足した部分です。 追加した部分以外のコードはクマのキャラクターが画面を右に左に走るアニメーションになっていて、それに↑↓ボタンで縦軸だけを操作できるコードを追加してみようと思ったんですがだめでした。 足した部分のコードを関数やイベントタイプを追加するなどいろいろやってみましたが、ダメでした。エラーは上のコードでは出てません。なぜでしょうか。ご教示ください。

  • javascriptで困っています。教えてください

    javascript初心者です。javascriptでクラスのようなものを扱えると知り、いろいろ調べながら取り組んでいます。 html <div id="a"></div> css #a{ width:100px; height:100px; background-color:#0F0; } javascriptでクラスを作って function Character(x,y){      this.ele = document.getElementById("a"); this.x = x; this.y = y; this.move = function () { this.x += 100; this.y += 100; this.ele.style.left = this.x; this.ele.style.top = this.y; } } var cha = new Character(10,10); cha.move(); としたら、緑の正方形が座標(100,100)あるのかと思っていたのですが、うまくいきませんでした。 javascriptのクラスとhtmlの要素を紐づけるにはどうしたらいいのでしょうか?教えてください。

  • javascriptで困っています。教えてください

    javascript初心者です。以前javascriptでクラスについていろいろな方にアドバイスをいただき、疑問が解決しました。ありがとうございました。 そこで、そのクラスから作ったインスタンスを移動させようとしているのですが、うまくいきません。 html <body onload="init();"> <div id="a"></div> </body> css body{ position:relative; } #a{ width:100px; height:100px; position:absolute; background-color:#0F0; } javascript function Character(x,y){      this.ele = document.getElementById("a"); this.x = x; this.y = y; this.move = function () { this.x += 10; this.y += 10; this.ele.style.left = this.x+"px"; this.ele.style.top = this.y+"px"; } } function init(){ var cha = new Character(10,10); var timer; timer = setInterval("loop()",1000); } function loop(){ cha.move(); } としたら、緑の正方形がx方向、y方向に移動1秒毎に10pxずつ増えながら移動していくと思っていたのですが、うまくいきませんでした。 setIntervalを使わず、var cha = new Character(10,10);の後にcha.move();cha.move();cha.move();c1.move();cha.move();とすると、座標(60,60)に緑の正方形が現れます。 緑の正方形を移動させるにはどうしたらいいのでしょうか。教えてください。

  • トリッキーなJSの文法(prototype.jsなど)が分かりません

    Ajaxの「prototype」( http://www.prototypejs.org/ )などで 下記のようなfunctionの記述方法をよく見かけます。 ▼Prototype.js(ver1.5.0) 20行目抜粋 ---------------------------------------- var Class = {  create: function() {   return function() {    this.initialize.apply(this, arguments);   }  } } -------------------------------------------- でも、私には高度すぎて以下の点がどうしても読み解けません。  (1)var Class = {~~~~~~} が、何をしているのか分かりません。    配列なら[ ]ですし関数か何かを省略した宣言の記述方法なのでしょうか?  (2)create: が何なのか分かりません。必死で調べたら型を宣言しているような感じでしたが、    見慣れない「:」を使ったプログラムで検討もつきません。 私が知っているfunction宣言はこの2パターンのみしか知りません。 ・一般的なfunction宣言  function test(hikisu){   //処理内容  } ・無名関数でのfunction宣言  var a = function(x) {   //処理内容  } ぜひ教えていただけませんでしょうか。 どうぞよろしくお願いします。

  • javascriptでオブジェクトのメソッドを使う

    JavaScriptでnewでオブジェクト化したクラス(?)のメソッド、フィールドを利用する方法を教えて下さい。 javascriptにもオブジェクト化という考え方があると聞いたのですが、 例えば、Javaでいうsetter getterのようなメソッドを作り、使用することはできるのでしょうか? 下記のようなコードを実行したところ Uncaught TypeError: Object #<mousePosi> has no method 'setPara' というエラーが出てしまい、setParaというメソッドはない。と言われてしまいます。 しかし、mousePosi()をオブジェクト化することはできているようなので、 setParaとgetParaを使えるのではないかとおもいました。 どなたかアドバイス下さい。お願いします。 ------------------------------------------------------------------------------------------------- (function LineMain() { console.log("マウスの位置座標を表示"); // console.log("X座標=" + mymouse.x + ",Y座標=" + mymouse.y); //マウスムーブでeventControlを呼び出し addEventListener("mousemove", eventControl, false); function eventControl(event) { var event = event; var myMousePosi = new mousePosi(); myMousePosi.setPara(event); // console.log("X座標=" + obj.getMouse().x + ",Y座標=" + obj.getMouse().y); } function mousePosi() { var paraMouse = { x : 0, y : 0 }; function setPara(event) { this.paraMouse.x = event.x; this.paraMouse.y = event.y; } function getPara() { return this.paraMouse; } } })();

  • linq.jsでの連想配列の検索方法について

    ・前提・実現したいこと javascriptでlinq.jsを使い、連想配列に格納したデータを検索したいと思っています。 どなたか連想配列を使用した場合の無名変数の書き方をご教授いただけますでしょうか? ・発生している問題・エラーメッセージ 特にエラーメッセージは出ていませんが、検索結果0件になります。 ・該当のソースコード // クラス定義 // function cQuestion(qIndex, qContent,qImportance){ this.qIndex = qIndex; this.qContent = qContent; this.qImportance = qImportance; } //問題リスト(連想配列) var questions = new Object(); //リストに追加 questions['A01'] = new cQuestion( 'A01', 'テスト' , 9] ); //検索結果 記述A var listItems = Enumerable.From(questions) .Where(function(x) {return x.qIndex == 'A01'}) .Select(function(x) { return x.qIndex }) .ToArray(); //検索結果 記述B var listItems = Enumerable.From(questions) .Where(function(key) { return this[key].qIndex == 'A01'},questions) .Select(function(key) { return this[key].qIndex },questions) .ToArray(); ・試したこと データはquestionsに格納できています。 「記述A」と「記述B」とで記述してみました。

  • [JS] private関数からオブジェクト参照

    JavaScriptにて外部から使用する関数をpublicに、内部的に使用するだけの関数をprivateにしたく、 <http://d.hatena.ne.jp/brazil/20051028/1130468761>や<http://www.findxfine.com/programming/javascript/59.html>を参考に以下のようにしてみました。 func1はtestクラス内からしか呼び出せず、privateになっており、 func2はtestクラス外からも呼び出せて、publicになっているようです。 しかし、func2からfunc1を呼び出した際に、func2の呼び出しもとのオブジェクトを参照しようとすると undefinedになってしまいます。 var a = new test(); //a.func1(); // これはprivateなのでエラー a.func2(); // こちらはpublicなのでOK function test(){ var self = this; // private variable var data1 = 1; // public variable this.data2 = 2; // private function function func1(){ console.log(data1); // 1を表示 console.log(this.data2); // これがundefinedとなってしまう } // public function this.func2 = function(){ console.log(data1); // 1を表示 console.log(this.data2); // 2を表示 func1(); }; } どのようにすれば、オブジェクト変数を参照でき、 クラス内でのみ使用可能なprivate関数を定義できるのでしょうか。

  • 効率良くイベントに引数を渡すやり方

    sample2に引数「x」「y」を渡したいが為に 次のように何段階も同じような作業をしなくてはならない方法しか 自分は思いつかないのですが、何かもっと効率的な方法はあるのでしょうか? function main() { var element = document.createElement('div'); element.x = x; element.y = y; element.onclick = function(){ sample1(this.x, this.y); }; } function sample1(x, y) { var element = document.createElement('span'); element.x = x; element.y = y; element.onclick = function(){ sample2(this.x, this.y); }; } function sample2(x, y) { alert("x="x+" y="+y); }

  • このjsはどういうことですか?

    function handleFiles(files) { l("アイコン変更!!1"); if (files.length > 0) { l("アイコン変更!!2"); var file = files[0]; if (typeof FileReader !== "undefined" && file.type.indexOf("image") != -1) { l("アイコン変更!!3"); var reader = new FileReader(); reader.onload = function(evt) { load(evt.target.result) } ; reader.readAsDataURL(file) } } } function load(src) { l("アイコン変更!!load"); img = new Image(); img.onload = function() { analyze() } ; img.src = src } function analyze() { l("アイコン変更!!analyze"); if (!img) return; SmartCrop.crop(img, { width: 100, height: 100, debug: false }, draw) } function draw(result) { l("アイコン変更!!draw"); selectedCrop = result.topCrop; drawCrop(selectedCrop) } function drawCrop(crop) { l("アイコン変更!!drawCrop"); canvas.width = 100; canvas.height = 100; ctx.drawImage(img, crop.x, crop.y, crop.width, crop.height, 0, 0, canvas.width, canvas.height); img_src = canvas.toDataURL(); var img_tag = $('<img>').attr('src', img_src); $('#file_span').html(img_tag); $('#b_change_profile').prop('disabled', false) } function img_selected_clear() { $('img.selected', '#icon_table').each(function() { $(this).removeClass('selected') }) } function emit_change_icon_name() { var data = {}; data.selected_my_icon = selected_my_icon; data.character_name = $("#ipt_change_character_name").val(); socket.json.emit('change_icon_name', data) } $(function() { $('#canvas_wrap').hide(); $('#i_file').change(function(e) { handleFiles(this.files) }); 回答できる方、回答よろしくお願いします。 できれば一つずつ解説してもらえると嬉しいです。

専門家に質問してみよう