Intel XDKで最小のPhaserゲヌムを䜜成する

子䟛たちは珟代の技術が倧奜きです。 みなさんは、ご自身でもビデオでも、子䟛たちがスマヌトフォンやタブレットをどのように䜿甚しおいるかを芋たに違いありたせん。 これらの子䟛たちは適切に「 "の䞖代 」ず呌ばれおいたした。 圌らは倜の蝶のようなモバむル機噚のディスプレむの光に「矀がる」。 子䟛がプレむするゲヌムの倚くは非垞に簡単に䜜成できたす。 しかし、そのような単玔なアプリケヌションでも、深刻なプロゞェクトに成長する可胜性がありたす。



フェむザヌ


このガむドでは、 Phaser HTML5ラむブラリを䜿甚しお、蟲堎に䜏む動物や鳥に関するスラむダヌゲヌムを䜜成する方法に぀いお説明したす。 このプロゞェクトのむンスピレヌションの源は、Fisher-Price AndroidゲヌムのAnimal Sounds for Babyでした。
Phaserは、2Dゲヌムを開発するための無料の楜しく孊ぶべきHTML5フレヌムワヌクです。 リチャヌド・デむビヌリチャヌド・デむノィヌによっお䜜成されたした。Phaserが開発者の玠晎らしいコミュニティを圢成しおいたす。 圌らは通垞、 HTML5 Game Devsフォヌラムでチャットしたす 。


ゲヌム画面

コヌドずゲヌムのリ゜ヌス


プロゞェクトのコヌドずリ゜ヌスをダりンロヌドできたす。開発に぀いおはここから、ここからダりンロヌドできたす。 そしお、これがGitHubリポゞトリです 。

ゲヌムのグラフィックスは私の䌚瀟Zenvaが䜜成したこずに泚意しおください。 商甚および非商甚プロゞェクトに画像を䜿甚できたすが、垰属は必芁ありたせんただし、これらすべおからCandy Crashのような次のヒットを䜜成する堎合は、倧邞宅を賌入しおください。

プロゞェクトの背景ず前提条件


このチュヌトリアルでは、Phaserを䜿甚しお、子䟛向けのクロスプラットフォヌムゲヌムを䜜成したす。 たた、Apache CordovaずIntel XDKを䜿甚しお、Androidプラットフォヌム甚のアプリケヌションを゚クスポヌトするこずも怜蚎しおいたす。

読み始めるずきには、基本的なJavaScript開発スキルがあるこずを前提ずしおいたす。 そうでない堎合は、たずJSの基本を理解するこずをお勧めしたす。 たずえば、 Zenva Academyの JavaScriptコヌスを受講するず、必芁な知識をすばやく習埗できたす。

このガむドを習埗するために、Phaser、Cordova、Androidの経隓は必芁ありたせん。 ゲヌム開発の知識に぀いおも同じこずが蚀えたす。

Phaserに基づいお䜜成されたゲヌムは、ブラりザでIndex.htmlファむルを開くだけでは開始できたせん。 通垞の操䜜には、Webサヌバヌが必芁です。 Phaserゲヌムは、Cordova APIを䜿甚しない堎合、通垞のロヌカルWebサヌバヌを䜿甚しお起動できたす。 たずえば、WindowsではWAMP、MacではMAMPです。 Pythonの単玔なHTTPサヌバヌたたはNode.jsのhttp-serverパッケヌゞを䜿甚できたす。

さらに、 Intel XDKやBrackets゚ディタヌなどの䞀郚の開発環境には組み蟌みのWebサヌバヌが付属しおいるため、これらのツヌルを䜿甚するず、別個のサヌバヌをむンストヌルする必芁がありたせん。

こんにちは䞖界


怜蚎䞭のPhaserプロゞェクトの基瀎は、ゲヌムコヌドが含たれるPhaserラむブラリずスクリプトが接続されるIndex.htmlファむルの圢匏で提瀺されたす。 Index.htmlは次のようになりたす。

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" /> <title>Learn Game Development at ZENVA.com</title> <script type="text/javascript" src="js/phaser.js"></script> <style> body { padding: 0px; margin: 0px; background: black; } </style> </head> <body> <!--     --> <script src="js/main.js"></script> </body> </html> 

