カテゴリー別アーカイブ: Androidアンドロイド携帯アプリ

2013年5作目の次のスマートフォンアプリは何を作るか?  iPhone cocos2d, Android AndEngine, unity

2013年5作目の次のスマートフォンアプリは何を作るか?  iPhone cocos2d, Android AndEngine, unity

・経緯

これまで今年に入ってアイフォンアプリを主流として4本のアプリを作成しました。
アイフォンがメインだった理由は、複数の開発言語を覚えるのが面倒であり、テスト環境であるタブレットを揃える資金がもったいないからです。つまり、アンドロイドアプリを作ろうとすれば、アンドロイド用タブレットを購入する必要があるので、作ることはないと思ってました。
 けど、作れそうだったので、タブレットを購入してアプリを完成させました。アンドロイドの市場も見逃せないと思ったからです。

次のアプリをどうするのか決めなくてはなりません。
今年5作目、通しで6作目のアプリ候補として、

・検討

1.Androidのアンドエンジンフレームワークを使ったアプリ、アイフォンアプリからの移植
アンドエンジンフレームワークはまだ使ったことがありません。Androidアプリは1作ビジネス、学習アプリを作成済み。

2.unityユニティを使った3Dアプリ
ユニティ学習中、一時休止中であり、公開アプリはまだなし。

3.アイフォンココス2Dcocos2d for iPhoneを使ったアプリ、過去3作を作成済み

を考えています。

ユニティは今後主流になると思われますが、数年後無くなるか、全て有料になるかもしれません。
andEngineアンドエンジンもどうなるのか。
そう言ってしまうと、ココスcocos2dもどうなるのか?
プラットフォームはいつか新旧交代の浮き目に合うのは必定でいまどうこう考えても同じです。

アイフォン、Android両方対応のユニティが一番魅力的です。でも、素材の作成が面倒です。3Dですから、Blenderなどの3Dアプリケーションでモデリング、テクスチャマッピングなどを施す必要があります。
つまり、素材の作成で自分が息切れしそうで、完成まで時間がかなり必要と予想されます。

・結論

ここで、それぞれフレームワーク、開発環境の特性を知っていなければ、どのようなアプリを作るのにどのフレームワークを使用するのが良いのか、最適なフレームワークなのか理解できません。

という事で、取り敢えず、Androidのアンドエンジンで作ってみようかと思います。
その後は、ユニティで作ってみようかと思います。
または、アイフォンアプリの過去作品のバージョンアップや広告挿入でもよいかもしれません。

ちなみに、cocos2d-xというC++によるクロスプラットフォームもあります。アイフォンでもアンドロイドでもどちらでも動作可能です。
しかし、クロスプラットフォームというのは、経験則からいって、今後どうなるのか非常に不明であり、細かい仕様をそれぞれのプラットフォームで実現しようとすると問題が発生しそうなので、今のところは検討しません。
これは、自分の実力が足りないからであり、もう少し、アイフォンやアンドロイドアプリを作成していってから検討しようと思います。

まずはそれぞれのプラットフォームの仕様や構成を勉強しようと思います。

android版弁理士短答試験過去問題記録ノート無料アプリをグーグルプレイにアップ完了|グーグルプレイにアップロードした時に間違ってしまった手順

android版弁理士短答試験過去問題記録ノート無料アプリをグーグルプレイにアップ

無料ダウンロード、特許法、実用新案法、意匠法、商標法の条文を搭載

android版弁理士短答試験過去問題記録ノート無料アプリ

先月アイフォン版の弁理士短答試験過去問題記録ノートを開発し、今回アンドロイド版を開発、アップしました。
アイフォン版についてはこちらiOS7 iPhoneアプリ(4作目)申請からリリース状況のまとめ

機能についてはほぼ同じですが、アイフォンとアンドロイドのOSと開発環境の違いから少し画面構成、操作方法など変わりました。

現在、後発のアンドロイド版には法文集に簡単な検索機能が付加されています。

<アイフォンアプリとアンドロイドアプリ開発の感想>
 アイフォンアプリをいままでにゲームを含めて4本、今回はじめてアンドロイドアプリを1本開発しました。
 アイフォンアプリとアンドロイドアプリの開発を振り返ると、アイフォンのほうが作りやすいという印象を受けました。
 理由として
1.画面サイズが一定の範囲で固定されている
2.XCODE、開発環境が便利、ストーリーボードが使いやすい
3.開発者にすべてのコードを無理に記載させない配慮がある(個人的)

でした。
アンドロイドアプリで面倒なのが、画面構成、レイアウトでした。
XML、いわゆるブラウザに表示するように画面にオブジェクトを配置していきますが、思ったように配置できずにイライラします。
 これは、後に、あらゆる画面サイズに対応するための処置なのだなと思わされるのですが、たくさんのモニタサイズの全てに配慮するなど無理であり、きちんと仕様にまとめるべきではないのかアンドロイド担当者に言いたいくらいでした。

グーグルプレイの登録に25ドル必要です。

・説明
弁理士短答試験の過去問題(現在は平成25年度の問題を使用)を学習する無料の勉強アプリです。60問の問題から1問を選択して学習します。
正解回数を履歴として記録しますので、勉強が不十分な問題を把握することができます。
さらに、特許法、実用新案法、意匠法、商標法の条文データを搭載。(著作権、不正競争防止法他の条文については今後のバージョンアップで対応予定)
android_web_1

android_web_2

android_web_3

登録の注意点

・グーグルプレイにアップロードした時に間違ってしまった手順、操作

