ゲームをきちんと完成させる方法

ゲームを開発しようと意気込んで始めたものの開発の難しさに気づき、漠然として広大な完成イメージに全く近づくことができずに諦めてしまう。。。っていうことが世間のあちらこちらで起きていると思われます。

正直、ゲーム作りって完成させることが難しい。特に今まで何かを作るっていう経験をしたことがない人間には夢だけが広がり過ぎてて、現実を知った瞬間に一気に心が折れてしまうというのは当然の現象だと思う。

料理で考えてみよう

料理したことありますか?なに作れますか?

スマートな方ならもうすでに私の言いたいことは理解していると思いますが、まともに料理したことない人間がうまい飯なんて作れねーんだよ!!カーッ(゚Д゚≡゚д゚)、ペッ

おっと、ちょっと本心が漏れてしまいましたがそういうことです(`・ω・´)

出来ないんですよ。出来ないっていうことを知る。

そう、みんな出来ないところから始まるんです。そして少しずつ出来るようになっていく。そういうもんだということを知ることがまず大事です。

最初にクリア条件を作る

さて、いざゲーム開発を始めたらゲームのクリア条件を先に作ってしまいます。「走ってゴールまで行く」でもいいし「敵を全滅させる」でもいいし「アイテムを全部取る」なんかでもいい、とにかく最初にクリアの条件を決めておきます。そしてステージクリア(ゲームクリア)のシーンを作ってしまいます。

おわかりいただけますでしょうか?

これでゲームは完成してるんですよ(`・ω・´)

「敵を全滅させる」が条件ならとりあえず敵を1匹画面に出しといてそいつを倒せばクリアになります。完成です。感動です(´;ω;`)

 

…えぇ、言いたいことはわかります。

しかし、これで夢半ばで開発がとん挫しようともゲームは完成させられます。

 

個人的な話ですが私ははっきりしたゲームの内容を決めずなんとなく作り始め、結果、目的のわからないクリアも出来ない謎の未完の大作(?)をいくつも作ってしまいました。それらを試作と思えるならいいですが、ゲームとして完成させたいと思って開発していると心がやられます(;´Д`)

作りたいゲームのイメージはしっかり作る

結局作りたいものが何かはっきりしているのか?っていうことが一番大事です。クリア条件を先に作るのもそのためです。

「俺はマリオやロックマンを超えるすごいアクションゲームを作る!!」

みたいな壮大だけどぼやけたイメージだと完成しないです。

「マリオみたいなゲーム作りたいから、手始めにゴールまで走るゲーム作ってみよう!!」

最初はこれくらいでいいです。そしてこの内容でできる限りはっきりとしたイメージを作ります。「まっすぐの道だけどたまにウ〇コとか落ちててジャンプで避けながら進む」みたいな感じでね(そんなゲームどっかにあったなぁ。。)

まとめ

偉そうに書きましたが半分は自分への戒めです(^^;)

ただ、本当にイメージは大事だと思います。強くはっきりイメージがあればあるほど自分の望んだものが出来上がる可能性は確実に高くなります。

ゲームに限らず、料理でも絵でも音楽でもファッションでも人生でもイメージが大事です。はっきりしたイメージであればあるほど達成できる可能性が上がります。

人生はイメージ

そんな言葉をどっかで聞いたような。。

 

秘密警察ギャボリン第1話

今回は「秘密警察ギャボリン第1話」の紹介です。ギャボリンは私が考えたおっさんヒーローです。全然カッコ良くないし、強そうでもない。。だけどなんだかとても愛らしい。そんなおっさんヒーローのアホな物語の記念すべき第一回目です

ギャボリンとは?

ギャボリンは正義の味方である。しかし、その正体は誰も知らない。唯一わかっていることは「おっさん」だということ。

ギャボリンに変身すると強いらしい。具体的にはわからないがとにかく強い、ということになっている。

