enchantMOON上のenchant.js上でプログラミングしてみた。

前回のエントリを書いた後も、enchantMOONの話題をチェックしていたのです。
まあなんというか情報が増えないですね。うまいこと検証する手段がないというか、客観的にデータを取れないというか、そんな状況で「取りこぼしがある」とか「時々止まる」とか「電源投入に失敗する」とか報告が上がってくる感じ。

いずれ、調整で直るものであれば、開発陣はどんどんファームウェアアップデートしてほしいものです。

Ver.2.3.1にアップデートした。

先日の月曜日にまたアップデートがあって、入力の取りこぼしはずいぶん減ったようです。考える場面もけっこう増えましたが。
この辺、さらなる改良を望みたいところです。

消しゴム操作とシール貼りのバッティング

特に、消しゴム操作の時に、パームリジェクションがうまく行かない場合があるなあ、と思っていたのですが、おそらくデジタイザペンの操作性に起因するものだなあと思いました。

文字を書いているときに消しゴム操作が起きてしまうのがいやなので、そういう時はペンのボタン部分に指がかからないようにペンを持つんですね。そうしておいて、消したいところが出てきたら、手のひらを少し曲げて、ペンを浮かせて、ボタンが触れるようにペンを持ち直す形になる。

このとき、タッチパネルがシール起動のために動き出すことが多いんですね。ペンが見えなくなったことでパームリジェクション処理が要らなくなったと判断するのではないでしょうか。でも、それは困る。

例えば、画面右側ではシール起動の操作が無効になるとか出来ないのかなあ。それやると左利きの人が困るから難しいのかな?

で、本題。

前回のエントリでは、ブラウザを立ち上げて、enchant.jsを使ったJavascript入りページを表示することでenchant.jsの動作を確認していました。でも、これだと、enchantMOONの動作確認としてはおそらく微妙なんですね。

なぜなら、Chromeが動いているレイヤーとMOONBlockが動いているレイヤーは別だから。enchantMOON上でのMOONBlockをそこそこの速度で動かすために、enchant.js専用のVMが動いているのがenchantMOONなんですね。

そうすると、どうにかしてenchantMOON上でプログラムを作って動かさないと速度の確認は出来ないというか。

enchantMOON上のプログラミングについては少しずつ情報が出てきていますが、微妙にenchantMOON上でのプログラミングは面倒くさいというか、Hello World以上のことがどうすればできるのかわからないというか。ただ、enchant.jsを動かすためのVM、と言うことですから、もしかしたらそのままコピペすれば動くんじゃないかと。

手順

まず、enchantMOON上で適当なシールを作ります。で、enchantMOONをPC上にマウントします。問題は、名前だけではどれが作ったシールか分からないこと。タイムスタンプ等で類推します。
オブジェクトがシールになると、libとかpicとかいうenchant.js用のいろいろがオブジェクトのフォルダにコピーされるので、シールオブジェクトが1つしかない場合は、そこからいじりたいフォルダがどれか判ったりしますね。

で、当該のフォルダにある「hack.js」をいじる。これがmoonBlockでの動作の本体となってますので、前回も動作確認に使ったボールを動かすサンプル、をsticker.ontap = function() {のところにコピペ。

それだけで動くようになりました。開発環境がMacだとときどきこれでも失敗するらしいのですが、まあこちとらPCで作業してますから、はい。

実行

実際に実行してみると、chrome上で動かすより確かに速い。ボール50個くらいが限界だったものが、200個くらいは表示できるようになっている。2倍から4倍くらいのスピードで動きますね。

ただまあ、2倍から4倍ったって、そこで限界ですからねえ。やはり限界は近いと言えば近いような気もします。

困ったこと。

今回使ったサンプルは、もともとブラウザ上で動かす前提で作ったものなので、外側から強制終了する以外の終了手段を持たないんですね。そうするとどうなるか。

ページ移動もサムネイル画面への移行もキャンセル動作も効かなくなります。タッチパネルは動いているのでさわればパーティクルがでますが、パーティクルがでるだけ。

ということで、このテストを終了させたくなる度に電源オフ、と言うことになりました。どうも、window.onClick()イベントも拾わないみたいだし、今後ちょっと何か終了させるための手段を探るべきですね。