apkをアップロードしようとしたら「zipalign が実行されていない APK をアップロードしました。APK で zipalign を実行し、もう一度アップロードする必要があります。」というエラー

eclipseからandroidアプリへのデジタル署名手順が必要らしいです
android_key
1.”Android Tools” > “Export Signed Application Package…
を実行して、必要な情報を入力
2.指示に従って入力して、新しいAPKファイルを作成して、
3.アップロードして、
4.公開設定にすれば終わりです。
AM8:06

ただ、どのURLかいまわからない。たぶん次のようになると思います。
https://play.google.com/store/apps/details?id=com.example.application

android版弁理士短答試験過去問題記録ノート無料アプリ

(2)アイフォンからアンドロイドアプリ移植、ボタンに画像を設定した

(2)アイフォンからアンドロイドアプリ移植、ボタンに画像を設定した

 アイフォンの場合は、ストーリーボードに標準のボタンを配置して、customを設定して、画像を読み込み、設定します。
ほとんど、画面上で設定します。
 アンドロイドは、xmlで設定します。
 
・ボタン、アンドロイド
1.drawableに、button用のxmlを作成します。作成のときはselectorを選択します。
そしてレイアウトに、button用のxmlを指定します。そうすることで、レイアウト、button用のxml、ボタン画像というように設定されていきます。

レイアウト.xmlの記載
ボタンに画像を設定した場合とイメージボタンを設定した場合、どちらもcustom.xmlを選択可能
[c]
<!– custom button, custom.xml –>
<Button
android:id="@+id/buttonStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:scaleType="centerInside"
android:background="@drawable/custom" />

<!– custom Imagebutton, custom.xml –>
<ImageButton
android:id="@+id/imgButtonStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:scaleType="fitXY"
android:background="@null"
android:src="@drawable/custom" />
[/c]

button用のxmlの記載 startはstart.png,今は1種類しかないので、プレス、フォーカスとも同じファイルを指定
[c]
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true" android:drawable="@drawable/start"></item>
<item android:state_focused="true" android:drawable="@drawable/start"></item>
<item android:drawable="@drawable/start"></item>

</selector>
[/c]

ボタンの角丸
[c] <corners android:radius="5dip" /> [/c]

【Androidアプリ作成】ボタンのカスタマイズ

3 Android 今日のエラー、グローバル変数設定エラー、This version of the rendering library is more recent than your version of ADT plug-in、バックグラウンドからの復帰でエラー、Cursor cursor=db.rawQuery(selectQuery, null)

3 Android 今日のエラー、グローバル変数設定エラー、This version of the rendering library is more recent than your version of ADT plug-in、バックグラウンドからの復帰でエラー、Cursor cursor=db.rawQuery(selectQuery, null);

前回のエラーIntentのfinish()でエラー、textViewの初期化忘れ、強制終了、レイアウトXMLの記載ミス

(1)Activityにまたがってグローバルに変数などのオブジェクトを共有でエラー

何度コードをチェックして見てもグローバル変数を設定したところでエラーとなります。コードの記載が間違っているのかとなやっていて、
再度、参考サイトを参考にすると、AndroidManifest.xmlの設定を忘れていました。


AndroidManifest.xmlの中のapplicationタグの中に
android:name=”Globals”

これでOK。
なお、アイフォンのXCODEにはxmlはありませんので、グローバル変数を使うときにアンドロイドのような設定はありません。
デリゲートするだけです。

(2)配列に値が代入されていないのに、値を取り出そうとしていた
>値を代入した後に、値を取り出すように変更(コードをリライト、メソッド(関数)化したときに、順序がばらばらになってしまったという現象でした)

(3)onCreateにsetContentVIew() が記載されていないミス
>正しく記載

(4)指定したレイアウトに指定したオブジェクトボタンがなかった、または誤記
>必要なオブジェクトボタンと正しいオブジェクトを設定した。

(5)任意の画面に戻るとエラーになる。それは仕様です。

トップ、リスト、問題、答え。の順で画面を切り換えて移動して、答え画面で、リストに飛ぶIntentするとエラーとなります。そこで、intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONTは途中の画面に戻っても
エラーになりませんが、ここで、finish()の戻りが、変わってしまいます。
つまり、途中で流れを変えてしまいましたので、いままでの流れを変えてしまうことになりました。
そして、この流れが変わった状況で、画面遷移をするとまた、エラーになりました。
アンドロイドの仕様では、順番に移動し元に戻ることが基準になるようです。

そこで、案としては、答えの画面をダイアログにする。
または、トップ表紙を辞めてリスト画面を最初にする。
が考えられました。
トップは単に表紙の役割でしかないので、トップを止めれば良いのです。
しかし、なんとなくソフトとして突然学習が始まるのは、急すぎる気がします。

一応、答えからトップに戻る場合は、エラーになるという問題ありません。途中のリスト画面に戻ってしまうので問題が発生してしまうのです。

 いろいろと調べてみると、トップからリスト画面に移動するときに、Intent発行時にActivityスタックをクリアすれば良いという記載がありました。
 [c]
