Hatena::ブログ(Diary)

Android でいろいろやるよ!

2012-08-13

QuickTiGame2d 1.3、リリースしました!

Titanium Mobile で動作するゲームエンジンモジュール、QuickTiGame2d 1.3 を公開しました。今回はパフォーマンス向上やメモリリークの修正、TiBlob からのテクスチャ読み込みのサポートなど、より安定&便利になってます!

http://code.google.com/p/quicktigame2d/

Android でもビューの背景を透明にできるように!


今まではボタンなど、Titanium のビューコンポーネントをゲーム画面の「上」に配置して貼り付けることができていたのですが、ゲーム画面の背景を透明にしてゲーム画面の「下」にも配置することができるようになりました。例えば、テーブルビューの前面に浮かぶゲーム画面とか、画面の一部分だけをゲーム画面として使いたい、というようなことが Android でも出来るようになりました!

TiBlob からのテクスチャ読み込みのサポート


TiBlob というのは Titanium でバイナリを扱う時に使われるオブジェクトで、例えば HTTP リクエストでネットから画像ファイルをダウンロードしてきたときに使ったりします。今回のアップデートで、この TiBlob からテクスチャを読み込むことができるようになりました!例えばネットから画像ファイルをダウンロードしてきてそれをファイルシステムに保存せずにテクスチャとして使うというようなことができるようになります。

例えばこんな感じ。

//
// Example: Download appc logo image from the Internet
//
var xhr = Titanium.Network.createHTTPClient({
  onload : function() {
    //
    // Create new sprite and load texture data from response data
    //
    appc_logo = quicktigame2d.createSprite();
    appc_logo.tag = "APPC_LOGO";

    // Set texture data by using data property
    appc_logo.data = this.responseData;
    
    scene.add(appc_logo);
  },
  timeout : 10000
});

xhr.open('GET', 'http://static.appcelerator.com/images/header/appc_logo.png');
xhr.send(); 

http://code.google.com/p/quicktigame2d/source/browse/QuickTiGame2dExample/Resources/tiblob_sprite.js

パフォーマンス向上やメモリリークの修正


その他、今回のアップデートではパフォーマンスの向上やメモリリークの修正など、安定化向上のための重要な修正がありますので、今までのバージョンを使っている方はアップデートして頂きたいと思います!!

※その他の修正内容はこちらで確認できます。

http://code.google.com/p/quicktigame2d/

今後について


