Monacaバックエンド

ちょっとしたゲームでもオンラインランキングあったほうが燃えますよね~。

ということでちゃちゃっとランキングの実現性を調査。
Monaca+html+enchant.jsな環境だとフリーで使えそうなランキングサービスはなさそうだったので、自作で作らないといけないのかな~とか思っていたところ、MonacaバックエンドというMonaca直々のサービスを発見しました。
http://docs.monaca.mobi/ja/learning/backend/

Monacaのサイトは結構見てましたけどいままで全然気付かなかった・・・でも7/16にリリースって書いてあるから、つい先日リリースされたんですかね。
ちょっとゲームのランキングに使うのは想定されてない感じもしますけど、これはなんだか良さそう!
近いうちにテストしてみます。

しかしこれも無料で使っていいんですかね。
なんとすばらしいMonaca環境・・・!

初代Xperia(SO-01B)をAndroid2.3.3にバージョンアップしてみる

monaca+html5+enchant.js+nendなゲームを作っていますが、初代Xperia(SO-01B)で確認してみたところ、なんか表示が変なことに・・・
これはいかんということでMonaca Debuggerを入れてみようとしたところ、Android2.1は未対応・・・それはそうですよね。
どうせ使ってないし、データ消えても問題ないのでいい機会だしAndroid2.3.3にバージョンアップしてみました。
下記サイトの手順通りにやったところ、すんなり成功しましたーよかったよかった。
https://sites.google.com/site/gitoshin/android/xperia-gb

enchant.ui.MutableText を拡張してみる

enchant.jsの enchant.ui.MutableText を拡張してみました。
・フォントテクスチャをコンストラクタで指定できるように。(コンストラクタで座標指定は削除)
・スケール(scaleX scaleY)に対応。
参考までにペタリ。

var MyMutableText = enchant.Class.create(enchant.Sprite, {
	/*!
		コンストラクタ
		@param	fontTexture			テクスチャ
		@param	fontTextureUnitSize	テクスチャの1文字のサイズ
	*/
    initialize: function(fontTexture, fontTextureUnitSize) {
        enchant.Sprite.call(this, 0, 0);
        this.fontSize		= fontTextureUnitSize ? fontTextureUnitSize : 16;		// テクスチャの1文字サイズ
        this.widthItemNum	= 16;	// テクスチャの1列に何文字格納されてるか
        this.x = 0;
        this.y = 0;
        this.m_fontTexture	= fontTexture;
        this._imageAge = Number.MAX_VALUE;
        this.text = '';
        if (arguments[2]) {
            this.row = Math.floor(arguments[2] / this.fontSize);
        }
    },
    /**
     * ラベルの内容を書き換える関数
     * @param txt
     */
    setText: function(txt) {
        var i, x, y, wNum, charCode, charPos;
        var	fontDstWidth	= this.fontSize * this.scaleX;
        var	fontDstHeight	= this.fontSize * this.scaleY;
        this._text = txt;
        var newWidth;
        if (!this.returnLength) {
            this.width = Math.min(fontDstWidth * this._text.length, enchant.Game.instance.width);
        } else {
            this.width = Math.min(this.returnLength * fontDstWidth, enchant.Game.instance.width);
        }
        this.height = fontDstHeight * (Math.ceil(this._text.length / this.row) || 1);
        // if image is to small or was to big for a long time create new image
        if(!this.image || this.width > this.image.width || this.height > this.image.height || this._imageAge > 300) {
            this.image = new enchant.Surface(this.width, this.height);
            this._imageAge = 0;
        } else if(this.width < this.image.width || this.height < this.image.height) {
            this._imageAge++;
        } else {
            this._imageAge = 0;
        }
        this.image.context.clearRect(0, 0, this.width, this.height);
        for (i = 0; i < txt.length; i++) {
            charCode = txt.charCodeAt(i);
            if (charCode >= 32 && charCode <= 127) {
                charPos = charCode - 32;
            } else {
                charPos = 0;
            }
            x = charPos % this.widthItemNum;
            y = (charPos / this.widthItemNum) | 0;
            this.image.draw(	this.m_fontTexture,						// テクスチャ
                				x * this.fontSize, y * this.fontSize,	// 入力xy
                				this.fontSize, this.fontSize,			// 入力wh
				                (i % this.row) * fontDstWidth, ((i / this.row) | 0) * fontDstHeight,	// 出力xy
				                fontDstWidth, fontDstHeight	);			// 出力wh
        }
    },
    /**
     * ラベルの内容
     * @type {String}
     */
    text: {
        get: function() {
            return this._text;
        },
        set: function(txt) {
            this.setText(txt);
        }
    },
    /**
     * @type {Number}
     */
    row: {
        get: function() {
            return this.returnLength || this.width / this.fontSize;
        },
        set: function(row) {
            this.returnLength = row;
            this.text = this.text;
        }
    }
});