Intent intent = new Intent(getApplicationContext(), 移動先のクラス.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
[/c]

【Android】Intent発行時にActivityスタックをクリアする方法を参照
これで、試してみます。
だめなときは、トップ画面を止めようかと。
それでも上手くいかないときは、答え画面をやめて、ダイアログにしようと思います。

 
(6)This version of the rendering library is more recent than your version of ADT plug-in
新しくSDKをバージョンアップしたら、レイアウトが表示されなかった。

Click Help > Install New Software.
In the Work with field, enter: https://dl-ssl.google.com/android/eclipse/
Select Developer Tools / Android Development Tools.
Click Next and complete the wizard.

でインストール

(7)多重起動を禁止
AndroidManifestのactivity内
android:launchMode=”singleTask”
を追加してみた

これでどうなるか
だめですね。多重起動してる。
改善せず。

(8)sherlock を導入して、警告が表示されるのは自作のプロジェクトのlibs/android-support-v4.jarをEclipseから削除すれば
よいそうです。

ActionBarSherlockをアプリで使おうとして導入時”Jar mismatch! Fix your dependencies”と出た時の対処

(8)バックグラウンドからの復帰でエラー
Qlist.javaにintentするとエラーになってしまう。
他のアクティビティを表示させていて、バックグラウンドになってもエラーにはならないのに。

そこで、public void onDestroy()、onStop() など を入れました。

@Override
public void onUserLeaveHint(){
//ホームボタンが押された時や、他のアプリが起動した時に呼ばれる
//戻るボタンが押された場合には呼ばれない
finish();//ここで、Qlist.javaを終了させる
}
として、Qlistのアクティビティが起動していたら、強制的に終了させるようにしてみました。
すると、とりあえず、Qlist.javaのアクティビティのときにバックグラウンドになっても強制終了することはなくなりました。
しかし、今度は、タスクリストで、Qlist.javaのアクティビティが表示されるときには、アプリの最初の画面からになってしまいました。
これは、 onUserLeaveHint()のfinish()をコメントにすれば、すべて丸く納まるのか?
この点については、後日やってみようと思います。
まずは、onUserLeaveHintで、強制終了はなくなりました。
しかし、他にも問題がありました。他の画面のアクティビティでも終了していて、戻るでQlist画面が表示されません。

そこで、onStop()にfinish()を入れました。
でもこれだと画面が切り替わるとQLISTを削除終了します。

うーんと悩んでいてfinish()を入れずに、再度確認したら、強制終了しなくなりました。
もしかすると他のところを直していてそこが原因だったか?

とりあえず、このまま進めてみます。

(9)SQLiteでエラーCursor cursor=db.rawQuery(selectQuery, null);
の次の処理でエラーです。
>原因
単に検索結果が該当なしなだけでした。
検索結果が0なのに、配列から格納された以上の値を取得しようとしていました。
検索結果が0のときはなにもしないようにしました。

ネクサス7購入、アンドロイドアプリデバッグ、しかし、開発者オプションを表示させるのに裏技があったなんて。Mac OSXでandroidの実機テストnexus7 USBデバッグ どこ?

ネクサス7購入、アンドロイドアプリデバッグ、しかし、開発者オプションを表示させるのに裏技があったなんて

ネクサス7を購入して早速、MacOSXにUSB接続してアンドロイドアプリを実行させようと思ったら、
開発者オプションがありません。
なんだ?どうしたんだと思ったら、裏技の設定が必要でした。

このサイトを参考にしました。
Nexus7で実機デバッグ!

まさか7回タップするなんて。
でもようやくこれで、アンドロイドで実機テストできます。

やっぱり実機で使ってみると、いろいろと改善点がでてきます。

Android 今日のエラー Intentのfinish()でエラー、textViewの初期化忘れ、強制終了、レイアウトXMLの記載ミス

Android 今日のエラー Intentのfinish()でエラー、textViewの初期化忘れ、強制終了、レイアウトXMLの記載ミス

前回のエラー
(1)Androidアプリ開発、今日のエラー,AndroidManifest.xml、AndroidActivity.xmlの設定忘れ、Admob広告を表示させる,error、 エミュレータ 動かない,エミュレータを起動してもアプリが実行されない|(1)アイフォンアプリをアンドロイドアプリに移植、コード比較、変換方法

(1)Intentのfinish()でエラー、
画面遷移で、AからB画面へ移動し、B画面でボタンにfinish()を記載して実行するとA画面に戻ってエラーとなりました。
ActivityThread.performDestroyActivity(IBinder, boolean, int, boolean) line: 3273

B画面にpublic void onDestroy() {が記載されていたので、これをコメントにしました。
>正常になりました。
未だ試していないのですが、ADMOBを入れて正常に動作していないために、onDestroyでエラーになったおそれがあります。
まずは、正常に動作する方向で確認してからAdomobを入れていきます。
いまは、B画面でAdmobは正常に表示されていない状態でした。

(2)textViewの初期化忘れ
(TextView)findViewById(R.id.hobunWhichTextView);
初期化しました。

(3)突然エラーで強制終了、レイアウトXMLの記載ミス

>症状:AからBに画面遷移するとき、B画面が表示されずに強制終了する
数時間前の作業まで、正常に動作していると思っていたコードに追加作業をして、実行したら強制終了するようになった。
>対応:コメントにしながらどこまで表示されているのかをデバッグしました。
デバッガには、どこが悪いのか表示されているのか不明な状態。
宣言をしているところまでのコードにして徐々にコメント解除しながら、どこが悪いのかをかくにんします
>原因
backButton=(Button)findViewById(R.id.hobunBackButton);
のレイアウトXML側のR.id.hobunBackButtonの記載が違っていました。
 たぶん、どこかのタイミングで誤って文字の一部を削除してしまったみたいです。
 
コンパイルはエラーもなく、実行しても直ちに強制終了はなく、該当する画面が表示されたときに強制終了となりました。
こういったエラーの箇所を調べるのは難しいので、こまめに動作検証をしながら、コードを書いていくしかありません。

(4)admobエラー、広告を表示する領域が足りません。
Not enough space to show ad! Wants: <426, 66>, Has: <800, 0>
領域を確保して表示させます。が、なかなかうまく領域を確保するタグが組めません。試行錯誤になると思います。

(1)Androidアプリ開発、今日のエラー,AndroidManifest.xml、AndroidActivity.xmlの設定忘れ、Admob広告を表示させる,error、 エミュレータ 動かない,エミュレータを起動してもアプリが実行されない|(1)アイフォンアプリをアンドロイドアプリに移植、コード比較、変換方法

(1)Androidアプリ開発、今日のエラー,AndroidManifest.xml、AndroidActivity.xmlの設定忘れ、Admob広告を表示させる,error、 エミュレータ 動かない,エミュレータを起動してもアプリが実行されない

  1. アイフォンアプリの場合はこちら
  2. Androidアプリ開発、今日のエラーまとめ(1)ー(6)分、2003年9月22日〜11月7日(1)から(6)まとめのリンクはこちら
  3. (7) 今日のエラーAndroidアプリ開発、andEngine GLES2 Anchor Center,box2d |manifest.xmlの記述ミスでintentでエラーはこちら

アイフォンアプリをアンドロイドアプリに移植中です。
 アイフォンの開発言語はobjective-cで、アンドロイドはJAVA言語になります。JAVAをベースにしてアンドロイドアプリをつくるとしてもアンドロイドアプリのための固有の開発方法がありそうです。

(1)ワーニング AndroidManifest.xml

Description Resource Path Location Type
Not targeting the latest versions of Android; compatibility modes apply. Consider testing and updating this version. Consult the android.os.Build.VERSION_CODES javadoc for details. AndroidManifest.xml

android:targetSdkVersion=”18″
しました。

(2)android エミュレータ 動かない,エミュレータを起動してもアプリが実行されないときは

EclipseからAndroidエミュレータを起動してもアプリが実行されない
この記事を参考にしてようやくハローワールドが表示されました。

(3)intent 画面遷移で移動できない、対処はAndroidActivity.xmlの設定忘れ

AndroidActivity.xmlに

(4)adView = new AdView(this, AdSize.BANNER, “ID-XXX”);でエラー

Could not find class ‘com.google.ads.AdView’, referenced from method com.AAA.bentannote2.MainActivity.onCreate

Admobのライブラリの挿入方法が教科書のヘルプであるグーグルの説明と異なり、変わったようです。

正しくは、
libs/GoogleAdMobAdsSdk-XXX.jarとなるように、GoogleAdMobAdsSdk-XXX.jarをコピーします。
私は手動で、コピペしました。
もし、すでに、教科書通りにGoogleAdMobAdsSdk-XXX.jarを挿入していたら、挿入済みを一旦削除してください。
すでに登録されているGoogleAdMobAdsSdk-XXX.jarがあるとエラーになります。

AdMobの使い方
Could not find class ‘com.google.ads.AdView’

(5)配列が初期化されていない

宣言だけして、初期化を忘れていました。
 myArray=new ArrayList();
宣言をしたら、どこにでもいいのでまず、初期化を書くように習慣づけたいと思います。

(1)アイフォンアプリをアンドロイドアプリに移植、コード比較、変換方法

x-code,android アイフォンアプリを作ったのでアンドロイドアプリを作ってみよう

アンドロイドアプリなんて作ることはないと思ってました。
アンドロイドアプリを作成するのに、今度はJAVAを覚えなくてはならないという手間が嫌でした。それに、アンドロイドアプリを作っても果たしてダウンロードをする人がいるのか、作っても無駄な作業にナルト思っていました。
しかし、自分の作ったアイフォンアプリが比較的よくできたと思ってしまったので、アンドロイドアプリを作ることにしました。それに、自分が使うアプリなら、誰もダウンロードしてくれなくても、自分が使えていればそれで十分なのかもしれません。

まずは、作り方から勉強します。
内容と構成はアイフォンアプリと同じなので必要な機能を覚えて行きます。

まずは簡単なアプリからはじめます。

アイフォンアプリのx-codeと比較しながらメモをとっていきます。
いずれ、アンドロイドアプリの作り方をすぐに忘れてしまいます。忘れても良いように書いておきます。

<アイフォンアプリをアンドロイドに移植開発>

アイフォンアプリは、スマートボードを利用してViewを作成すると便利です。アンドロイドは、1アプリで画面展開を一覧表示する機能はないので、1View1画面毎に表示して、作業をします。
レイアウトXMLがView画面に相当し、JAVAクラスからでもオブジェクトを作成できます。

 説明文中で、アイフォンアプリ、iOS, XCODE, objective-Cと書いた場合は、アイフォンアプリについての説明を記載したものです。アンドロイドアプリ、eclipse, JAVAと書いた場合は、アンドロイドアプリについての説明を記載したものです。
 開発環境、開発言語と細かく区別せず大きな枠で説明しています。解釈上意味不明なところがあると思います。

1.ログ出力

アイフォンアプリ,XCODEのログ出力
NSLog(@”DB is OK”);
DB is OK
と出力されます。

アンドロイド, JAVAのログ出力

画像

Log.d(“DB”, “OK”);
最初の引数はタグで、ログキャットのタグの列に表示されます。そして、第2引数はテキストの列に表示されます。
DB OK
として、列に別れて出力されます。こちらの方が見やすいかもしれません。

2.ボタンアクションコードの記載方法

XCODEの場合は、IBActionのメソッドに記載します。

JAVAの場合は、いくつかあります。
また、以下のコードは、少し、コードが長くなります。他にも、レイアウトxmlのボタンに記載してメソッドのように整理できる記載もあります。今回は書籍でよく見かけるコードにしました。
[c]
Button button;
button=(Button)findViewById(R.id.button1);
button.setOnClickListener(new View.ClickListerner(){
public void onClick(View v){
//here
}
});
[/c]
[c]
Button backButton;
backButton=(Button)findViewById(R.id.backButton);
backButton.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

}
});
[/c]
と、メソッドの引数の中に、メソッドがあるように記載します。