ギャボリンのヒーロースーツには秘密がいっぱい隠されている。見た目が毎回違うのはどうやらヒーロースーツの影響らしいぞ(大ウソ)

「体は子供、頭脳はアレ」などっかのマンガの主人公みたいに事件に遭遇するらしい。そのたびに熱い心のギャボリンは戦いにでる。

「男とはそういうものさ・・」と彼の背中は語っている。。

ゲームのあらすじ

平和な生活を送る市民のお茶の間の主役であるテレビの電波が突然ジャックされた!!

謎のテロリストによる「爆弾を仕掛けた」宣言

突然の恐怖にパニックとなった東京を救うべく一人の男が立ち上がる!

 行け!ギャボリン!

ギャボリンの孤独な闘いが今はじまる!!パパラパラー(テーマソング的な何か)

ゲームの遊び方

テロリストが仕掛けた時限装置を破壊することが目的です。時限装置の周りには防衛装置が配備されており近づくことが出来なくなっています。なので動いている防衛装置の合間を狙って時限装置を撃破しましょう!!

ゲームは全部で39ステージあります。最後の数ステージの難易度はけっこう高いので頑張ってください。確実に当てられるタイミングがあるのでそれを見つけてください。

39ステージクリアすると感動のエンディングが待っています!!

制作のはなし

このゲームは開発初期に作ったタイミング射的をベースにしています。

ゲームの基本部分はタイミング射的のものをそのまま使っています。なのでこれも「えぴそーど0」のときと同様イベントシーンと音を付け加えて完成させました。

タイミング射的に関しては影響を受けたゲームがあります。

このcore ballのようなシンプルで面白いゲームができないだろうか?と考えて作ったものがタイミング射的でした。

実際タイミング射的自体もシンプルで、個人的にはこれだけでもアプリとして開発すれば売れるんじゃね?と思いました。ただ、これはステージを作るのが結構大変で。。(;´・ω・)それで途中で放置してたんです(^^;)

それでえぴそーど0を作ったあと、これもストーリーを加えて復活させてやろう!、ということになりました。

プログラムに関して

プログラム的に苦労した点としては、各ステージの玉の動きをどう扱うか?っていうところだったかと思います。単純に連想配列を使ってパターンを管理するようにしましたがこの辺のデータの扱い方については勉強が必要だと思いました。

その後のゲームの開発でも経験してわかってきたことなんですが、こういったデータの設計や管理がゲーム制作では重要になってくるようです。

作った感想

タイミング射的は自分の作ったゲームの中では一番よくできているゲームだと思っています。それをベースにして作ったこのゲームは間違いなく今の時点の私の最高傑作だと思います。

ついでに言うとイベントシーンの絵も無駄に力が入っていて、特にエンディング部分は結構時間をかけて丁寧に書きました。そういった面でも愛着のあるゲームです

えぴそーど0【自作ゲーム紹介】

えぴそーど0は私のゲーム制作の方向性を示してくれたゲームです。ゲーム自体は以前作ったSTG-PROTOTYPEと全く同じ内容なんですが、そこにくだらないストーリーを足して一本のゲームとして完成させることができました。そんなえぴそーど0の紹介です。

ゲーム内容

「なぞの宇宙人ぷりぷり星人による地球への攻撃で人類は滅亡の危機に瀕していた。もはや人類は滅亡するしかないのか?

そう誰もが諦めかけていたとき、一人の少年が現れた!!」