main.jsのコヌドは次のずおりです。 ここで、これたでのずころ-メ゜ッドの空癜のみ。

 //         var GameState = { //   init: function() { }, //      preload: function() { }, //    ,      create: function() { }, //       update: function() { } }; // Phaser var game = new Phaser.Game(640, 360, Phaser.AUTO); //     game.state.add('GameState', GameState); //  game.state.start('GameState'); 

最新のIntel XDKを䜿甚しおいる堎合、Phaserテンプレヌトを䜿甚しおスタヌタヌプロゞェクトを生成できたす。 これを行うには、[プロゞェクト]タブで[新しいプロゞェクトの開始]をクリックし、[テンプレヌト]グルヌプを展開しお、[ゲヌム]を遞択し、テンプレヌトのリストから[フェむザヌ]を遞択したす。 最初に行うこずは、Intel XDKの堎合ず少し異なりたすが、䜕が起こっおいるかの本質を倉えるこずはありたせん。

ロヌカルWebサヌバヌを䜿甚しおブラりザヌでIndex.htmlをダりンロヌドし䞊蚘で説明したした、ブラりザヌコン゜ヌルを開くず、Phaserの正垞な初期化に関する情報を確認できたす。


成功したPhaser初期化

スプラむト


画像、たたはゲヌム業界で䞀般的に呌ばれおいるように、「スプラむト」は2Dゲヌムの毎日のパンです。 Phaserはスプラむトを䜿甚しお、背景、ゲヌムのキャラクタヌ、およびほがすべおのゲヌムグラフィックを衚瀺したす。 スプラむトを䜿甚したいく぀かの䟋を芋おみたしょう。

テクスチャのプリロヌド


画面にスプラむトを衚瀺する前に、このスプラむトに関連付けられおいる画像ファむルをダりンロヌドする必芁がありたす。 ディスクからファむルをダりンロヌドするには時間がかかりたすが、デバむスのRAMから画像をダりンロヌドするこずはほが瞬時に行われたす。 ゲヌムリ゜ヌスをプリロヌドするず、必芁なものがすべおディスクからロヌドされ、RAMに配眮されたす。 その結果、画像などが必芁になったずきに画面に衚瀺したり、音の堎合は瞬きしお再生したりできたす。

Webペヌゞが完党にロヌドされない堎合がありたすが、テキストず䞀郚の画像のみを衚瀺できるこずに気づきたしたか これは、画像を衚瀺する前にサヌバヌからダりンロヌドする必芁があるためです。 これはWebサむトでは普通のこずで、誰もがそれに慣れおいたすが、ゲヌムではこれは単に受け入れられたせん 画像が読み蟌たれなかったキャラクタヌの代わりに黒い長方圢でお気に入りのゲヌムを想像しおください。

したがっお、GameStateオブゞェクトのpreloadメ゜ッドで、画像やサりンドなどの他のゲヌムリ゜ヌスをプリロヌドするこずから始めたしょう。 倖芳は次のずおりです。

 preload: function() { this.load.image('background', 'assets/images/background.png'); this.load.image('chicken', 'assets/images/chicken.png'); } 

This.loadコマンドは、Phaser゚ンゞンによっお初期化されたロヌダヌず呌ばれるオブゞェクトを呌び出したす。 このオブゞェクトには、さたざたなタむプのゲヌムリ゜ヌスをロヌドするためのさたざたなメ゜ッドが装備されおいたす。 詳现に぀いおは、 ドキュメントを参照しおください。 最初のパラメヌタヌはリ゜ヌスのキヌです。 キヌには任意のものを䜿甚できたすが、䞻なこずは同じキヌを異なるリ゜ヌスに蚭定しないこずです。 特定のリ゜ヌスにアクセスするために、キヌはゲヌムコヌドで䜿甚されたす。

スプラむト衚瀺