3.データベース SQLite3,CoreData

アイフォンでは、PCで事前に作成したSQLite3のファイルをそのまま利用して読み込みます。
書き込みは、CoreDataが利用できます。なお、CoreDataのエンティティ(テーブルみたいなもの)が増えた場合は、インストールしたアプリを削除しないとアプリが起動しない場合があります。

アンドロイド
データベースSQLite3のファイルを参照のみの利用でも、assetフォルダに保管し、使用するときにSQLite3ファイル自体を一旦コピーしてから利用します。
そして、assetフォルダに配置するファイルは1MB以下にする必要があるとのこと。大きすぎるファイルは要注意です。分割するか圧縮する必要があるようです。

参考サイト
[Android Programming] sqliteのDBファイルをPCでつくってandroidで使う – ipreachableの日記

既存のDBをAndroidで使えるようにする方法 – hentekoのdev日記

SQLiteからの結果をListViewに表示する

既存のsqliteファイルをAndroidに組み込む : ナカノ製作所開発備忘録

Y.A.M の 雑記帳: Android あらかじめ作成した SQLite database をアプリに取り込む

4.オブジェクト、ボタン、ラベル、テキストエディット

 XCODEでは、ボタン等をViewに配置し、ヘッダーファイルにドラッグし紐付けします。プログラムで使用しないオブジェクトは紐付けの必要はありません。
 
 JAVAでは、レイアウトのXMLで配置し、クラスに宣言、命令を記載します。
