enchant.jsでゲーム作成に役立つ構文について

このQ&Aのポイント
  • enchant.jsを勉強中の方へ、.isMovingや.walk、.directionといった構文について解説します。
  • .isMovingはプレイヤーキャラクターが移動しているかどうかを管理するためのプロパティです。
  • .walkと.directionはプレイヤーキャラクターの移動や方向を管理するためのオブジェクトです。
回答を見る
  • ベストアンサー

enchant.js の構文についてです。

最近ゲームでも作ろうと、 enchant.js を勉強し始めました。 他の方のソースコードを見たりして、勉強しています。 ですが、次のような構文が理解できません。 // 省略 var player = new Sprite(32,32); // 省略 player.isMoving = false; player.direction = 0; player.walk = 0; というところです。 .isMoving とは何ですか? .walk や、.direction といったオブジェクトは存在するのでしょうか。 .image や、.rootScene.addChild などと同じように定義されているのでしょうか。 また、使い方や、動かしたときの動作など、詳しく教えてほしいです。 よろしくお願いします。

noname#219892
noname#219892

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

  • ベストアンサー
  • okg00
  • ベストアンサー率39% (1322/3338)
回答No.1

独自で使うフィールドとして、playerに追加しているようです。 ベースはJavascriptなので、変数の使用には宣言が必要ないのです。 独自の使い方なので、自分で読み解くしかないです。 読み解いた方によると http://www.ideaxidea.com/archives/2011/04/rpg_3.html http://wise9.github.io/enchant.js/doc/plugins/ja/symbols/enchant.Sprite.html

noname#219892
質問者

お礼

変数、ということですね。 JavaScript がベースということで、変数について勉強してきます! ありがとうございました!!