Xperia Z SO-02E 上でenchant.jsのタッチがうまくとれない件

っsうーん、Xperia Z SO-02E 上で enchant.js v0.71 のタッチがうまくとれない症状で悩み中。
1回しかタッチしていないのに何故か touchstart が2回反応してしまいます。
他の端末だと大丈夫だったので、端末固有の問題だとは思うのですが、原因不明。

・・・というかそれ以前にmonaca+enchant.jsの環境で、Monaca Debbuger でXperia Z上でプレビューすると基本的になんか動作がおかしいので、まずそれから原因探らないとダメなんですけどね汗

ただ、ビルドしてインストールするとちゃんと動作するので、Monaca Debuggerの不具合なのかもと思い中…

■追記■
enchant.jsのGitHubでまさに同じ問題が報告されていました。
https://github.com/wise9/enchant.js/issues/200
既に解決しているようなので、修正されているenchant.jsファイルをゲットしてきました。
ただ、修正された箇所を見るとわかりますが、enchant.jsを差し替えるだけではダメで、

enchant.ENV.MOUSE_ENABLED	= false;

をCore生成の前に呼ぶ必要があります。
マウスとタッチのイベントがかぶって通知されることがあるとか。
・・・やったー直った!

アプリを作って3000円!Monaca×nendアプリ開発キャンペーン

アプリを作って3000円!Monaca×nendアプリ開発キャンペーン | http://blog.asial.co.jp/1182

ちょうど何日か前、Monacaという、コーディングから最終ビルドまで全てブラウザ上で完結できるすばらしい無料サービスを発見して、これはいい!ということで、ちょっとしたAndroidゲームを制作しているところでした。

そんなところに、なんと良いタイミングでこのキャンペーン・・・!

Monacaの開発、運営を手がけているアシアルさんのブログでMonaca環境でnendを表示するエントリがあったので、広告もnendに決めたところでした。

自分はhtmlやJavascriptの知識はあまりありませんが、まあJavascriptならなんとかなるだろうとenchant.jsというお手軽なゲーム制作ライブラリを使用することにしました。

そんなこんなで、環境は monaca + html5 + enchant.js + nend で決定。

htmlやJavascriptに苦労しつつも現状なんとかゲームの大まかなシーンの流れとnendで広告表示のレイアウトまでうまくいきました。
htmlが理解しきれていないのでhtml+enchant.js+nendの環境で、広告とゲーム画面両方をきれいに表示させるのになかなか苦労しました。

この辺りは、自分の理解が深まった頃にでも、まとめて記事にしたいなと思っています。

Android開発環境の構築

2013/02/25時点の、ADTバンドル版を使用しないで、eclipse、Android SDK をインストールする手順をwikiにまとめました。

Android開発環境の構築 | ぎじゅつめも

ADTバンドル版はインストール等すごく簡単で楽チンだったのですが、なんだか挙動がアヤシイ?感じがして、やっぱり以前使用していた単体版のeclipseに戻すことにしました。
自分の環境だとADTバンドル版より安定して使用できます^^;

JDK のバージョンは 『6u41』
AndroidSDK のバージョンは 『r21.1』
eclipse は 『Eclipse 4.2 Juno Pleiades All in One』 の Java の Full Edition
…を使用しています。