[cocos2d-html] 外部ファイルを取得してSpriteを生成する

前回は、Pepperでデータベースを利用するアプリケーションを作成しました。
今回は、久しぶりにcocos2d-htmlについての内容となります。

アプリを作成していると、SNSのアイコンやウェブサービスのバナー等、外部から取得した画像を使用してSpriteを生成する必要があるケースも出てくると思います。
cocos2d-htmlでは、XMLHttpRequestというJavaScript標準のAPIで外部画像のバイナリデータを取得し、取得したバイナリデータを使用することで、外部画像のSprite化が実現できます。

まずは、http通信処理です。
XMLHttpRequestインスタンスを生成し、取得要求を行います。

//XMLHttpRequestインスタンス生成
var xhr = new XMLHttpRequest();
xhr.open('GET', "取得する画像のURL", true);
//タイプを arraybufferに設定
xhr.responseType = "arraybuffer";

xhr.onload = function( event ) 
{
    //読み込み完了時の処理
};
xhr.send();

        

通信後、取得したデータをバイナリデータに変換します。

//通信結果データ取得
var data = new Uint8Array( event.target.response );
var binaryData = "";
for (var i = 0, len = data.byteLength; i < len; i++) 
{
    //バイナリデータへ変換
    binaryData += String.fromCharCode(data&#91;i&#93;);
}

&#91;/javascript&#93;
<div>
        <br>
</div>

取得したバイナリデータを使用してImageオブジェクトを生成します。
[javascript]
//Imageオブジェクト生成
var image = new Image();
image.src = "data:image/png;base64," + window.btoa(binaryData);

        

Imageオブジェクト生成後、画像を読み込みSpriteを生成します。
ここで読み込んだ画像がTextureとして設定されることになります。

//画像読み込み
image.onload = function() 
{
    //読み込んだ画像からSpriteを生成
    var sprite = cc.Sprite.create( image );
    this.addChild( sprite );
};

        

以上で、外部画像のSprite化は終了となります。
一般的にcocos2d-htmlアプリは、サーバー上に配置して動作させるため実用頻度は多くありませんが
端末に内包して使用するような場合でも、頻繁に更新がかかる画像のみ外部から取得することが可能なため、アプリ作成時の自由度が増します。
簡単に実装することが出来るため、是非皆さんも試してみてください。

        

以下は、画像取得部を関数化した簡単なサンプルソースです。


function loadImage(imgUrl, cb)
{
var xhr = new XMLHttpRequest();
xhr.open(‘GET’, imgUrl, true);
xhr.responseType = “arraybuffer”;

xhr.onload = function( event )
{
//通信結果データ取得
    var data = new Uint8Array( event.target.response);
    var binaryData = “”;
    for (var i = 0, len = data.byteLength; i < len; i++) { //バイナリデータへ変換 binaryData += String.fromCharCode(data[i]);      } //Imageオブジェクト生成 var image = new Image(); image.src = "data:image/png;base64," + window.btoa(binaryData); //画像読み込み image.onload = function() { //取得要求時に受け取ったコールバック関数でImageを返却 cb( image ); }; }; xhr.send(); } var MyLayer = cc.Layer.extend( { init:function () { this._super(); var size = cc.director.getWinSize(); var self = this; loadImage("取得する画像URL", function( img ) { //Sprite生成 var sprite = cc.Sprite.create( img ); sprite.setPosition( size.width / 2, size.height / 2 ); self.addChild( sprite ); }); } }); var MyScene = cc.Scene.extend( { onEnter:function () { this._super(); var layer = new MyLayer(); this.addChild(layer); layer.init(); } }); [/javascript]


弊社では全国各地の請負い(ご自宅)で作業協力頂ける、フリーランスエンジニアの方を常時探しております。
ご興味ある方は、お気軽にお問い合わせ下さい。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*