画面にスプラむトを衚瀺するには、GameStateオブゞェクトのcreateメ゜ッドに適切なコヌドを远加する必芁がありたす。 このメ゜ッドは、必芁なすべおのゲヌムリ゜ヌスが読み蟌たれた埌に1回実行されたす。

 //    ,      create: function() { this.background = this.game.add.sprite(0, 0, 'background'); this.chicken = this.game.add.sprite(100, 100, 'chicken'); }, 

画面䞊のスプラむトは、XおよびYの倀によっお決定される指定された座暙に配眮されたす。座暙系は、ゲヌムワヌルドの巊䞊隅から始たりたす。 Y倀は䞊から䞋ぞ、Xは巊から右ぞ増加したす。


原点は巊䞊隅にありたす

䞊蚘のコヌドで初期化されたスプラむトの衚瀺は次のようになりたす。


Intel XDK゚ミュレヌタヌに衚瀺されるスプラむト

基準点


指定された座暙x、yに配眮されるスプラむトポむントは、アンカヌポむントず呌ばれたす。 デフォルトでは、スプラむトの参照点は巊䞊隅に察応しおいたす。 したがっお、スプラむトの䜍眮を、たずえば10.10に蚭定するず、その巊䞊隅が指定された䜍眮になりたす。

スプラむトを回転させるず、アンカヌポむントが回転の䞭心になりたす。 さらに、スプラむトのサむズを倉曎しお拡倧瞮小するず、スプラむトは増枛したすが、アンカヌポむントは倉換が開始される前の䜍眮に残りたす。

スプラむトの参照ポむントを倉曎する必芁がある堎合がありたす。 たずえば、䞭心を参照しおスプラむトの䜍眮を蚭定する必芁がある堎合。 以䞋に瀺すように、これを行うこずができたすスプラむトを衚瀺した埌。

 //      //     : this.chicken.achor.setTo(0.5); this.chicken.anchor.setTo(0.5, 0.5); 



アンカヌポむントを倉曎した埌のスプラむト

スプラむトの回転


スプラむトの回転は非垞に簡単です。 これを行うには、その角床プロパティ回転角床を倉曎するだけです。 回転は、基準点の呚りで行われたすこの堎合、スプラむトの䞭心の呚り。 回転角床は床で蚭定されたす。 たずえば、スプラむトを90床回転させる方法です。

 this.chicken.angle = 90; 


90床のスプラむト回転

スプラむトのサむズ倉曎


スプラむトのscaleプロパティを䜿甚するず、サむズを倉曎できたす。 次に、スケヌリングの䟋を瀺したすスプラむトは、回転前の状態に以前に戻されたした。

スプラむトを垂盎に匕き䌞ばしたす。

 this.chicken.scale.setTo(3,1); //    X        Y 



瞊に䌞びたスプラむト

スプラむトのサむズを半分に枛らしたす。

 this.chicken.scale.setTo(0.5) //   50%    x,    y 



スプラむトは半分になりたす

スプラむトの反射


X軞たたはY軞に沿っおスプラむトを反映する必芁がある堎合、scaleプロパティを蚭定するずきに負の倀を蚭定するこずでこれを行うこずができたす。 たずえば、X軞に沿っお倀-1を指定するず、スプラむトはこの軞に沿っお反映されたすが、サむズは倉曎されたせん。 -1以倖の負の倀を䜿甚するず、反射ずサむズ倉曎の2぀の効果がありたす。

X軞に沿っおスプラむトを反映したす。

 this.chicken.scale.setTo(-1,1); //   x 



X軞スプラむト

ゲヌムワヌルドの䞭心ぞのスプラむトの配眮


スプラむトの基準点を䞭心に蚭定し、画面の䞭心をスプラむトの新しい座暙ずしお指定するこずにより、スプラむトをゲヌムワヌルドの䞭心に配眮するのが最も簡単です。 たずえば、次のようにできたす。

 //      this.chicken = this.game.add.sprite(this.game.world.centerX, this.game.world.centerY, 'chicken'); //      this.chicken.anchor.setTo(0.5, 0.5); 

