2011年4月9日土曜日
Androidマーケットへの登録
スムースに動作するコンパスアプリが欲しかったので、自分で作ってマーケットに登録してみました。
GLSurfaceView(openGL)を用いてスムースな動作を目指してます。トレードオフとして、起動が少し遅いですが…
もし興味のある方はこちらからどうぞ。
※あくまで個人製作ですので、要望やバグ報告はマーケットに登録してあるメールアドレスからお願いします
登録の際、少しはまったところを挙げておくと…
■マーケットに表示されるアプリアイコンがデフォルトのまま
これは、リソースのdrawable-hdpiにのみアプリアイコンを入れていて、他のdrawable-mdpiとdrawable-ldpiにはデフォルトアイコンが入っていた事が原因でした。
■IS03で画像(テクスチャ)が表示されない
drawable関連でもう一つ。
IS03は特殊な解像度なので、drawable-320dpiというリソースフォルダを作成し、その中に対応する画像を入れる必要があります。SDK2.3からはdrawable-xdpiというリソースフォルダが使用できるようです。
■全年齢対象に出来ない
はまったところではありませんが、現在地を取得するアプリは全年齢対象アプリに出来ないようです。
今回、コンパスの真北を取得するために現在地の取得を行っているので、それが原因でした。
さて、Googleにデベロッパーとして登録するとデベロッパーコンソールというページが使えるようになるのですが、これが凄く便利です。
■統計情報の表示
さすがGoogleといった感じで、インストールされたプラットフォーム、端末、有効なインストール数、国等の情報をグラフ表示してくれます。
■詳細なバグレポート
一番驚いたのはここ。
アプリごとのエラーレポートを見る事が出来、その中ではエラーの発生時間、種類はもちろんのこと、なんとどのクラスの何行目でエラーが起こっているかも見る事が出来ます。開発時にLogCatでログ見ているとエラーが起きた時に内容が表示されますが、その内容がそのままデベロッパーコンソールで見る事が出来るイメージです。
開発者には嬉しい仕様ですね。
これだけ充実していると、また何か作りたくなってきてしまいますね。
EclipseにAndroid SDKのサンプルを読み込んで、警告を消す
Android SDKにはGoogle製のサンプルがいくつもついてきます。
Androidアプリを開発する時にはEclipseを使う事が多いと思いますが、Eclipseにそのサンプルを読み込む方法と、そのままでは警告が出てしまいますので、それらを消す方法をご紹介します。
まず、新規プロジェクトを作成し、Androidプロジェクトを選択します。
ここで、普通であればパッケージやアプリ名等を入力して新規プロジェクトを作成しますが、「既存サンプルからプロジェクトを作成」から、インポートしたいサンプルを選択します。ただし、この項目はビルドターゲットを先に指定しておかないとアクティブにならないので、先に指定しておきます。
あとは、完了を押すとEclipseにサンプルプロジェクトがインポートされます。
さて、そのままでも問題なくビルドして端末にインストールできるのですが、上のキャプチャのように警告が大量に出てきます。
Eclipseはデフォルトではプロジェクトを横断して警告を表示してくるので、他のプロジェクトを進めているときでもこの警告が表示され、自分のプロジェクトでの警告やエラーがそれらに埋もれてしまいます。
ここでは、下記2つの対策を紹介します。
■選択プロジェクト上のエラー/警告のみ表示する
項目名通り、選択しているプロジェクトのエラー/警告のみが表示されます。
警告が表示される「問題」タブの右上、▼マークをクリックし、上の画像のように「表示」->「プロジェクト上のエラー/警告」を選択します。
■プロジェクト単位でエラー/警告を無視する
こちらの方法では、サンプルプロジェクトのエラー/警告のみを無効にします。
読み込んだプロジェクトのプロパティを開き、「Javaコンパイラ」->「エラー/警告」を選択します。
「プロジェクト固有の設定を可能にする」にチェックを入れ、必要な項目を「無視」に変えていき、OKを押すとプロジェクトのビルド後に変更が適用されます。
Google製のコードですし、コピペはあっても基本的にはソースを直接変更する事は無いと思いますので、全部無視で良いと思います。
サンプルの中では、ApiDemoが便利ですね。簡単にですが、何ができるか知る事が出来ます。
サンプルプロジェクトも結構多いので全部を網羅するのは大変そうですが、ちょくちょくのぞいてみると面白いかもしれませんね。
Androidアプリを開発する時にはEclipseを使う事が多いと思いますが、Eclipseにそのサンプルを読み込む方法と、そのままでは警告が出てしまいますので、それらを消す方法をご紹介します。
まず、新規プロジェクトを作成し、Androidプロジェクトを選択します。
ここで、普通であればパッケージやアプリ名等を入力して新規プロジェクトを作成しますが、「既存サンプルからプロジェクトを作成」から、インポートしたいサンプルを選択します。ただし、この項目はビルドターゲットを先に指定しておかないとアクティブにならないので、先に指定しておきます。
あとは、完了を押すとEclipseにサンプルプロジェクトがインポートされます。
さて、そのままでも問題なくビルドして端末にインストールできるのですが、上のキャプチャのように警告が大量に出てきます。
Eclipseはデフォルトではプロジェクトを横断して警告を表示してくるので、他のプロジェクトを進めているときでもこの警告が表示され、自分のプロジェクトでの警告やエラーがそれらに埋もれてしまいます。
ここでは、下記2つの対策を紹介します。
■選択プロジェクト上のエラー/警告のみ表示する
項目名通り、選択しているプロジェクトのエラー/警告のみが表示されます。
警告が表示される「問題」タブの右上、▼マークをクリックし、上の画像のように「表示」->「プロジェクト上のエラー/警告」を選択します。
■プロジェクト単位でエラー/警告を無視する
こちらの方法では、サンプルプロジェクトのエラー/警告のみを無効にします。
読み込んだプロジェクトのプロパティを開き、「Javaコンパイラ」->「エラー/警告」を選択します。
「プロジェクト固有の設定を可能にする」にチェックを入れ、必要な項目を「無視」に変えていき、OKを押すとプロジェクトのビルド後に変更が適用されます。
Google製のコードですし、コピペはあっても基本的にはソースを直接変更する事は無いと思いますので、全部無視で良いと思います。
サンプルの中では、ApiDemoが便利ですね。簡単にですが、何ができるか知る事が出来ます。
サンプルプロジェクトも結構多いので全部を網羅するのは大変そうですが、ちょくちょくのぞいてみると面白いかもしれませんね。
Androidでセンサーから方位を取得する
最近ネイティブAndroidプログラムに手を出しています。
FlashのAS3を触っていると、AndroidのJavaはあまり敷居が高くなく感じますね。whileの挙動とか、イベントリスナの登録あたりはちょっと違いますけど。
イベントリスナの登録は、AS3でいうNetStraemのonMetaDataハンドラの扱いに似ていますね。ただ、Javaの方はインターフェイスで強制実装させるあたり、厳格になっています。
さて、本題ですが、Androidでコンパスを作成する時の話です。
コンパスを作成するにあたってセンサの値を取ってくる必要があるのですが、他のセンサーと同じようにSensorManagerから読み出す事で使用する事が可能です。
Sensor.TYPE_ORIENTATIONが方位センサのタイプ定数になります。
ただ、このタイプは現在非推奨となっており、Android2.2からはSensorManager.getOrientation()が推奨されます。使い方としては、上記の方法で加速度と地磁気センサの値を取得し、それらの値から然るべき方位を計算する、という形になります。
ただ、このまま実装すると、リファレンスにもある通り特定の状態でしか正しい方位を取得できません。
画面が自分から見て手前側に傾いている時は正しく方位が見えますが、向こう側に傾いている時は方位が反転してしまいます。これを調整するにはremapCoordinateSystemの第二、第三引数を調整すると良いのですが、例えば横向きにする時には
とすれば良いようです。
これを、端末の向きによらず正しい方位を取得するようにしたかったので、色々試してみた結果
remapCoordinateSystem(inR, AXIS_X, AXIS_Y, outR);
を使用すると端末の向きによらず正しい方位を取得する事が出来ました。
ただし、iPhoneでもそうですが、寝転がってコンパスを見ると正しい方位が表示されません。まぁ、そんなことをする人はあまりいないと思いますが…
FlashのAS3を触っていると、AndroidのJavaはあまり敷居が高くなく感じますね。whileの挙動とか、イベントリスナの登録あたりはちょっと違いますけど。
イベントリスナの登録は、AS3でいうNetStraemのonMetaDataハンドラの扱いに似ていますね。ただ、Javaの方はインターフェイスで強制実装させるあたり、厳格になっています。
さて、本題ですが、Androidでコンパスを作成する時の話です。
コンパスを作成するにあたってセンサの値を取ってくる必要があるのですが、他のセンサーと同じようにSensorManagerから読み出す事で使用する事が可能です。
public class Compass extends Activity implements SensorEventListener{
private SensorManager sm;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sm=(SensorManager)getSystemService(SENSOR_SERVICE);
}
@Override
protected void onResume() {
super.onResume();
//全センサを取得
//List<Sensor> sensors = sm.getSensorList(Sensor.TYPE_ALL);
//加速度センサ
//List<Sensor> sensors = sm.getSensorList(Sensor.TYPE_ACCELEROMETER);
//磁気センサ
//List<Sensor> sensors = sm.getSensorList(Sensor.TYPE_MAGNETIC_FIELD);
//方位センサ
List<Sensor> sensors = sm.getSensorList(Sensor.TYPE_ORIENTATION);
for(Sensor sensor : sensors){
//イベントを登録
sm.registerListener(this, sensor, SensorManager.SENSOR_DELAY_GAME);
}
}
…
}
Sensor.TYPE_ORIENTATIONが方位センサのタイプ定数になります。
ただ、このタイプは現在非推奨となっており、Android2.2からはSensorManager.getOrientation()が推奨されます。使い方としては、上記の方法で加速度と地磁気センサの値を取得し、それらの値から然るべき方位を計算する、という形になります。
//SensorEventListenerにより実装が要求されるメソッド
public void onSensorChanged(SensorEvent event) {
float[] amv=new float[3];
float[] mfv=new float[3];
float[] orv=new float[3];
switch(event.sensor.getType()){
case Sensor.TYPE_ACCELEROMETER:
amv=event.values.clone();
break;
case Sensor.TYPE_MAGNETIC_FIELD:
mfv=event.values.clone();
break;
}
float[] in_r=new float[16];
float[] out_r=new float[16];
if(amv!=null && mfv!=null){
SensorManager.getRotationMatrix(in_r, null, amv, mfv);
SensorManager.remapCoordinateSystem(in_r, SensorManager.AXIS_X, SensorManager.AXIS_Z, out_r);
SensorManager.getOrientation(out_r, orv);
Log.d("message", String.valueOf(orv[0]));
Log.d("message", String.valueOf(orv[1]));
Log.d("message", String.valueOf(orv[2]));
}
}
ただ、このまま実装すると、リファレンスにもある通り特定の状態でしか正しい方位を取得できません。
Using the camera (Y axis along the camera's axis) for an augmented reality application where the rotation angles are needed:
remapCoordinateSystem(inR, AXIS_X, AXIS_Z, outR);
画面が自分から見て手前側に傾いている時は正しく方位が見えますが、向こう側に傾いている時は方位が反転してしまいます。これを調整するにはremapCoordinateSystemの第二、第三引数を調整すると良いのですが、例えば横向きにする時には
Using the device as a mechanical compass when rotation is Surface.ROTATION_90:
remapCoordinateSystem(inR, AXIS_Y, AXIS_MINUS_X, outR);
とすれば良いようです。
これを、端末の向きによらず正しい方位を取得するようにしたかったので、色々試してみた結果
remapCoordinateSystem(inR, AXIS_X, AXIS_Y, outR);
を使用すると端末の向きによらず正しい方位を取得する事が出来ました。
ただし、iPhoneでもそうですが、寝転がってコンパスを見ると正しい方位が表示されません。まぁ、そんなことをする人はあまりいないと思いますが…
2011年3月2日水曜日
Unity3DがFlash上で動くようになる?
Unity Technologies Blogによると、UnityからFlashへの書き出しを検討しているようです。
リリース時期やサポートされる3D機能等は明言していないですが、
開発は順調に進んでいるようです。
FlashPlayer11から搭載されるGPU描画可能な"3D API (Molehill)"を利用したものになるので、
FlashPlayer11がリリースされた後に正式発表でしょうか。
ちなみにFlashPlayer11は2011年前半にベータ版リリース予定です。
もしこれが実現すれば、Flash単体での3Dオーサリングより手軽に作れるようになるんでしょうか。
ゲームの3D部分はUnity、メニュー等の2D部分はFlashという作り方ができるとベストなんですが!
リリース時期やサポートされる3D機能等は明言していないですが、
開発は順調に進んでいるようです。
FlashPlayer11から搭載されるGPU描画可能な"3D API (Molehill)"を利用したものになるので、
FlashPlayer11がリリースされた後に正式発表でしょうか。
ちなみにFlashPlayer11は2011年前半にベータ版リリース予定です。
もしこれが実現すれば、Flash単体での3Dオーサリングより手軽に作れるようになるんでしょうか。
ゲームの3D部分はUnity、メニュー等の2D部分はFlashという作り方ができるとベストなんですが!
2011年2月23日水曜日
QLColorCodeを使用してASファイルをクイックルック(Mac OS 10.6 Snow Leopard)
クイックルックでASファイルの中身を見れる、QLColorCodeというプラグインがあります。
僕も愛用しているのですが、会社のOS10.5ではASファイルを見れるのに、同じプラグインをコピーしても家の0S10.6で見れませんでした。
色々と調べて、QLColorCodeを使用してOS10.6でASファイルをクイックルックする方法を見つけましたので、投稿しておきます。
導入に関しては、自己責任でお願いしますね。
QLColorCodeを導入する手順については、以下のサイトが詳しいです。
QuickLookでソースをカラーリング:QLColorCodeの改良.
上記サイトの通りにインストールすると、日本語も正常に表示され、改行コードに関するバグも直ります。
ですが、OS10.6の場合ASファイルがクイックルックで見れません。
これを直すには、QLColorCode.qlgenerator内の「Info.plist」を編集すると良いようです。
Enable Quick Look of ActionScript and Flex files on Snow Leopard
上記サイトを見ると、以下の手順でASファイルのクイックルックを有効にできるようです。
1)インストールしたQLColorCode.qlgeneratorを右クリック->「パッケージの内容を表示」します。
2)Contents/Info.plistをテキストエディタで開きます。
3)<key>LSItemContentTypes</key>と書いてある直下の<array>に、com.apple.applesingle-archiveを追加します。
以下のような感じになります。
CFBundleTypeRole QLGenerator LSItemContentTypes public.source-code public.xml com.apple.property-list org.tug.tex public.plain-text com.apple.applesingle-archive
これで、Snow LeopardでもASファイルがクイックルック出来るようになります。
2011年2月8日火曜日
Mac OS 10.6とiPhotoとAndroid
以前、iPhotoでAndroidの撮影した写真が読み込めないという記事を書きましたが、この症状に陥る条件が分かったので投稿しておきます。
症状をおさらいをすると、
・写真ファイルの文字数が8文字ジャスト
・ファイル名に"."や"-"を含まない
上記以外のファイルは、端末をつないでもiPhotoの読み込み候補に表示されません。なので、Androidの写真ファイル名(2010-10-28 13.01.25.jpg等)はアウト。ただ、端末によっては問題なく読み込めていました。また、写真を手動で(D&D等で)読み込む分には問題ありません。
色々と調べてみた結果、どうやらMac OS 10.6上のiPhotoでは、どのバージョンでも読み込む事が出来ないようです。ですので、写真の取り込みには他のソフトを使うなり、手動でなんとかするなりするしか無さそう…
確かに、他のカメラメーカーを見てもファイル命名規則は上記に乗っ取っているので、「カメラから写真を読み込む」にはこの条件でも良いですね。色々なデバイスがMacにつながれるようになった時、写真を選り分ける確実な方法、という事なのでしょう。
ただ、それ以外なら例えExif情報があろうと無視なのはちょっと困りますね…
Androidの写真をMacに読み込む、何か他の良い方法を探してみる事にします。
症状をおさらいをすると、
・写真ファイルの文字数が8文字ジャスト
・ファイル名に"."や"-"を含まない
上記以外のファイルは、端末をつないでもiPhotoの読み込み候補に表示されません。なので、Androidの写真ファイル名(2010-10-28 13.01.25.jpg等)はアウト。ただ、端末によっては問題なく読み込めていました。また、写真を手動で(D&D等で)読み込む分には問題ありません。
色々と調べてみた結果、どうやらMac OS 10.6上のiPhotoでは、どのバージョンでも読み込む事が出来ないようです。ですので、写真の取り込みには他のソフトを使うなり、手動でなんとかするなりするしか無さそう…
確かに、他のカメラメーカーを見てもファイル命名規則は上記に乗っ取っているので、「カメラから写真を読み込む」にはこの条件でも良いですね。色々なデバイスがMacにつながれるようになった時、写真を選り分ける確実な方法、という事なのでしょう。
ただ、それ以外なら例えExif情報があろうと無視なのはちょっと困りますね…
Androidの写真をMacに読み込む、何か他の良い方法を探してみる事にします。
2011年2月3日木曜日
[as3] WIndows7タブレット上のFlashのタッチ感度を良くする
WIndows7タブレットでFlashを動かすとタッチの感度が悪いかったので調べてみました。
WIndows7タブレットでマウスダウンを受け取るFlashを動かすと
タッチ時にマウスダウンイベントが来ず、指を少しずらした時に来る仕様になっているようです。
このままではタッチ操作がワンテンポ遅れてしまい、追従性のよくない動きになってしまいます。
タッチパネルのドライバとFlashの相性の問題かと思って、
いろんなメーカーのタブレットを試しましたが、どれもは挙動は同じ。
そこでFlashCS5から新しく加わったマルチタッチイベントを試してみると
Flashにスクリプト一行追加するだけで直りました。
これでタッチ時にマウスイベントが来て、サクサク動くようになりました。
調べてないけど、もしかするとAndroidとかでも有効かもしれない。
ただ、これからはTouchEventを使う方がよさそうなので、勉強しないとね。
参考:FlashゲームPG講座 For AS3.0【入力コントロールについて】
WIndows7タブレットでマウスダウンを受け取るFlashを動かすと
タッチ時にマウスダウンイベントが来ず、指を少しずらした時に来る仕様になっているようです。
このままではタッチ操作がワンテンポ遅れてしまい、追従性のよくない動きになってしまいます。
タッチパネルのドライバとFlashの相性の問題かと思って、
いろんなメーカーのタブレットを試しましたが、どれもは挙動は同じ。
そこでFlashCS5から新しく加わったマルチタッチイベントを試してみると
Flashにスクリプト一行追加するだけで直りました。
//Flash CS5が必要です。 Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
これでタッチ時にマウスイベントが来て、サクサク動くようになりました。
調べてないけど、もしかするとAndroidとかでも有効かもしれない。
ただ、これからはTouchEventを使う方がよさそうなので、勉強しないとね。
参考:FlashゲームPG講座 For AS3.0【入力コントロールについて】
![]() | 新品最安価格:¥ 68,525 (14店出品) 売上ランク:53347位 レビュー平均: 4.0点 (1人がレビュー投稿) |
by amazon通販最速検索 at 2011/02/03 | |
登録:
投稿 (Atom)
















4.0点 (1人がレビュー投稿)