っていうアホなストーリーが付いていますが、ゲームの内容としては平凡なシューティングゲームです。これと言って特筆するところもない( ´艸`)

しかし、平凡なシューティングゲームにアホなストーリーをくっつけることによってゲームとして一つの作品っぽくさせることができました。

制作の話

このゲームはenchant.jsで一番最初に作ったSTGプロトタイプをベースにしています。シューティングゲーム部分はSTGプロトタイプをそのまま使い、イベントシーンを追加し、まだ実装していなかったBGM再生や効果音も付けて完成させたゲームです。

STGプロトタイプ自体は基本的なシューティングゲームで、昔専門学校で習ったことなどを思い出しながら何となしに作り上げました。なのでプログラムはすごく汚いです(-_-;)

プログラム的にちょっと困ったところは敵が弾を自機の方に向けて発射するようにするところや、ボスの周りを飛ぶザコの部分とかだったと思います。sin、cosとか使うやつですね。。それについての記事もそのうち書こうかな。

また、ストーリーを演出するためにこの時初めて効果音とBGMを入れました。音の再生自体はそんなに難しくはないですがループにはちょっと工夫が必要でした。

enchant.jsで効果音を鳴らす

enchant.jsでのBGMの再生の方法

イベントシーンについて

このゲームで一番悩んだのはイベントシーンでした。ゲーム自体はできていたのでそこにイベントシーンを加えるだけだったんですが、一体どういう風に作ったらいいもんだろうか?とちょっと悩みました。それでとりあえず紙芝居的な感じで作ってみようというなりました。

内容は単純に一つの画面にセリフが付く感じで、それを切り替える感じでやってみました。そこで再帰関数というものを初めて使いました。関数の中から自分自身を呼び出すっていう関数です。同じ関数を話のページを進めながら呼び出すっていう感じでやってみました。(再帰関数についてはまた記事にします)

あ、そういえばこれにはテキストの表示でけっこう苦労したんだった!!enchant.jsでは改行がうまくできなくて自分で実装する必要がありました。(それについてもまた記事にします)

作った感想

完成度としては素人レベルのショボいゲームですが、作った本人としては初めて最初から終わりまであるゲームを作り上げた作品なのでとても気に入っています。ゲームを一つ作り上げたということはとても自信になりました。

不要な要素は削除しよう

enchant.jsでは画面に追加した要素はプログラムの変数とは別の存在になっているようで、削除の手続きをしてあげないと消えないようです。少量だと問題ないですが多くなると実行処理の負担になってたりします。なので不要になったものはきちんと削除してあげましょう。

とはいえ、例えば敵キャラを倒したりするたびにそのキャラの要素を削除する必要はないです。敵キャラなどは状態を「死」にしておいて画面外に放りだしておけばOKです。要素を削除したり新たに生成するのは結構負担が大きいようなのでメインループ内では基本使わない方が良いと思います。

要素の削除が必要になってくるのはシーンの切り替えなどの時です。例えば会話シーンなどを作ってゲーム画面に出した後にその要素をちゃんと削除せずにいるとずっとその要素は残り続けます。そしてまた別の会話シーンで要素を生成して、また別の会話シーンで・・とやっていると使った要素が蓄積されてそのうち処理が重くなってきます。

なのでシーン切り替えの時はいらなくなったシーンをしっかり削除しましょう。

上記の関数をシーンを切り替える際に消したいシーンを引数にして呼び出してやります。これでシーン内の子要素はすべて削除できます。そして最後に

シーン自体も削除してやれば完了です。

こんな感じでシーン切り替えの際にシーンの子要素をすべて削除してシーンもその後に消してやればきれいさっぱり消えてなくなってくれます。

キャラクターに簡単な加速度をつける

今日はちょっとした小技の紹介です。キャラクターを動かすときに簡単な加速度みたいなものをつける方法です。

2D横スクロールゲームを作るときに

のような感じでキャラクターの座標に直接数値を足してしまうのは良くありません。特にジャンプ中に方向転換するとカクカクした動きになってしまいます(ファミコンの北斗の拳みたいな感じ)。

それを滑らかにする方法がこちら

だいぶ省略してますが、イメージは伝わると思います。

move_xという移動値を入れる変数を用意します。そして押した方向に対して右なら+、左ならーの値を加算します。そしてそれを移動値としてプレイヤーの座標に加算します。

これによって反対方向を押した瞬間に反対に動くということはなくなり、また、同じ方向を押し続けることで移動値が増え加速しているように見えます。

もちろんこれはキャラクターをジャンプさせるときにも応用できます。

今回は単純に1ずつ加減算してますが、もっと本格的な感じに見せるためには値を工夫する必要が出てきます。いろいろな方法があるようなので探してみると面白いかもしれませんね。

 

以上、小技紹介でした(‘ω’)ノ

画面のフェードアウト処理

ゲームを作っていて画面遷移時に絶対欲しいのがフェードアウト処理です。このフェードアウト処理がないと突然画面が切り替わり、あまりにも不自然に感じてしまいます。

フェードアウト処理はopacityという透明度のプロパティを使います。これは1が不透明(見える)で0が透明(見えない)です。なので簡単に説明すると黒い画像を用意してこれが透明から不透明に変わっていけばフェードアウトしていっているように見えるわけです。

サンプルプログラム

まず、

のように画面サイズとともに色を指定してFadeOutクラスを作成します(色を指定できるようにしているので白や赤など状況によって使い分けられます)。

initializeでは指定の色とサイズのコンテキストの作成などの初期化処理をします。

startメソッドはフェードアウトを開始したい場所に書きます。

doメソッドはメインループ内に書いておきます。isStartフラグがtrueになるとフェードアウトを開始します。ループ毎に指定されたスピードでフェードアウトします。終わったらtrueを返します。

 

以上の方法で簡単にフェードアウトさせることができます(‘ω’)ノ

バーチャルキーパッドの作り方

スマホ向けゲームを作っていると指でポチポチするだけの単純なゲームになりがちです(批判してるわけではないですよ。ただ類似ゲームばかり・・・)

なので今回はバーチャルキーパッドを自作します。しかも、自分で言うのも何ですが、これ結構すごいです。ブラウザ上でも同時押しとか普通にできちゃいます(私ができるようにしたわけではなく、できるということが分かっただけなんですが(^^;))。ここではenchant.jsでの作り方ですが基本ノウハウが分かれば違う環境でも簡単に作ることができると思うので興味のある方は是非読んでいってください。

ちなみに今回の内容はスマホでの使用が前提ですが、キーボードでも操作可能です。矢印キーとZ、Xキーで操作できるようにします。というか、キーボードでの操作とくっつけてしまうことが一番の肝です!!

用意するもの

f:id:inwan:20180326203607p:plain
方向キー用の画像とA・Bボタン用の画像を用意します。大きさは好きにしてください。私のは方向キーは300px、ボタンは150pxで作ってます。(上の画像は方向キーボタンとボタンが押された状態のものです)

各ボタンの変数

まずはバーチャルパッドではなく、キー入力から説明します。
キーの入力はGameオブジェクトのinput要素に保存されます。方向キーはinput.right、input.left、input.up、input.downにそれぞれ押したらtrue、押されていなければfalseが入ります。ボタンはちょっと違って、あらかじめ

でaボタンにキーボードのボタンを結び付けます。90はZキーのアスキーコードです。違うボタンが良ければアスキーコードを調べて変えてください(‘ω’)ノ
こっちのボタンも方向キーと同様な感じでinput.aにtrueまたはfalseが入ります。

方向入力

方向の入力を簡単に判断できるようにビット演算的な感じで上なら「0001」、右なら「0010」、下「0100」、左「1000」にして数値を当てはめます。

予約語的な感じで作っておくとわかりやすくてよいです。
であとは押されたボタンの数値を足すと方向が出ます。

あとはswitch文で分岐を作ってやればOK。これで左右同時押しなどおかしな入力は無視できます。

ボタンの判定

ボタンの判定は単純に

でOKです。ただし、完ぺきではありません。なぜかというと、いつ押したか、いつ離したか、押したままなのか、離したままなのかということが分からないからです。

なのでもう一つ、直前のボタンの状態を所持する変数を作っておきます

で、ボタンの処理のたびに前回はどうだったか?という分岐を書いてやると今押したのか、押したままだったのかということが分かるということです(‘ω’)ノ

バーチャルキーパッド

さて、ここからやっとバーチャルキーパッドの話になります(´∀`)とりあえず画面の好きなところに用意した画像を表示させてください。
で、実はこれは私が最初javascriptを勉強し始めるときに読んだ田中賢一郎さんの「ゲームで学ぶjavascript入門」参考にしています。