xおよびyプロパティの倀を線集するこずにより、画面䞊のスプラむトの䜍眮をい぀でも倉曎できたす。

䞊蚘で調べたSpriteクラスずそのメ゜ッドずプロパティの詳现に぀いおは、 ドキュメントを参照しおください 。

ゲヌム画面のサむズをデバむスの画面サむズに調敎する


ゲヌムが開発されおいるプラ​​ットフォヌムに関係なく、いずれにしおも、異なる解像床ずアスペクト比に察凊する必芁がありたす。 それが珟実です。 最近では、これはHTML5ゲヌムの開発者にずっお本圓の悪倢でしたが、ほずんどのゲヌム゚ンゞンはさたざたな画面に関連する問題を凊理したす。 Phaserも䟋倖ではありたせん。あらゆる皮類の画面をサポヌトする組み蟌み機胜が含たれおおり、さたざたなデバむスで正垞に動䜜するゲヌムを䜜成できたす。 Phaserのこのすべおは、 Scale Managerオブゞェクトによっお凊理されたす。
ゲヌム画面は、デバむスの画面サむズに応じおサむズが倉曎され、アスペクト比が維持されたす。 ズヌムマネヌゞャヌのこのモヌドは、SHOW_ALLず呌ばれたす。 蚭定はinitメ゜ッドで行われたす。

 //   init: function() { //   this.scale.scaleMode = Phaser.ScaleManager.SHOW_ALL; //       this.scale.pageAlignHorizontally = true; this.scale.pageAlignVertically = true; }, 


画面䞊のゲヌム、ゲヌム画面のパラメヌタヌずは異なるパラメヌタヌ

矢印を远加する


ゲヌム画面に矢印を远加しお、蟲堎の䜏民を切り替えるこずができたす。 ナヌザヌが矢印をタッチするず、画面に衚瀺されるクリヌチャヌが右たたは巊に移動し、新しいクリヌチャヌが画面の䞭倮に眮き換わりたす。

次に、矢印スプラむトを远加しお、それらのプロパティの䞀郚を構成したす。 たず、preloadメ゜ッドでテクスチャをプリロヌドしたす。

 this.load.image('arrow', 'assets/images/arrow.png'); 

次に、createメ゜ッドで、次の操䜜を行いたす。

 //  this.leftArrow = this.game.add.sprite(60, this.game.world.centerY, 'arrow'); this.leftArrow.anchor.setTo(0.5); this.leftArrow.scale.x = -1; this.leftArrow.customParams = {direction: -1}; //  this.rightArrow = this.game.add.sprite(580, this.game.world.centerY, 'arrow'); this.rightArrow.anchor.setTo(0.5); this.rightArrow.customParams = {direction: 1}; 

ここで、矢印ごずに1぀ず぀、2぀のスプラむトを䜜成したす。 どちらも同じテクスチャを䜿甚しおおり、ダりンロヌドしたものをキヌずしお「矢印」を指定しおいたす。 スプラむトがゲヌムワヌルドのY軞の䞭心に正確に配眮されおいるこず、アンカヌポむントがスプラむトの䞭心に蚭定されおいるこず、およびスケヌルプロパティを䜿甚しお最初の矢印が巊を指すように回転しおいるこずに泚目しおください。

远加のスプラむトオプション


X軞に沿った矢印の方向に関する情報を含む、矢印スプラむト甚の远加パラメヌタヌを䜜成したす。システムによっお提䟛されない独自のプロパティを蚭定するには、this.rightArrow.anythingHereコンストラクトを䜿甚できたす。 ただし、これらの远加プロパティを別のオブゞェクトに保存し、「customParams」ずいう名前を付けたす。 なぜこれをしおいるのですか たずえば、Phaserに十分な知識がなく、「scale」ずいうオブゞェクトの远加プロパティを䜜成するこずにした堎合はどうなりたすか 知っおいるように、スケヌルはスプラむトの暙準プロパティの1぀であり、同じものをもう1぀䜜成したので、特定の倀を蚭定するこずで暙準のものを単玔に眮き換えたす。 その結果、理解しにくい問題や゚ラヌを怜出するのは非垞に困難です。 そのため、すべおの远加デヌタを別のオブゞェクトに保存し、その名前がスプラむトオブゞェクトに既にあるものず䞀臎しないこずを完党に確信しお保存するこずを奜みたす。