オフィシャル API に匹敵するクオリティを目指すとか鼻息荒く宣言した手前ですが、こちらの方はあんまり進んでいません...今 QuickTiGame2d をより発展させるべく色々な方面に動いているのですが、ちょっと今ここで発表できるようなネタがないのです。。。真面目にやっているので楽しみにしている方はもう少し!待ってください!!(笑

2012-07-04

QuickTiGame2d 1.2: マルチタッチに対応しました!

Titanium Mobile で動作するゲームエンジンモジュール、QuickTiGame2d 1.2 を公開しました。今回はマルチタッチのサポート!

http://code.google.com/p/quicktigame2d/

Android でもマルチタッチが使えるようになりました!


今まで、Titanium Mobile でマルチタッチを扱おうと思ったら TiMultiTouch モジュールを使うしかありませんでした。TiMultiTouch モジュールは元々 @masuidrive さんが 2010 年に作った拡張モジュールですが、なんといまだに Titanium 本体ではマルチタッチが扱えないのです!元々 Titanium が得意としていた UI 分野にはマルチタッチが必要ないケースが多い(ジェスチャーで十分)だからだと思うのですが、ゲームエンジンにはマルチタッチサポートは必須だと思うので、自前で実装しました。

TiMultiTouch モジュールは非常に扱いやすいモジュールなのですが iOS 向けしか存在しなかったので、今回マルチタッチ機能を QuickTiGame2d 自体でサポートすることにしました。使い方は TiMultiTouch モジュールと非常に似ているので、すぐに分かると思います。

game.addEventListener('touchstart', function(e) {
  Ti.API.info(e.type + ": " + JSON.stringify(e.points));
  for (var pointName in e.points) {
    var x = e.points[pointName].x;
    var y = e.points[pointName].y;
  }
});

使っていればすぐに分かると思いますが、Android と iOS とではマルチタッチイベントが起きるタイミングが微妙に違います。新しく追加したマルチタッチのサンプルでは、イベントの種類によってスプライトの色を変えているので、Android と iOS の挙動の違いを色々試してみてください。

あと、Android についてはマルチタッチを有効にするとジェスチャーイベントが全て使えなくなるように作っています。これは、Titanium 本体側でジェスチャーイベントを処理する部分がマルチタッチイベントを邪魔してしまっていたためです。ちょうど先週に発表された Titanium Mobile 2.1.0.GA で追加されたコードがマルチタッチの邪魔をしているのですが(笑)、ちょっと残念ですが仕方がないですね。

スプライトの親子関係がパワーアップ!


スプライトには親子関係を設定できて、Transform 時に同期して動くようにできるのですが、今回のバージョンアップでどの値を同期させるか細かく設定できるようにしました。例えば、「位置は同期させたいけど回転は同期させたくない」とか、「親との距離を保ったまま移動し、回転軸は親の中心に設定したい」というような細かなニーズに対応できるようになりました。

複雑な Transform を指定した親子関係のサンプルがあるので、参考にしてください。

そのほか、細々としたパフォーマンスアップや不具合修正もいろいろあるので、以前のバージョンを使っている人はアップデートしてください!

http://code.google.com/p/quicktigame2d/

ソースを公開しています


QuickTiGame2d はバージョン 1.0 からオープンソースになりました。Titanium Mobile 上でゲームを作ろうとされている方はもちろん、カスタムモジュールを作ろうと思っている方も、是非参考にしてください。また、追加機能とか、バグとか発見したら是非パッチを送ってください!

https://github.com/infosia/quicktigame2dmodule

ということで、是非使ってみてください!

2012-06-20

色々、進めてます

ごぶさたしてます。

今、何にも発表できるようなものがないのですが、Titanium Mobile でゲーム開発をするための新しい API について、インディーゲーム開発だけではなくプロの皆さんにとっても使いやすい API を作って、本当に皆さんに喜んでもらえるものを作るために、色々と動いています。

実は、先週になりますが、サンフランシスコとサンノゼという所に行ってきました。ちょうど Apple の WWDC というイベントがあったのですが、それとは別件です。

f:id:infosia:20120620172042j:image:w360

↑入場はできなかったのですが一応覗いてきましたw

このゲームエンジンをさらに発展させるために、色々な人と話をしています。もう少し時間がかかると思いますが、何もやってないわけではないのでもう少々お待ちくださいっ...!!

2012-05-17

ご意見募集:作り直すとしたら、どんなのがいい?

ここしばらく色々と考えていたのですが、考えがまとまってきました。

実は、QuickTiGame2d を作り直したいと思っています!

作り直すというのは、現在の QuickTiGame2d とは互換性のない API にするということです。たぶんかなり似たものになるとは思いますけど。

どうして作り直したいかというと、次の展開を考えてのことです。

  • 現在の QuickTiGame2d は試行錯誤の塊で、ソースが結構汚いことになっている
  • API に細かな所で不満があり、それを解消しようとすると互換性を失うことになる
  • そして、公式API になってもいいぐらいのクオリティを目指したい(願望です)
  • ついでにTiGame2d という名前に変更して、"ti.game2d"という、まるで公式のようなパッケージ名を勝手に名乗りたい

というようなことを考えてます。

現在のアーリーアダプターの方々には非常に申し訳ないですが、私の twitter やメールなどに寄せられる反響、Appcelerator のプロフェッショナル達からの反響を考えると、今のままではちょっと足りないかもしれないと思っています。

で、作り直したいのですが、そこで皆さんに意見を募集したい!
今なら色々願いが叶うかも!!

ということでご意見ご要望のある方はこちらに書いて頂けるとうれしいです!

http://code.google.com/p/quicktigame2d/issues/detail?id=30

2012-05-14

QuickTiGame2d 1.1: テキスト表示に対応&バグフィックス

Titanium Mobile で動作するゲームエンジンモジュール、QuickTiGame2d 1.1 を公開しました。今回はテキスト表示のサポートと、バグフィックスです!

http://code.google.com/p/quicktigame2d/

モジュール単体でテキスト表示ができるように!


今回のバージョンから、モジュール単体でテキスト表示ができるようになり、テキストもスプライトと同じように扱えるようになりました!

var quicktigame2d = require('com.googlecode.quicktigame2d');
var textsprite = quicktigame2d.createTextSprite({text:'Lorem ipsum dolor sit amet.', fontSize:24});
textsprite.text = "Lorem ipsum Vestibulum rutrum";

ご存じの通り Titanium Mobile には Ti.UI.Label というコンポーネントがあり、今までも QuickTiGame2d でもこれを使ってテキストを表示することができました。しかし Ti.UI コンポーネント群は QuickTiGame2d のスプライトとは違うので QuickTiGame2d のアニメーション効果(Transform)を適用することができませんでした。

今回追加した TextSprite はテキストをスプライトと同じように扱えるようにするもので、これを使ってテキストをアニメーションさせたり、他のスプライトと同期させたりすることができるようになります。

スクリーンサイズの不具合を修正 (iOS)


なんと今まで気がつかなかったのですが、iOS 4 かつ非 retina デバイスの場合に、デフォルトのスクリーンサイズが間違って設定されるという大きな不具合がありました・・・iOS でスクリーンサイズを直指定せずにデフォルトのまま使っている人には影響があるので、注意してください。

var quicktigame2d = require('com.googlecode.quicktigame2d');
var game = quicktigame2d.createGameView();

game.addEventListener('onload', function(e) {
    Ti.API.info(game.screen.width + "x" + game.screen.height);
});

Deviceversion 1.0version 1.1
iPhone, non-retina640x960320x480
iPhone, retina640x960640x960
iPad 2 and older1024×7681024×768
iPad 3rd1024×7682048×1536

そのほか、細々とした不具合修正もいろいろあるので、バージョン 1.0 以前を使っている人はアップデートしてください!

http://code.google.com/p/quicktigame2d/

ソースを公開しています


QuickTiGame2d はバージョン 1.0 からオープンソースになりました。Titanium Mobile 上でゲームを作ろうとされている方はもちろん、カスタムモジュールを作ろうと思っている方も、是非参考にしてください。また、追加機能とか、バグとか発見したら是非パッチを送ってください!

https://github.com/infosia/quicktigame2dmodule

ということで、是非使ってみてください!