なお、異なるクラスでも同じレイアウトXMLを利用できます。

5.レイアウトVIewの他クラスの利用

アイフォン
オブジェクトを自由に好きなように配置できます。

アンドロイド
レイアウトのXMLに別のレイアウトXMLのオブジェクトを利用できる
レイアウトの自由度は低い。まるでウェブブラウザーで表示するhtmlファイルです。
ただし、様々な画像サイズのタブレットに対応できる柔軟性を持っていますが、デザイン性が低くなるかもしれません。

6.クラスをまたがって変数を共有する

XCODEでは、デリゲートを使用します。

JAVAでは、Applicationを継承したクラスを作ります。
Activityにまたがってグローバルに変数などのオブジェクトを共有するには

7.画像、音声ファイル

アイフォン
プロジェクトのどの場所でもよいですが、フォルダをプロジェクトに作ってわかりやすく配置します。
例えば、pic/back, number, buttonなど。

アンドロイド
resフォルダに保存し、音声ファイルはres/rawに保存します。

8.エミュレータ

アイフォン
アイフォン、iPadのエミュレータが起動します。
レティナ対応のiPadは大きすぎるので、縮小して表示します。特に難しい設定はありません。

アンドロイド
どのターゲットのエミュレータを起動するのか設定し実行します。
もし、エミュレータが実行しても、アプリが起動しない場合は、、、、、を選択します。
ここが一番わかりにくかったです。

9.文字列の取得

アンドロイド
strings.xmlの文字列を取得したいとき
getString(R.string.year) yearはH25年度として登録

10 レイアウトに配置されたTextViewに、文字配列を与えてListViewに表示する

アイフォン
テーブルビューを使用します。

アンドロイド
(1)は、レイアウトxmllistview_row.xmlに配置されたtextView1、textView2に、マップのquestion, answerの文字列をそれぞれ与えます。
そして、このコードにはありませんが、listview.xmlのListViewに表示させるものです。
(2)は、マップなしの単純なArrayListを、listview_row.xmlに配置されたtextView1に配置させるものです。

[c]
(1)SimpleAdapter simpleAdapter=new SimpleAdapter(this, globals.contactArrayList, R.layout.listview_row,new String[]{"question, answer"}, new int[]{R.id.textView1,R.id.textView2});

(2)adapterQuestionString=new ArrayAdapter<String>(this, R.layout.listview_row,R.id.listRowTextView,globals.arrayPartStrings);

[/c]

メタルギア ソリッド V グラウンド・ゼロズ 通常版(初回生産限定特典:本篇『MGSV:TPP』で使用可能なマザーベース スタッフDLC同梱&Amazon.co.jp限定特典:本篇『MGSV:TPP』で使用可能な特殊ダンボール箱DLC付き)プラットフォーム: PlayStation 4、発売予定日は2014年3月20日

Titan Fallタイタンフォール [オンラインコード] [ダウンロード]発売予定日時は2014年3月13日、ガンダムやバルキリー、装甲騎兵ボトムズみたいに人型ロボットに搭乗して敵を倒すゲーム、コックピットからのカメラ映像がリアリティがあり、まさに未来のロボットを操縦する感覚で遊べるゲーム

グラビアアイドル、清水みさと/恋して、みさと先生!