ゲヌム画面䞊の矢印

入力凊理


今、画面䞊に䞀察の矢印ず動かない鶏がいたす。 埌で、代わりにファヌム党䜓が存圚したす。 ただし、ずりあえずは鶏をそのたたにしおおき、入力凊理を行いたす。

開始するには、タッチずマりスクリックに応答する鳥をむンタラクティブにしたしょう。

 this.chicken = this.game.add.sprite(this.game.world.centerX, this.game.world.centerY, 'chicken'); //      this.chicken.anchor.setTo(0.5, 0.5); // ,   –       this.chicken.inputEnabled = true; //        this.chicken.input.pixelPerfectClick = true; //      this.chicken.events.onInputDown.add(this.animateAnimal, this); 

ここで、GameStateオブゞェクトにanimateAnimalメ゜ッドを䜜成する必芁がありたす。 アニメヌションが開始され、サりンドが再生されたす。

 //     animateAnimal: function(sprite, event) { console.log('animate animal and play sound'); }, 

䞡方の矢印の入力むベント凊理をオンにしたす。

 //  this.leftArrow = this.game.add.sprite(60, this.game.world.centerY, 'arrow'); this.leftArrow.anchor.setTo(0.5); this.leftArrow.scale.x = -1; this.leftArrow.customParams = {direction: -1}; //     this.leftArrow.inputEnabled = true; this.leftArrow.input.pixelPerfectClick = true; this.leftArrow.events.onInputDown.add(this.switchAnimal, this); //  this.rightArrow = this.game.add.sprite(580, this.game.world.centerY, 'arrow'); this.rightArrow.anchor.setTo(0.5); this.rightArrow.customParams = {direction: 1}; //     this.rightArrow.inputEnabled = true; this.rightArrow.input.pixelPerfectClick = true; this.rightArrow.events.onInputDown.add(this.switchAnimal, this); 

空の状態でswitchAnimalメ゜ッドを远加したす。

 //     ,  sprite    ,    switchAnimal: function(sprite, event) { console.log('switch animal'); } 

ここで、矢印たたは鶏をクリックするず、察応するメッセヌゞがコン゜ヌルに衚瀺されたす。

グルヌプ


スプラむトセットの操䜜は、ゲヌム開発で䜿甚される䞀般的な手法です。 たずえば、倚くの敵がいる宇宙船に関するゲヌム。 新しい敵が画面に衚瀺され、砎壊され、敵の船がゲヌムの䞖界ず等しく盞互䜜甚したす。 倚くの操䜜は、各敵に察しお個別に実行するのではなく、䞀郚のグルヌプに察しおすぐに実行する方が䟿利であるず想定するのが論理的です。

ゲヌムには動物ず鳥のセットがありたす。 矢印ボタンを䜿甚しお、ファヌムの次の居䜏者に切り替えるか、前の居䜏者に戻るこずができたす。 ゲヌムオブゞェクトを操䜜するために、グルヌプを䜿甚したす。

各クリヌチャヌの䞀意のデヌタ名前、テクスチャ、サりンド、アニメヌションは、オブゞェクトの配列ずしおゲヌムに衚瀺されたす。 このようなアレむは、理論的には、特定のWebサヌバヌたたはロヌカルストレヌゞから既補でダりンロヌドできたす。 このデヌタを䜿甚しお、スプラむトを䜜成し、それらをグルヌプに結合したす。

別のスプラむトで鶏に別れを告げ、オブゞェクトのグルヌプでの䜜業に進みたす。 それらの画像をプリロヌドするこずから始めたしょう。

 preload: function() { this.load.image('background', 'assets/images/background.png'); this.load.image('arrow', 'assets/images/arrow.png'); this.load.image('chicken', 'assets/images/chicken.png'); this.load.image('horse', 'assets/images/horse.png'); this.load.image('pig', 'assets/images/pig.png'); this.load.image('sheep', 'assets/images/sheep.png'); }, 

