2012年8月6日月曜日

近々VerUPかけたい

各アプリをSDカードに移せるようにVerUPしたいです。

SDカードに移せるようにするには簡単で、マニフェスト?マニュフェスト?に一行追加するだけ。
むしろデフォルトでオートしといてよとおもいます。

あと以前コメントくれた方のソースを見て、解説できる範囲でしたいです。

ではでは

2012年3月27日火曜日

タッチした場所に画像を表示する際にずれる

タッチ場所を検出する際
【onSurfaceChanged(GL10 gl, int width, int height){}】
のwidthとheightので計算していました。
下記計算方法
-------------------------------
tochSet(Event event){
x = event.getX();
y = height - event.getY();
}
--------------------------------

しかし、この情報と実際の画面情報が異なり、実際の画面サイズより50位大きかった。
それにより、タッチした場所よりマイナス50された値が帰ってきてました。
以下内容に変更しました。

-------------------------------------
//フィールド
//画面情報保持用の変数
int mGLHeight = 0;
int mGLWidth = 0;

onSurfaceChanged(GL10 gl, int width, int height) {
        //画面取得の自作メソッド
        setWindowSize();

        // ビューポートの設定
   gl.glViewport(0, 0, width, mGLHeight);

                **省略**

// 2Dの投影
    GLU.gluOrtho2D(gl, 0.0f, width, 0.0f, mGLHeight);
}

//画面情報を取得するメソッド
private void setWindowSize() {
  WindowManager windowmanager = (WindowManager)  getSystemService(WINDOW_SERVICE);
  Display disp = windowmanager.getDefaultDisplay();
  mGLWidth = disp.getWidth();
   mGLHeight = disp.getHeight();
}

tochSet(Event event){

x = event.getX();
y = mGLHeight - event.getY();
}
---------------------------------------

setWindowSize();
変数に画面情報を取得する(タッチイベントなどで使うから)
これをメソッド化したのは、他でも使えるかもしれないからですが、変数に入れてるからいらないかもですね。

ビューポートと2Dの投影にmGLHeightをセットする。これにより誤差がなくなりました。(mGLWidthは今のところ不具合でていないのでそのまま)

tochSet();
これはタッチ時に呼ぶ自作メソッドです。タッチイベントに記載してください。

これにより、画面サイズが異なる端末でもちゃんと座標が取得できると思います。
又、画面サイズを取得しているのでこれを元にレイアウトも決めれるのではないでしょうか。
以上が解決作になります。

OpenGL透過処理について

GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp, 0);
上記を使うと、透過(アルファ値)も計算してしまし、透明化できない問題があるらしい。
いろいろ調べた結果、海外の人とかは、GLUtils.texImage2Dを使わずに独自に計算してる人が多いみたい。
自分はそういうが良く分からず、いろいろ回った結果下記がありました。
http://stackoverflow.com/questions/2361602/transparent-texture-in-opengl-es-for-android

テクスチャのロード時じゃなく、drawするところに下記を追加すると透過処理できました。

gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);

2012年3月25日日曜日

OpenGLのBuffer問題


OpenGLES (SDK target 3) called a GL11 Pointer method with an indirect Buffer.
というエラーが表示されてしまう。

これはBufferの仕方によって、出るエラーらしい。

https://sites.google.com/a/gclue.jp/android-docs-2009/2dno-miao-hua
このサイトを参考に作っていったら、一応エラーは出ずに動きました。

結構親切に解説されてます。

2012年3月16日金曜日

バージョンアップのお知らせ

Tag to Board
Ver1.0.0
アプリを公開しました。
Ver1.1
・【改善】バージョン表記の変更をしました。
・【要望】『メモ作成画面のテキスト入力幅をリストと一緒にしてほしい』
メモ作成画面の幅をメモリスト画面の幅に近づけました。
・【修正】メモ作成時行数が増えた場合、スクロールできない問題を修正しました。
・【修正】端末によってレイアウトが崩れる問題を修正しました。
・【機能追加】メニューに「紹介」を追加しました。