【GoPro HERO3+】LCDタッチ バックパック(リミテッドエディション)「ALCDB-303」在庫あり
「LCDタッチ バックパック」は、GoProカメラ用のLCDタッチスクリーンです。
カメラ背面に装着し、フレーミングや再生など、LCDスクリーンの利便性を提供します。
脱着式なので、不要な時は取り外してGoProカメラをできるだけ軽く小さくコンパクトにすることができます。

アンドロイドAndroidアプリ製作でディスプレイサイズ、スクリーンサイズ取得判別,Unity Admob、UNITY C#、ジャバスクリプトのリンクメモ

アンドロイドAndroidアプリ製作でディスプレイサイズ、スクリーンサイズ取得判別,Unity Admob、UNITY C#、ジャバスクリプトのリンクメモ

調べ物をしたときに、今後参考となるサイトのリンクメモです。

【スクリーンサイズの取得、ディスプレイ情報の取得】

アンドロイドAndroidアプリ製作でディスプレイサイズ、スクリーンサイズ取得判別
AndEngineのダウンロード

画面解像度などディスプレイの情報を取得する方法 –
[Androidアプリ/Android] ぺんたん info

[AndroidTips][Java]画面のサイズや解像度、密度などのデイスプレイの情報を取得する |
Androidアプリ開発情報まとめブログ

画面サイズを取得する
– Androidプログラマへの道 ~ Moonlight 明日香 ~ – Seesaa Wiki(ウィキ)

Androidの画面サイズを攻略して機種依存を吸収する(ナビゲーションバーとステータスバーのサイズを取得する) |
Tech Booster

【・UnityでAdmob広告】

[Unity][iOS]Unityで吐き出したXcodeプロジェクトへのAdmob表示方法 | iPhoneアプリをつくりんぐ
>最近の更新はありません。
[[UIViewController alloc]init];を使うタイプです。

xapp: Unity3Dで作ったゲームにAdMobを表示する方法(iOS編)
>UnityViewController*を使うタイプ

20121123 アド部定例会 unityアプリに広告を入れる方法

【・UNITY C#、javascriptジャバスクリプト】

ゲームは初心者にやさしく: Unity C#とJavascriptの主な違い

Convert unity javascript (unityscript) to C#

Unityでゲーム開発

イノベーション |シーンを跨いで情報を引き継ぐ

ComputerGraphics/Unity/Tips/Script/GetChildAndParentObject – Neareal

【・Unity transform 移動】

ActionScript入門Wiki – Unity – コードからTransformに値を設定する

Unityのtransformのアクセス速度 | 生存日記

【・Unity 回転】

Unity コントローラーの向きにモデルを回転させる方法 – 物欲センサーと戦う日々

[Unity] GameObject自身の角度を取得したい: ものづくりログ

UnityのJavaScript:Vector3とQuaternion : Nanashi-soft

Unity:C#のforループ文 : Nanashi-soft

Unityのプラットフォーム別、ディスプレイスクリーンサイズ別判別 Unity iOSにおけるGUIのiPhoneディスプレイ対応


クリスマストイレットペーパー

画像蒟蒻畑 温州みかん味(25g*12コ入)【蒟蒻畑】[こんにゃく ゼリー ダイエット食品]
●こんにゃく(グルコマンナン)をフルーツ果汁で味付けしたポーションタイプのフルーツコンニャクです。

イカリボタン25mm ブラックダメージ加工ボタンの付け替え、ボタンを無くてお困りの方

インクカートリッジ、IC6CL70L エプソン

(6)cocos2d for iPhone をcocos2d-xに移植する過程の記録メモ、Androidクロスプラットフォーム化へ 、マルチディスプレイ対応のためのディレクトリ配置と画像

(6)cocos2d for iPhone をcocos2d-xに移植する過程の記録メモ、Androidクロスプラットフォーム化へ 、マルチディスプレイ対応のためのディレクトリ配置と画像


前回(5)の記事はこちら
タップしたときに画像の領域にあるか、画像をタップしたかの判定

<ファイル名の記載ルール>
cocos2d for iPhoneでは、レティナ対応のとき、画像のファイル名は-hdを付記してファイル名としました。これは、aaa.png,aaa-hd.pngというファイルを用意すると、aaa.pngで指定すれば、あとは勝手に判別してくれました。つまり、いちいち、aaa-hd.pngとして指定する必要はありません。

 cocos2d-xでは、その方法が異なります。これはアンドロイドにも対応しなければならないため、-hd,-ipadhdとするだけでは対応しきれないと判断したとのこと。
 またまた、移植に手間がかかります。
 
 それぞれのスクリーンサイズ、プラットフォームに対応するフォルダーを個別に作成し、同じファイル名にするそうです。
 iOS-folder、Retina4、Retina3.5、Android−A、Android-Bのように分類するみたいです。
 iPad,iPadRetina,nomal
 Android-folder,type1024,typeB,nomal
 みたいにしてみます。

そして、パスを指定するコードを各自用意するようです。

参考サイト
cocos2d-x マルチディスプレイに対応させる | studycocos2dx

 ・画像の座標取得の場合の注意
 ツール(複数の画像を一つの画像にまとめて座標のListにしてくれるソフト等のことをここでは指しています)を使って、画像の座標を自動で設定する場合はソフト側が自動で処理してくれるのでプラットフォームや解像度別に座標の比率を考慮する必要はありません。
 しかし、ツールを使わずに、ペイントソフトで目算で座標を取得、メモしたりするときは注意が必要です。なぜツールを使わないのかというと、ツールの使い方を覚えるのが面倒であり、修正があるたびにツールを使って修正しなくてはならないので面倒であるからです。扱う画像やアニメーション画像が少ない場合は、ツールを使わずに、ペイントソフトで座標を取得した方がわかりやすくて早いのです。
 
 cocos2d for iPhoneでは、レティナか非レティナで画像の座標を変更する必要があります。
 例えば、レティナ対応の場合、100ピクセルの正方形画像があった場合、実際は50ピクセルとして表示されます。これはレティナの密度が倍の密度だからです。そのため、100ピクセルサイズの座標を取得する場合は、半分の100/2のサイズで取得するようにCGRectMakeを指定します。