createメ゜ッドでは、矢印に関連するコヌドたですべおを削陀し、次のものをそこに貌り付ける必芁がありたす。

 //     this.background = this.game.add.sprite(0, 0, 'background'); //    var animalData = [ {key: 'chicken', text: 'CHICKEN',}, {key: 'horse', text: 'HORSE'}, {key: 'pig', text: 'PIG'}, {key: 'sheep', text: 'SHEEP'} ]; //      –    this.animals = this.game.add.group(); //   var self = this; var animal; animalData.forEach(function(element){ //    ,   animal = self.animals.create(-1000, self.game.world.centerY, element.key, 0); //  ,     Phaser,    animal.customParams = {text: element.text, sound: 'to be added..'}; //      animal.anchor.setTo(0.5); // ,         animal.inputEnabled = true; animal.input.pixelPerfectClick = true; animal.events.onInputDown.add(self.animateAnimal, this); }); //      this.currentAnimal = this.animals.next(); this.currentAnimal.position.set(this.game.world.centerX, this.game.world.centerY); 

これが私たちが今やったこずです。

  1. ファヌムの䜏民のすべおのデヌタをJSONオブゞェクトずしお蚭定したす。 このようなオブゞェクトは、Webサヌバヌたたはロヌカルストレヌゞからダりンロヌドできたす。たた、䞀郚のゲヌムでは、プログラムで生成できたす
  2. オブゞェクトのグルヌプを䜜成したした。
  3. 蟲堎の䜏民に応じおサむクルを実行し、それぞれのスプラむトを䜜成し、グルヌプに䜕が起こったのかを远加したした。
  4. 各スプラむトに぀いお、入力凊理がオンになり、コヌルバック関数が蚭定されたした。これは、ナヌザヌがゲヌムオブゞェクトを操䜜するずきに機胜するはずです。
  5. nextメ゜ッドを䜿甚しおグルヌプから最初のクリヌチャヌを取埗し、画面の䞭倮に配眮したした。 グルヌプを䜿甚するず、nextおよびpreviousコマンドを䜿甚しお、グルヌプに含たれるオブゞェクトにアクセスできたす。

䜿甚するGroupクラスの詳现に぀いおは、 こちらをご芧ください 。

補間アニメヌション


「トゥむヌン」ず呌ばれるこずの倚い補間アニメヌションは、開始フレヌムず終了フレヌムを蚭定するアニメヌションのアプロヌチであり、䞭間フレヌムはシステムによっお自動的に生成されたす。 したがっお、「間に」から圢成される「トゥむヌン」ずいう甚語は、「間に」ずしお翻蚳するこずができたす。

たずえば、ボヌルの䜍眮はx = 10です。 10秒間のアニメヌション化された動きの終わりに、圌はx = 100の䜍眮にいるこずにしたした。 その結果、ボヌルは指定された時間内に初期䜍眮から最終䜍眮たでスムヌズに移動したす。 同時に、アニメヌションの継続時間だけでなく、初期䜍眮ず最終䜍眮のみを蚭定したす。

Phaserには、補間アニメヌションの組み蟌みサブシステムが含たれおいたすドキュメントのTweenクラスの説明をご芧ください 。 Spriteクラスのオブゞェクトのほがすべおのプロパティ、たたは耇数のプロパティを同時にアニメヌション化できたす。

蟲堎の䜏民の動きを最初から最埌たでアニメヌション化したす。 さらに、アニメヌションが終了したずきに実行されるコヌルバック関数を蚭定できたす。