なのでプログラムを丸パクリに書いてしまうわけにもいかないのでここはサラッと説明します(;’∀’)

まず、マウスのクリック位置のevent.x、event.yとキーパッド画像の中心からの距離を出します。そしてそれの絶対値を出します。すると下図のようなグラフで考えられるようになります。

f:id:inwan:20180326213749p:plain
キーパッドの中心を原点として、x座標、y座標を比較してx > yなら右、y > xなら上と判断できます。で、あとはxとyが+かーかで左右、または上下の判断をします(わかるかな(^^;))
ちなみに、この方法だと2x > yとか2y > xとかの条件で8方向も簡単に作れます。

バーチャルキーパッドをキー入力に合わせる

で、最後にバーチャルパッドをキー入力に合わせるようにします。そうするとキー入力の処理のプログラムを書くだけで済みます。

こんな感じで単純にaボタンがクリックされたらキーボード入力の対応ボタンをtrueにしてやるだけです。タッチエンドでfalse。
方向キーの場合はTOUCH_MOVEでも入力できるようにしておくとグリグリ操作できるようになります(´∀`)
あ、あと押した方向キーが分かるようにボタンが光るようにするには、ボタンが一つ押された画像を用意して押されたボタンごとにrotationで角度を変えてやると全方向の画像を用意しなくても済みます。

と、こんな感じで私は自分のバーチャルキーパッドを作ってみました(*´ω`)興味のある方は一度お試しくださいまし。

