iPhoneでenchant.jsのサウンド再生

2012 年 10 月 15 日 by 山平

Javascript製ゲームエンジンenchant.jsについて、過去にいくつかの記事を書きました。

ここでは触れていないのですが、enchant.jsではiPhone(MobileSafali)ではサウンドの再生に制限があります。

wise9 › enchant.jsのサウンド機能で、ゲームをさらにカッコよく!

特に、iOS上のブラウザ (Mobile Safari) については、「プレイヤーが画面にタップしたとき以外、音声が再生できない!」という大きな制限があるため、暫定的に、デフォルトでは以下のようなコードを実行しフラグを立てない限り再生されないという仕様になっています。・・・が、いまのところバグがあるらしくiOSで正しく再生されません!目下修正中です!

と、いうことで今回はiPhoneでのサウンド再生について調べてみました。
以下のサイトの情報を参考にしています。

D-lagoon ブログ [enchant.js]iPhoneで音を鳴らすのに一苦労 | D-lagoon ブログ

検証のために以下のようなコードを作成しました。


enchant();
enchant.Sound.enabledInMobileSafari = true;//必須

IMAGE_FILE = "chara1.png";
SOUND_FILE = "gameover.wav";
InitBear = function(no){
var game = enchant.Game.instance;
var bear = new Sprite(32, 32);
bear.image = game.assets[IMAGE_FILE];
bear.x = (game.width - bear.width) * (no/5);
bear.y = (game.height - bear.height) * (no/5);
bear.frame = no * 5;
return bear
};

window.onload = function(){

var game = new Game(320, 320);

game.fps = 15;
game.preload(IMAGE_FILE, SOUND_FILE);
game.onload = function(){

var no = 1;

// 1: 通常、これで再生できる
var bear1 = InitBear(no++);
bear1.addEventListener("touchstart", function(){
game.assets[SOUND_FILE].clone().play();
});
game.rootScene.addChild(bear1);

// 2: 参考サイト(D-lagoon ブログ)での回避策
var bear2 = InitBear(no++);
bear2.addEventListener("touchstart", function(){
game.load(SOUND_FILE, function(){
game.assets[SOUND_FILE].play();
});
});
game.rootScene.addChild(bear2);

// 3: 上からloadを省略してみる
var bear3 = InitBear(no++);
bear3.addEventListener("touchstart", function(){
game.assets[SOUND_FILE].clone().play();
});
game.rootScene.addChild(bear3);

// 4: イベントだけ拾って保持
var bear4 = InitBear(no++);
bear4.flag = false;
bear4.addEventListener("touchstart", function(){
if(this.flag) game.assets[SOUND_FILE].clone().play();
this.flag = false;
});
bear4.addEventListener("enterframe", function(){
this.flag = true;
});
game.rootScene.addChild(bear4);

};
game.start();
};

結果は予想通り、2と3でサウンドの再生を確認できました。
しかし、再生までに数秒かかるので、実用的とは言えませんが、Mobile Safaliではこれが限界なようです。

【後日談】
数日後、ふと同じ検証を行なってみました。
するとなぜか1,2,3,4すべてのパターンでサウンドが再生されました。
ソースは触っていないのに何故???
ですが、やっぱり再生までに数秒かかるので、実用的とは言えません。

以上です。

【重要】FreeStyleVisionシステムメンテナンスのお知らせ

2012 年 9 月 6 日 by admin

この度、下記の日程でシステムのメンテナンスを予定しております。

ご不便をお掛け致しますが、何卒ご理解いただきますようお願いいたします。

期日: 2012年 9月12日(水) 13:00~15:00

影響: メンテナンス中は、本Webページへのアクセスが行えません。

入門bash

2012 年 8 月 28 日 by 山平

Linuxを触っていると、シェルで済ませられそうだなあ、と感じることがよくあります。
でもどう書けばよいかが分からない部分をクリアできないことも多々あります。
ネットで調べていないわけではないのですが、コレという情報にめぐり逢えず、結局わざわざPerlやRubyでコードを書いてしまう自分がいます。

ということで先日、オライリーの「入門bash」を購入しました。
今回はbashのいくつかの機能について、自分の備忘録を兼ねて例をあげながら紹介してみます。

(さらに…)

jQuery Mobileを試した記録

2012 年 7 月 24 日 by 山平

過去に弊社fujiiがjQueryMobileの紹介記事を書いています。

jQuery Mobileを試してみました。

先日やっと試すことができたので、記録しておきます。
PC向けサイトでjQueryに慣れているけど、jQueryMobileは初めて使う、と言う人は以下の点に注意して利用されることをおすすめします。

(さらに…)

当たり判定処理 後編

2012 年 6 月 19 日 by 山平

前編ではキャラクタ同士の当たり判定について考えてみました。
後編ではキャラクタと壁の当たり判定について考えてみます。

当たり判定処理 前編

(さらに…)

当たり判定処理 前編

2012 年 5 月 21 日 by 山平

ゲームに欠かせない処理に当たり判定があります。
当たり判定は大きく分けて「プレイヤーキャラクタと敵キャラクタ(動くもの同士)の当たり判定」と「キャラクタと壁(動くものと動かないもの)の当たり判定」の2通りあります。

当たっているかどうかを調べると言う意味ではどちらも同じなのですが、当たった後の処理に違いがあります。
キャラクタ同士の場合、何と何が当たったかで処理が変わるため、処理(仕様)を決めておく必要があります。
キャラクタと壁の場合、当たった後の処理で座標を修正するのはキャラクタなのであまり難しく考える必要がありません。

前編ではキャラクタ同士の当たり判定について考えてみます。

(さらに…)

「性別」列のインデックス付与について

2012 年 5 月 14 日 by yasukuni

データベースのインデックスを張る際によく「性別」に付けても意味が無いと言われたりしますが、実際の所どうなのでしょうか?(SQL Serverで)試してみました。

で。結論から言うと遅くなります。(というか使用されません) ただし…

(さらに…)

vimのちょっと便利な小技(4)

2012 年 4 月 20 日 by fujii

今回は『選択範囲のテキストを削除』をご紹介しようと思います。
ビジュアルモード中に”d”を押すことで選択範囲のテキストを削除する事ができます。

以下の様なテキストがあったとします。
下記の文章から3行ほど削除したい場合、vi使いの方なら、該当行にカーソルを移動し、「3dd」と入力します。

vim_tips4_1

(さらに…)

enchant.jsのサンプルゲームを読む

2012 年 4 月 4 日 by 山平

数回に渡ってenchant.jsとゲームについて、周辺の話を進めてきましたので、そろそろ本題に入ります。
enchant.jsにサンプルとして同梱されているアクションゲームのソースを眺めながら、少し手を入れてみます。

(さらに…)

ゲームで使う数字の遊び方

2012 年 3 月 19 日 by 山平

ちょっと乱暴な言い方ですが、業務アプリと違ってゲームが保持する情報の多くがあまり本質的ではないものだったりします。
例えばアニメーション制御やエフェクトのためのオブジェクトがそれにあたります。
要はズバババ~ンって感じにキャラクターなどを表示するために色んな情報を扱う必要があり、結構面倒くさかったりします。

今回はそういった細々とした情報を扱う際の数字遊びを紹介します。
enchant.jsでゲームを作ることを想定しているのでjavascriptで書きますが、基本的には言語を問いません。

(さらに…)