動物や鳥が画面䞊を動き回っおいるずきに、矢印をクリックする機胜をオフにしたす。 その結果、ナヌザヌはアニメヌション䞭に矢印をクリックできなくなりたすこれを行わないず、かなりおかしいこずがわかりたすが、詊しおみおください。
䞊蚘でフレヌムワヌクが䜜成されたswitchAnimalメ゜ッドは、次のようになりたす。

 //    switchAnimal: function(sprite, event) { //  ,    if(this.isMoving) { return false; } this.isMoving = true; var newAnimal, endX; //,     ,    if(sprite.customParams.direction > 0) { newAnimal = this.animals.next(); newAnimal.x = -newAnimal.width/2; endX = 640 + this.currentAnimal.width/2; } else { newAnimal = this.animals.previous(); newAnimal.x = 640 + newAnimal.width/2; endX = -this.currentAnimal.width/2; } //   ,    x var newAnimalMovement = game.add.tween(newAnimal); newAnimalMovement.to({ x: this.game.world.centerX }, 1000); newAnimalMovement.onComplete.add(function() { this.isMoving = false; }, this); newAnimalMovement.start(); var currentAnimalMovement = game.add.tween(this.currentAnimal); currentAnimalMovement.to({ x: endX }, 1000); currentAnimalMovement.start(); this.currentAnimal = newAnimal; }, 

コヌドからわかるように、補間アニメヌションを操䜜するための通垞の手順はいく぀かのステップで構成されおいたす。

  1. アニメヌションを実行するTweenオブゞェクトを䜜成したす。
  2. アニメヌションプロパティを蚭定し、必芁に応じおコヌルバック関数を蚭定したす。
  3. プログラムの適切な堎所でアニメヌションを実行したす。


補間アニメヌション

フレヌムアニメヌション


ゲヌムで䜿甚できる別の皮類のアニメヌションは、フレヌムアニメヌションず呌ばれたす。 このアプロヌチでは、アニメヌションのさたざたなフレヌムを含む、いわゆるスプラむトシヌトスプラむトシヌトが必芁です。 このプロゞェクトに関係するスプラむトリストは、そのプロゞェクトの資料で入手できたす。


スプラむトリスト

スプラむトリストをプリロヌドするこずから始めたしょう。 個々の画像をロヌドする代わりに、スプラむトシヌトをロヌドしお、サむズずフレヌム数を蚭定したす。

 //      preload: function() { this.load.image('background', 'assets/images/background.png'); this.load.image('arrow', 'assets/images/arrow.png'); this.load.spritesheet('chicken', 'assets/images/chicken_spritesheet.png', 131, 200, 3); this.load.spritesheet('horse', 'assets/images/horse_spritesheet.png', 212, 200, 3); this.load.spritesheet('pig', 'assets/images/pig_spritesheet.png', 297, 200, 3); this.load.spritesheet('sheep', 'assets/images/sheep_spritesheet.png', 244, 200, 3); }, 

, Loader .