あとがき

enchant.jsではスマホで2か所同時にタッチすることはできないので、こういうキーパッドでの入力はうまくいかないと思っていました(enchant.jsでキーパッド使ってるゲーム見たことない・・)。なのでただ単純にポチポチして遊ぶスマホゲームみたいなものしか作らないと思ってました。
ところが「秘密警察ギャボリン第二話」の開発中に遊んでるときに「ダッシュボタン」を押しながら「ジャンプボタン」がしっかり反応することを発見!!!「いけるやん!!( *´艸`)」ってテンション上がって自作でバーチャルキーパッドを作ってしまいましたとさ。めでたし、めでたし。。
ということです(笑)

enchant.jsでのBGMの再生の方法

今回はenchant.jsでのBGMの再生についてです。基本的には以前紹介した効果音の鳴らし方と同様に

で再生します。しかし、上記の方法では1回最後まで再生するとそこで音楽再生が終わってしまいます。ゲームのBGMなのだから自動でループ再生してくれないと困りますねよね。

ってことでBGMのループ再生を可能にしてくれる方法がこちら。

詳しいことはわからないのですが、srcというプロパティがスマホにはあってPCには無いようなので処理を変える必要があります。

srcプロパティを持っているスマホでは

この一行を再生時に書いておくだけで自動でループ再生してくれます。問題はPCです。

PCではメインループの中にplay()メソッドを書いておく必要があります。ただし、直接メソッドを書いてしまうとトラブルを引き起こします(演奏停止したいけどplay()メソッドのせいで停止できない、とか)。

なので演奏状態を管理するフラグを用意して再生中のみにループ再生してくれるようにしました。

名前もloopにして何をしてる処理か一目瞭然です(´∀`)

ゲームの専門学校ってこんなだったよ

なんか春になって気分もいいし、たまには自分語りなんてのもしてみようかなんて(^^;)

私がゲームの専門学校に通っていたのなんておよそ20年前のことですが「これからゲーム作りたい!」って思っている中学生・高校生の参考になればと思って書いておきます。

 専門学校入学から