関連するQ&A

  • 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(); } } }); } });

  • 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){で黄色の三角マークが出ているのですが、 どこが間違ってるのかまったくわかりません。 全部消してやり直しても同じところで同じマークが出てしまいます。 どこが間違ってて、どうすればいいのか、教えてください。

  • actionscript 3.0 勉強中のもです

    numChildrenから出した値をつかって実験中です。 以下の記述に置いて、contaner1.numChildrenの数値(結果:2)をif構文の条件式に使おう したところうまく行きません。if(container1.numChild == 2)にしてみると、読み込み専用ですと言われてしまいます。どのように考えたらよろしいのでしょうか?お心当たりありましたら是非よろしくお願い致します。 import flash.display.Sprite; var container1:Sprite = new Sprite(); var container2:Sprite = new Sprite(); var counter:Sprite = new Sprite(); var circle1:Sprite = new Sprite(); var n:Number= new Number; circle1.graphics.lineStyle(10,0x3355bb,); circle1.graphics.drawCircle(40, 50, 40); var circle2:Sprite = new Sprite(); circle2.graphics.beginFill(0x00CCFF); circle2.graphics.drawCircle(80, 90, 40); var circle3:Sprite = new Sprite(); circle3.graphics.beginFill(0x7766FF); circle3.graphics.drawCircle(60, 40, 40); container2.addChild(container1); container1.addChild(circle1); container1.addChild(circle2); addChild(circle1); addChild(circle3); trace(container1.numChildren); // 2 trace(container2.numChildren); // 1 trace(circle1.numChildren); // 0 trace(circle2.numChildren); n = container1.numChildren if(n == 2)//container1.numChildrenの数を代入値として使いたい。 { circle1.x=300 }

    • ベストアンサー
    • Flash
  • jsdo.itとMonacaについて

    jsdo.itで作ったものをMonacaに張り付けてみると実行できません どこが間違えているのでしょうか? jsdo.itでは動きました またjsdo.itで作ったものをapplicationにするのは無理なのですか? index.html <!DOCTYPE html> <html> <head> <script src="main.js"></script> <script src="enchant.js"></script> <script src="main.js"></script> <meta charset="utf=8"> <meta name="viewport" content="width=device-width,user-scalable=no"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> <title>HELLO WORLD</title> <style type="text/css"> body { margin:0; } </style> </head> <body> </body> </html> main.js enchant () ; window.onload = function () { //ゲームオブジェクト var game = new Game(320,320); //画像の読み込み game.preload('http://enchantjs.com/assets/images/chara1.gif'); //画像読み込み完了時に実行する処理 game.onload = function() { //スプライトの生成 var bear = new Sprite(32,32); //32pxのスプライト作成 bear.image = game.assets['http://enchantjs.com/assets/images/chara1.gif']; bear.frame=4; //4つめの画像 //フレーム毎の定期処理 bear.addEventListener(Event.ENTER_FRAME, function() { this.x += 3; //3px移動 }); //表示オブジェクトツリーに追加 game.rootScene.addChild(bear); }; game.start(); }; enchant.jsはDLしたファイルのbuildの中のenchant.jsをアップロードしています

  • ac3 if 構文の作り方

    以下のスクリプとで、最初にbox1が動き出して、box1がbox2を、x座標について値が上回ったとき、box2も動き出す、というもので詰まっています。すごく単純な見落としをしているのだと思いますが、どうにも行きません。お知恵をお借りできますと助かります。 import flash.display.Sprite; import flash.events.Event; var box1:Sprite=new Sprite; box1.graphics.beginFill(0x00FF00);   box1.graphics.drawRect(50,100,50,50);   box1.graphics.endFill(); var box2:Sprite=new Sprite; box2.graphics.beginFill(0x00FF00);   box2.graphics.drawRect(100,200,50,50);   box2.graphics.endFill(); addChild(box1); addChild(box2); box1.addEventListener(Event.ENTER_FRAME,mo); function mo(e:Event):void{ box1.x += 1;} trace("ok") if(box1.x>box2.x){ box2.addEventListener(Event.ENTER_FRAME,mo2); function mo2(e:Event):void{ box2.x += 1} trace("ok2")};

    • ベストアンサー
    • Flash
  • addChildした後に操作したい。

    package { import flash.display.*; public class goo extends Sprite { public function goo() { create(); stage.myRect.y =100;// 1119 未定義である可能性が高い・・・エラー。 } public function create() { var myRect:Sprite = new Sprite(); myRect.graphics.beginFill(0xFF0000); myRect.graphics.drawRect(10,10,200,100); myRect.name = "rect"; addChild(myRect); } } } addChildした後にmyRectのyの位置等を変更するにはどうすればよいでしょうか。 また、この問題について詳しく載っているURL等があれば教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • actionscript初心者です。importに

    友人に教えてもらったプログラムを練習用に解読?しています。 以下のプログラムにおいて、 importを含んだ時 importを含まない時(2つを消してしまった場合)では プレビューにおいては両者とも問題なく動作しますが 以下に、importを加える必要があるのでしょうか? よろしくお願い致します。 import flash.display.Sprite; import flash.events.MouseEvent; var circle1:Sprite = new Sprite(); circle1.graphics.beginFill(0xFFCC00); circle1.graphics.drawCircle(20, 20, 20); circle1.buttonMode = true; circle1.addEventListener(MouseEvent.CLICK, clicked); var circle2:Sprite = new Sprite(); circle2.graphics.beginFill(0xFFCC00); circle2.graphics.drawCircle(120, 40, 40); circle2.buttonMode = false; circle2.addEventListener(MouseEvent.CLICK, clicked); function clicked(event:MouseEvent):void { trace ("OK"); } addChild(circle1); addChild(circle2);

    • ベストアンサー
    • Flash
  • AS3.0 写真の切り替え

    調べても調べても漠然とした状態が続いてるので質問させていただきました。 まず、サンプルとしてこんなようなものが作りたいんです。 http://www.subaru-sls.co.jp/ ここの企業みたいな写真が一定時間でその場所その場所に移動していくというのを作りたいのですが、今後のことを考え、タイムラインにASを組むのではなく、外部AS(ドキュメントクラス?)だけで作りたいのです。 因みに写真などの配置はなんとかできたのですが、写真が切り替わるのがまったくわかりません。 こちらが現状況のコードになります。↓ package { import flash.display.Sprite; import flash.display.Loader; import flash.net.URLRequest; import flash.display.Shape; import flash.events.TimerEvent; import flash.utils.Timer; import flash.events.MouseEvent; import flash.display.Bitmap; [SWF(width = "550",height = "400")] public class main extends Sprite { //プロパティ var mc01:Sprite = new Sprite(); var mc02:Sprite = new Sprite(); var mc03:Sprite = new Sprite(); var imgUrl01:String = "kabegami1.jpg"; var imgUrl02:String = "kabegami2.jpg"; var imgUrl03:String = "kabegami3.jpg"; var onUrl01:URLRequest = new URLRequest(imgUrl01); var onUrl02:URLRequest = new URLRequest(imgUrl02); var onUrl03:URLRequest = new URLRequest(imgUrl03); var img01:Loader = new Loader(); var img02:Loader = new Loader(); var img03:Loader = new Loader(); var square01:Shape = new Shape(); var square02:Shape = new Shape(); var square03:Shape = new Shape(); var i:int = 0; var timer:Timer = new Timer(20); //コンストラクタ public function main () { init (); } //メソッド private function init () { square01.graphics.beginFill (0x000000); square02.graphics.beginFill (0x000000); square03.graphics.beginFill (0x000000); square01.graphics.drawRect (10, 10, 330, 380); square02.graphics.drawRect (350, 10, 110, 380); square03.graphics.drawRect (470, 10, 70, 380); square01.graphics.endFill (); square02.graphics.endFill (); square03.graphics.endFill (); img01.mask = square01; img02.mask = square02; img03.mask = square03; img01.load (onUrl01); img02.load (onUrl02); img03.load (onUrl03); addChild (square01); addChild (square02); addChild (square03); addChild (img01); addChild (img02); addChild (img03); timer.addEventListener (TimerEvent.TIMER,onTimer); timer.start (); img01.addEventListener (MouseEvent.MOUSE_DOWN,mouseDownHandler); } private function mouseDownHandler (event:MouseEvent):void { } private function onTimer (event:TimerEvent):void { i++; img01.alpha -= 0.01; } } } 長文になってしまいましたが、どうかご教授お願いします。

    • ベストアンサー
    • Flash
  • javascriptのアラートが何回も出る

    こんにちは。 enchant.jsを使用してjavascriptを書いています。 [環境] Windows7 IDE:WebStorm6.0 [Browser] Google Chrome 25.0.1364.172m FireFox 19.0.2 Internet Explorer 9.0.8112.16421 ----------------------------------------------------- enchant(); window.onload = function(){ var core = new Core(320, 320); core.preload('./img/chara1.png'); core.onload = function(){ var bear = new Sprite(32, 32); bear.image = core.assets['./img/chara1.png']; bear.x = 0; bear.y = 0; bear.addEventListener('enterframe', function(){ if(core.input.right){ alert("right");//問題の箇所 this.x += 5; } }); core.rootScene.addChild(bear); } core.start(); }; 上記コードは、右キーを押した時に絵を右に動かすプログラムなのですが 右キーを押した時に追加で、"right"とアラートさせるようにしました。 Google Chromeの場合、実行して右キーを押した時に"right"とアラートされ、アラートダイアログのOKボタンを押すとダイアログが消えて、絵が右に1回進みます。そして即座にまた"right"とアラートされてしまいます。 しかし不思議な事に、アラートの行をコメントアウトすると、右キーを押した時に絵が1回動いて止まり、次に押すまでは止まったままです。(正常な動き) つまり、アラートを書いている時のみ、なぜか一度キーを押すと、その後ずっと押した時の処理が行われているという事になってしまっています。 IEの場合も、GoogleChromeと同じ現象が起きています。 FireFoxの場合は、上記のような現象は起こらず、キーを押すと"right"とアラートされ、OKを押して閉じると絵が右に動いて、終わります。連続でアラートされることは無く、正常な動作でした。 僕は純粋にjavascriptのみでコードを書いたことが無く、enchant.jsライブラリを使用して最近始めました。 これはjavascriptのみの場合でも起こる現象なのでしょうか?それとも、enchant.jsの仕様に関わる問題なのでしょうか? はたまた、ブラウザの仕様に関わるものなのでしょうか? 以上、宜しくお願い致します。

  • ASファイルからのstage

    flashcs3 actionscript3.0で作成しています。 asファイル "Test.as" package { import flash.display.DisplayObjectContainer; import flash.display.Sprite; import flash.display.Stage; import flash.display.StageDisplayState; import flash.events.*; public class Test extends Sprite { public function Test() { init(); } private function init() { for (var i:uint = 0; i<10; i++) { var sp:Sprite = new Sprite(); sp.graphics.beginFill(0x00CCFF); sp.graphics.drawRect(i*20,50,20,20); sp.graphics.endFill(); stage.addChild(sp); } } } } flash var hoge2 = new Test(); と書いてflash上のstage上にSpriteをaddChildしたいのですがstageをnullと解釈してしまいます。 この場合flash上のstageを参照するにはどうすれば良いのでしょうか?

    • ベストアンサー
    • Flash

専門家に質問してみよう