create() . . , , , , ( 0). , - . «0» — , .

 animalData.forEach(function(element){ //    ,   animal = self.animals.create(-1000, self.game.world.centerY, element.key, 0); // 

, Phaser, :

 animal.customParams = {text: element.text}; //       animal.anchor.setTo(0.5); //  animal.animations.add('animate', [0, 1, 2, 1, 0, 1], 3, false); //  ,         animal.inputEnabled = true; animal.input.pixelPerfectClick = true; animal.events.onInputDown.add(self.animateAnimal, this); }); 

, :

 animal.animations.add('animate', [0, 1, 2, 1, 0, 1], 3, false); 

B , «animal». («animate» ), . – , , . , , , – . – . (3 ) . , «false», , , . «true», , , . – «false», , , , , .

. animateAnimal.

 //     animateAnimal: function(sprite, event) { sprite.play('animate'); }, 


. , , preload().

 this.load.audio('chickenSound', ['assets/audio/chicken.ogg', 'assets/audio/chicken.mp3']); this.load.audio('horseSound', ['assets/audio/horse.ogg', 'assets/audio/horse.mp3']); this.load.audio('pigSound', ['assets/audio/pig.ogg', 'assets/audio/pig.mp3']); this.load.audio('sheepSound', ['assets/audio/sheep.ogg', 'assets/audio/sheep.mp3']); 

mp3 ogg. , , HTML5, . MP3 OGG . , , Audacity . Linux, Windows Mac.

animalData . customParams .

 //    var animalData = [ {key: 'chicken', text: 'CHICKEN', audio: 'chickenSound'}, {key: 'horse', text: 'HORSE', audio: 'horseSound'}, {key: 'pig', text: 'PIG', audio: 'pigSound'}, {key: 'sheep', text: 'SHEEP', audio: 'sheepSound'} ]; //        this.animals = this.game.add.group(); var self = this; var animal; animalData.forEach(function(element){ // 

C , :

 animal = self.animals.create(-1000, self.game.world.centerY, element.key, 0); //  ,     Phaser,    animal.customParams = {text: element.text, sound: self.game.add.audio(element.audio)}; //      animal.anchor.setTo(0.5); //   animal.animations.add('animate', [0, 1, 2, 1, 0, 1], 3, false); //  ,         animal.inputEnabled = true; animal.input.pixelPerfectClick = true; animal.events.onInputDown.add(self.animateAnimal, this); }); 

, , , , animateAnimal.

 //      animateAnimal: function(sprite, event) { sprite.play('animate'); sprite.customParams.sound.play(); }, 

!

?


Freesound.org , . Audacity . Freesound.org – , . , . , .


: , .

, , , animalData, .

, . .

 showText: function(animal) { //          if(!this.animalText) { var style = {font: "bold 30pt Arial", fill: "#D0171B", align: "center"}; this.animalText = this.game.add.text(this.game.width/2, this.game.height * 0.85, 'asdfasfd' , style); this.animalText.anchor.setTo(0.5); } this.animalText.setText(animal.customParams.text); this.animalText.visible = true; } 

, . , , Text, , .

create – , . . , currentAnimal, , .

 //      this.currentAnimal = this.animals.next(); this.currentAnimal.position.set(this.game.world.centerX, this.game.world.centerY); this.showText(this.currentAnimal); 

, , . visibility. .

 //     switchAnimal: function(sprite, event) { //   ,    if(this.isMoving) { return false; } this.isMoving = true; //  this.animalText.visible = false; var newAnimal, endX; // ,     ,    if(sprite.customParams.direction > 0) { newAnimal = this.animals.next(); newAnimal.x = -newAnimal.width/2; endX = 640 + this.currentAnimal.width/2; } else { newAnimal = this.animals.previous(); newAnimal.x = 640 + newAnimal.width/2; endX = -this.currentAnimal.width/2; } //    ,    x var newAnimalMovement = game.add.tween(newAnimal); newAnimalMovement.to({ x: this.game.world.centerX }, 1000); newAnimalMovement.onComplete.add(function() { this.isMoving = false; //  this.showText(newAnimal); }, this); newAnimalMovement.start(); var currentAnimalMovement = game.add.tween(this.currentAnimal); currentAnimalMovement.to({ x: endX }, 1000); currentAnimalMovement.start(); this.currentAnimal = newAnimal; }, 




おめでずうございたす . , – . , .


HTML5- : , , . , , , . , – , , .

, Android- Cordova Intel XDK . Cordova « How to Build a Virtual Pet Game with HTML5 and Cordova ». API Cordova.

Intel XDK, , . , Projects () Start a New Project > Import Your HTML5 Code Base ( > HTML5-).

, , . , , Test () ( Intel, App Preview, ).

, Android, , Build (). Android, . «Android», – «Crosswalk for Android». , , Crosswalk , , webview, Chrome. Android-, ( , Android 4+). – Crosswalk. , . – APK . , Android-, Intel XDK, APK- 1 , , Crosswalk, 20 .

, Android , APK- Google Amazon.

おわりに


, , .


. Phaser, , , . How to Make a Virtual Pet Game with HTML5 and Cordova , How to Make a Sidescroller Game with HTML5 , HTML5 Phaser Tutorial – SpaceHipster , HTML5 Phaser Tutorial – Top-down Games . – HTML5- Zenva Academy.

, - , – ! , – GameDev Academy . .

Source: https://habr.com/ru/post/J282536/


All Articles