まず、私は実は最初ゲーム科ではなく情報処理科に入学しました。なぜかというと、やっぱりゲームだけじゃ不安だったからです。ゲームは作ってみたかったけど、もっと他にもいろいろパソコンでできることを知りたかったんですよ。あと、私はファミコンが好きだったけどプレステが出てゲームが3D化してきてから興味が減っていったっていうのもありました。

で、情報処理科に入学しまして、まずはC言語の勉強から始まりました。というのも最初に目指す情報処理第二種(今は基本情報技術者?)はC言語2級程度のプログラミング能力が必要らしく、そのためまずは7月のC言語2級試験合格を目指して授業が進められました。

結果として7月の試験に合格し、次は11月の情報処理第二種試験のための勉強が本格化しました。

これまた結果として私は見事に合格したわけですが、自分で言うのも何ですがよく半年で取れたものです(´∀`)受かったのは私含めて学年で数人でした。

しかし、私はこの後しばらく学校に行かなくなりました。なぜかというと、この半年資格試験の勉強ばかりしてパソコンを全然触らなかったからです。私はパソコンでどんなことができるのか知りたくて、パソコンで色々やってみたくて情報処理科に入ったのに教わることは試験対策のみ。資格試験に合格し、やっとパソコンが触れるのかと思いきや次は1種の勉強なんて!!!!(;´Д`)

心の折れた私は部屋に引きこもりギターばかり弾いておりました。当然、親と喧嘩になり、「ならばゲーム科に行かせておくれよ!」と要求し、翌年春からゲーム科に行くことになりました。

 ゲーム科について

ゲーム科に登校して感じたのは情報処理科との雰囲気の差!!正直に書きますが「気持ち悪かった」です(;´Д`)

しかも、情報処理科ではノートパソコンは授業でたま~に使う以外は机の上にだすことはないのですが、ゲームコースは全員ノートパソコンを起動しており、しかも!なんだかみんなブルーの線でつながっている!!(しかも、この線は学校のものではなく、生徒が勝手に用意してつないでいた模様)さらに、なぜだか結構仲間グループが既にあったり、なんだか打ち解けている模様!俺氏困惑(;´Д`)

まぁ、そんな衝撃的なスタートからゲーム科生活が始まったわけですが、情報処理科と違ってゲーム科には特に目標はないので毎日なんだかフワフワした感じでした。

それはそれで最初は良かったんですが、半年もすると「一体何をやってるんだ!?」と感じ始めました。

まずはC言語の授業の遅さ。情報処理科では7月で2級を取ることを目標に授業が進んでいったんですがゲーム科は1年経っても3級すら取れそうにない授業内容でした。

さらにはゲームデザインなんて言う小学校の図工みたいな授業があったり(ゲームのアイデア考えてねってだけの時間)、3DCGの授業があったり(1年かけて自分の人形作りました。学校曰く、プログラムができない生徒の救済策なんだそうな)。。。

唯一楽しかったゲームプログラミングの授業でも1年でやったことは、画像を表示して動かして矩形と円の当たり判定をつける程度だったように思います。

そんな散々な授業内容ながら3学期は制作実習という・・何を作れというんだ・・(;´Д`)とは言いつつも才能を発揮し、北斗の拳風なキャラクターがでる謎のタイムアタックレースゲームを作り上げました( *´艸`)

 

で、翌年ゲーム科の2年に進んだんですが、これが全く記憶にない!!1年目と大差がなかったのか記憶が被っているのか何も覚えていません。たぶん大したこと習ってない( ゚∀゚)アハハ八八ノヽノヽノヽノ \ / \/ \なんかプレステで作ったのだけ覚えてるわ(^^;)

この年の制作実習はアフロヘアーの主人公の横スクロールアクションゲームでした。授業ではシューティングしか習ってなかったに独習して作りました(笑)

 