今運おみくじ
Ver1.0
アプリを公開しました。
Ver1.1
・【機能追加】共有機能を実装しました。
Ver1.2
・【更新】外部jarのバージョンアップに対応しました。
・【更新】紹介のリンク先を追加
・【改善】おみくじの出る確率の変更をしました。

反射神経トレーニング-Training Reflexes-
Ver1.0
アプリを公開しました。
Ver1.1
・【要望】『ゲームスタート後の状況が分かりにくい』
ゲームスタート時、画面上部にゲーム説明が表示されるように修正しました。
・【機能追加】共有機能を実装しました。
Ver1.2
・【改善】ランキング登録時にランク外のデータを削除するように変更しました。
・【改善】結果を算出する方法を変更しました。
・【要望】『赤から青に変わるタイミングが長い』
赤から青に変わる最大秒数を2秒間縮めました。
Ver1.3
・【改善】共有機能にテキストを追加しました。

Signal Puzzle
Ver1.0
・アプリを公開しました。
Ver1.1
・【改善】言語、英語に対応しました。
・【更新】外部jarのバージョンアップに対応しました。


-------------カテゴリー説明---------------------------
【修正】…不具合修正
【改善】…制作している上で改善できるもの・使いに難い物の修正
【要望】…ユーザー様等からの意見反映
【更新】…SDKなどのバージョンアップ
【機能追加】…新機能追加
-------------------------------------------------------

string.xmlからsettextする際の失敗例

今回マルチランゲージを行った際の不具合を紹介します。

Signal Puzzleではゲーム中に、時間・タッチ回数などを更新時、データベースをリスト表示する時にテキストをセットしています。

この時にstring.xmlのリソースを取得してセットしていたんですが、単体では使えたけど、複数の文字列を扱う場合、使えませんでした。以下内容になります。

---------------------初期----------------------
TextView text1

*******省略*******

text1.setText("こんにちは");
---------------------変更1---------------------
text1.setText(R.string.xxx);
---------------------変更2---------------------
text1.setText("おはようございます"+R.string.xxx);
-----------------------------------------------

上記のように変更してみました。そうした場合変更2は失敗しました。

【表示時】
---初期-----
こんにちは
---変更1----
こんにちは
---変更2----
おはようございますxxxxxxxxxxx(R.string.xxxのリソースid)
------------

下記のように修正しました。

--------------------- 変更3 ----------------------
TextView text1
String viewtext1

*******省略*******

viewtext1 = getString(R.string.xxx);
text1.setText("おはようございます"+viewtext1);
-------------------------------------------------

【表示時】
---変更3----
おはようございますこんにちは
------------

【結論】
複数の文字列をセットする場合は、一度単体でStringデータを取得して、セットしてあげるのが良いようです。
単体で使う場合でも取得してからの方が良いかもしれませんね!

これ位常識なのかな・・・?

以上になります。

マルチランゲージについて

今回のSignalPuzzleで初のマルチランゲージに挑戦しました。(英語と日本語だけですが)

1.言語の種類を決める(今回は日本語・英語)
2.メインになる言語を決める(今回は英語)
3.言語によって変わる文字列は[string.xml]に入れる(2で決めた言語で入れる)
4.[res]フォルダに[values-ja]フォルダを作る(jaは日本語用)
5.[values]フォルダ内の[string.xml]を[values-ja]フォルダにコピペする
6.[values-ja]フォルダ内の[string.xml]に記載されている文字列を日本語にする。

上記の手順で2ヶ国語対応になります。

言語が英語だった場合、values-xxにenが無いのでvaluesのstring.xmlが読み込まれ、
言語が日本語だった場合、values-xxにjaがあるのでvalues-jaのstring.xmlが読み込まれます。
言語が上記2つじゃなかった場合、valuesのstring.xmlが読み込まれます。

言語のメインを英語にしたのは、幅広く使われている為です。

上記適用時に失敗した例の記事。
http://atu-aka.blogspot.com/2012/03/2.html