作成した実サイズの大きさ(領域)で指定するのではなくて、実際に表示される大きさ(領域)で指定すると言うことです。

 (1ピクセル1ドットとして説明していますので、ピクセルとドットの概念を取り違えているかもしれません。)
 次に、cocos2d-xでは、100ピクセルの正方形画像があった場合、レティナであっても、そのままのサイズで指定します。つまり、cocos2d for iPhoneとは異なるCGRectMakeを指定することになります。
 そのままの画像の座標を指定すればよいのです。
 指定したサイズがスプライトして表示されます。レティナであれば、その半分のサイズ(倍の密度)で表示されます。
 
 このように、フレームワークが異なるといろいろと設定が異なってきます。こういった設定をきちんと把握することが必要です。
 現在学習中です。
 
 

[c]

[/c]

31画像
ディーゼル ナイロンベルトとスクリューバックでハードなミリタリーを感じさせるクロノグラフ
在庫あり
店舗名:インポートセレクトSHOPでらでら
32画像
ディーゼル DIESEL ディーゼル 腕時計 DZ7260 メンズ腕時計 多針アナログ表示 クロノグラフ ディーゼル DIESEL ディーゼル腕時計 MEN’S うでどけい【0405_腕時計】
在庫あり
店舗名:CAMERON
33画像
D&Gメンズ腕時計Twin Tip (ツインチップ)ホワイトシルバー文字盤【DW0755】DOLCE&GABBANA/ドルチェ&ガッバーナ/ドルガバ【ウォッチ】【あす楽対応】【レビューを書いて送料無料!】【新品、本物、当店在庫だから安心】
在庫無し
店舗名:Ryu’s Selection
34画像
【送料無料】即納●MZIエムゼーアイ M.Johansson自動巻カレンダー温湿度計VicusLSB
在庫あり
店舗名:Googoodsグーグッズ楽天市場店
35画像
クロノグラフ風ハイエンドモデル■遊びを忘れたオトナ達へ■木製腕時計No.1老舗テンス/TENSEウッドウォッチメンズ/ダーク&ブラウンサンダルウッド/白檀(ビャクダン)[正規輸入品/2年保障]【楽ギフ_包装】【楽ギフ_メッセ入力】【0405_腕時計】
在庫あり
店舗名:ウッドウォッチコレクション
36画像
D&G ディーアンドジー DW0379 PRIMETIME プライムタイム シルバー/ゴールド メンズウォッチ/腕時計【楽ギフ_包装】【激安】【通販】【価格見直し】
在庫あり
店舗名:1&one

(5)cocos2d for iPhone をcocos2d-xに移植する過程の記録メモ、Androidクロスプラットフォーム化へ 、タップしたときに画像の領域にあるか、画像をタップしたかの判定

(5)cocos2d for iPhone をcocos2d-xに移植する過程の記録メモ、Androidクロスプラットフォーム化へ 、タップしたときに画像の領域にあるか、画像をタップしたかの判定

(4)cocos2d for iPhone をcocos2d-xに移植する過程の記録メモ、Androidクロスプラットフォーム化へ 、update(float delta)、タップイベント
(3)cocos2d for iPhone をcocos2d-xに移植する過程の記録メモ、、CCArrayにint型を挿入する方法、これがcocos2d-xに見当たらないので、vectorにする

・CGRectはCCRect
cocos2d for iPhone
[c]
CGRect rect=CGRectMake(x, y, w, h);
[/c]

cocos2d-x ココス2d−x
[c]
CCRect rect=CCRect(x, y, w, h);
[/c]

・タップしたときに画像の領域にあるか、画像をタップしたかの判定
cocos2d for iPhone
[c]
//locationは、-(void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)eventのCGPoint
CGRect rect=CGRectMake(x, y, w, h);
if(CGRectContainsPoint(rect, location)){
//
}
[/c]

cocos2d-x
[c]
//locationは、ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)のCCPoint
CCRect rect=CCRect(x, y, w, h);
if (rect.containsPoint(location)) {
//
}
[/c]

・アニメーション

2013年7月8日現在で動作未確認、コンパイルエラーなし、実行未確認(画像未作成のため)
cocos2d for iPhone
[c]
nami=[CCSprite spriteWithFile:@"nami1.png"];
nami.position=ccp(-80,windowsSize.height/2);
id namiMove=[CCMoveTo actionWithDuration:8.0f position:ccp(500,windowsSize.height/2)];
id callfuncN_nami=[CCCallFuncN actionWithTarget:self selector:@selector(moveNami:)];
id sequence_nami=[CCSequence actions:namiMove,callfuncN_nami, nil];
[nami runAction:[CCRepeatForever actionWithAction:sequence_nami]];
[self addChild:nami];
[/c]