そんな記憶すら残らない授業ながら何故か3年目に進学。しかし、3年目は1年間制作実習というクソ設定。少しは授業でなんか習うだろうと思ってはいたんですが大したことを教われず、あげく「できるやつは自分で調べてやっている」という先生の言葉に心が折れ、「おれは一体学校に何しにきてるんだ?」と思い、学校を去ったのでした。。。

 

これがおよそ20年前のお話(‘ω’)ノ

振り返って

まぁ、専門学校なんて日本中にめちゃくちゃあるでしょうからもっと素晴らしい学校もたくさんあるだろうとは思います。

しかし、過去を振り返り、そして現在のゲーム開発の環境を考えるとゲームの専門学校なんて行かなくていいと思います( ´艸`)

あの当時はインターネットの普及もまだまだで情報も少なかったし、本屋に行ってゲーム制作の本を探してもほとんどなかったです(本は存在していたかもしれないけど、見つけられなかった。。)

それを思うと今はゲームエンジンなんて便利なものがあるし、情報も腐るほどあります。私の心を折れさせた「できるやつは自分で調べてやっている」という先生の言葉は今現在では「まったくおっしゃる通りです!」と返さざるを得ない状況になってます(^^;)

わたしが20年ぶりにゲーム制作を開始してこの一年間でできるようになったことは既にゲーム科で習ったことなどはるかに超えています。

数学・物理は勉強しとけ

ただ、ゲームを作るうえで、やっぱり知識は重要だと思います。わたしはこの間ゲームの当たり判定で「ベクトル」っていうものの知識が必要だということを知り、挫折しました(;´Д`)

まぁ挫折したからと言って諦めるわけではなく、これから独学で学んでいくつもりにしているんですが、ゲームプログラミングが高度になっていくと数学的な要素がとても重要になってくるようです。

学生時代「数学なんて社会でなんの役に立つの?」なんて思っていましたが、

ゲーム制作で役に立つんです!!

 

ゲーム作りたいなぁ、なんてぼーっと思ってるそこの若者!とりあえず数学やっとけ!(‘ω’)ノ

まとめ

くれぐれも言っておきますが、私が通っていたのはおよそ20年前ですし、学校についても星の数あるうちの一つにすぎません。素晴らしい学校もあるはずです。

ただ、やっぱり個人的にはゲーム科に行った甲斐はあまりなかったように思います。それにもし最初情報処理科でC言語を習得していなかったら、って考えるとゾッとします(^^;)

あと、ゲーム科に通って思ったことは、ゲーム科のほとんどの生徒は「ゲームが作りたい」ではなく、ただ「ゲームが好き」な人間でした。なのでプログラミングがまったくわからないORやる気がない人間ばかりでした。

 

もし、「専門学校に行くと自動的にゲームが作れる能力が身につく」、なんて思ってるなら絶対に行かない方が良いと思います!m9っ`Д´) ビシッ!!(親が泣くよ)

 

まぁ、そんだけ(‘ω’)ノ

enchant.jsで効果音を鳴らす

enchant.jsでは音を鳴らす基本的な方法はこんな感じになってます。

これで音が鳴ります。clone()は複製する処理で、なくても音は鳴らせますが同じ音を重ねて鳴らすことができません。

音を鳴らしたい場所に上の2行を書けばいくらでも音を鳴らせるんですが、同じ音を鳴らすならデータの引き当ては一回で済ませたいところです。

ということで、以下のようなクラスを作ってみました。

set()で引数に音楽データとともに同時再生数の限度数も渡します。これで必要な数のクローンを先に作ってしまいます。

再生時は順繰りにデータを再生します。しかし、同時再生数が最大数になるとそれ以上再生できなくなり、鳴っている音が消えて再生可能な空きが出るまで次の再生が始まりません。

クローンを作る数は敵キャラの爆発など同時再生が多発するものは多く、あまり同時に発生しない効果音は少な目に作ると良いと思います。

ただし、一度再生するだけなら一番最初に説明した2行で十分です。必要に応じて使ってください(‘ω’)ノ