cocos2d-x
[c]
nami=new CCSprite();
nami->initWithFile("nami1.png");
nami->autorelease();
nami->setPosition(ccp(-80,size.height/2));
CCMoveTo *namiMove=CCMoveTo::create(8, ccp(500, size.height/2));
CCCallFuncN *callfuncN_nami=CCCallFuncN::create(this, callfuncN_selector(HelloWorld::moveNami));
CCSequence *sequence_nami=CCSequence::createWithTwoActions(namiMove, callfuncN_nami);
nami->runAction(CCRepeatForever::create(sequence_nami));
this->addChild(nami);
[/c]
・テクスチャアニメーション、ぱらぱらあにめ
参考サイト

c++ – How to play animations in Cocos2d-x? – Game Development Stack Exchange

  1. android – cocos2d-x sprite animation using .plist – Stack Overflow
  2. Cocos2d-xのパラパラアニメーション: 業務系エンジニアによるiPhoneアプリ開発日記
  3. Cocos2d-x CCAnimation メモリリーク – Qiita [キータ]
  4. CCAnimationの基本 | Blog for Smartphone Seminar 2013

2013年7月9日現在で動作未確認、コンパイルエラーなし、実行未確認(画像未作成のため)
cocos2d for iPhone
[c]
//anime
CCSprite *tmpSprite=[CCSprite spriteWithFile:@"hiyoko_256by256_base.png"];
CCSpriteFrame *frame1=[CCSpriteFrame frameWithTexture:tmpSprite.texture
rect:CGRectMake(0, 0, 60, 60 )];
CCSpriteFrame *frame2=[CCSpriteFrame frameWithTexture:tmpSprite.texture
rect:CGRectMake(60, 0, 60, 60 )];
CCSpriteFrame *frame3=[CCSpriteFrame frameWithTexture:tmpSprite.texture
rect:CGRectMake(120, 0, 60, 60 )];
CCSpriteFrame *frame4=[CCSpriteFrame frameWithTexture:tmpSprite.texture
rect:CGRectMake(180, 0, 60, 60 )];
NSArray *animFrames=[NSArray arrayWithObjects:frame1,frame2
,frame3,frame4, nil];
animation_test=[CCAnimation animationWithSpriteFrames:animFrames delay:0.1f];
[/c]

cocos2d-x
[c]
CCTexture2D *animeTexture=new CCTexture2D();
CCImage *animeImg=new CCImage();
animeImg->initWithImageFile("hiyoko_256by256_base.png");
animeTexture->initWithImage(animeImg);
CCSpriteFrame *frame1=new CCSpriteFrame();
CCSpriteFrame *frame2=new CCSpriteFrame();
CCSpriteFrame *frame3=new CCSpriteFrame();
CCSpriteFrame *frame4=new CCSpriteFrame();
frame1->initWithTexture(animeTexture, CCRectMake(0, 0, 60, 60));
frame2->initWithTexture(animeTexture, CCRectMake(60, 0, 60, 60));
frame3->initWithTexture(animeTexture, CCRectMake(120, 0, 60, 60));
frame4->initWithTexture(animeTexture, CCRectMake(180, 0, 60, 60));
CCArray *animFrames=new CCArray();
animFrames->initWithCapacity(4);
animFrames->addObject(frame1);
animFrames->addObject(frame2);
animFrames->addObject(frame3);
animFrames->addObject(frame4);
animation_test=CCAnimation::createWithSpriteFrames(animFrames, 0.1);
<del>animation_test->initWithSpriteFrames(animFrames, 0.1);</del>
<del datetime="2013-07-13T12:10:41+00:00">animation_test->initWithAnimationFrames(animFrames, 0.1, true);//後日実行するとエラーでした</del>
<del>animation_test=CCAnimation::createWithSpriteFrames(animFrames, 0.1);</del>//error
//sprite->runAction(CCRepeatForever::create(CCAnimate::create(animation)));//
[/c]

・音声
[c]
[SimpleAudioEngine sharedEngine].backgroundMusicVolume=0.3f;
[[SimpleAudioEngine sharedEngine] playBackgroundMusic:@"BGM2-hiyoko_out64k.mp3" loop:YES];
[/c]

cocos2d-x
[c]
SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(0.3);
SimpleAudioEngine::sharedEngine()->playBackgroundMusic("BGM2-hiyoko_out64k.mp3", true);
__[/c]

31画像
【送料無料】ねんどろいど マクロスF(フロンティア) シェリル・ノーム(ホビー)
在庫あり
店舗名:ハピネット・オンライン
32画像
【仮面ライダーフォーゼ】フォーゼモジュールチェンジシリーズEXFMCS04 仮面ライダーメテオ【キャラクターセール☆仮面ライダー】
在庫あり
店舗名:トイセルタウン
33画像
銀魂 フィギュア GEM シリーズ 神楽 【予約7月】 代引き不可
在庫あり
店舗名:天天ストア 楽天市場店
34画像
オーキッドシード クイーンズブレイド 美しき闘士たち アレイン フィギュア【1月予約】
在庫あり
店舗名:でじたみん 楽天市場店
35画像
ヤマトガールズコレクション 宇宙戦艦ヤマト2199 岬百合亜 (艦内服Ver.) 1/8 完成品フィギュア[メガハウス]《10月予約》
在庫あり
店舗名:あみあみ
36画像
アルター 1/8 ソードアート・オンライン 桐ヶ谷直葉 フィギュア【11月予約】
在庫あり
店舗名:でじたみん 楽天市場店
37画像
ジェルストラップコレクション うたの☆プリンスさまっ♪Shining All Star CD BOX[コトブキヤ]《08月予約》
在庫あり
店舗名:あみあみ
38画像
リネージュII ダークエルフ(通常版) 1/7 完成品フィギュア[マックスファクトリー]《09月予約》
在庫あり
店舗名:あみあみ