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

UnityでSQLiteの使い方 リンク

UnityでSQLiteの使い方

UnityにSQLiteを導入する
https://qiita.com/CreateVector3/items/b15dc570faed517360d4

UnityでSQLiteを扱う方法
https://qiita.com/hiroyuki7/items/5335e391c9ed397aee50

UnityでSQLite!SQLiteUnityKitに潜む4つの問題点と対応方法
https://fantastic-works.com/archives/406#i-3

UnityのSQLiteUnityKitのマルチバイト問題 (。・ω・。)
https://anz-note.tumblr.com/post/91559515821/unity%E3%81%AEsqliteunitykit%E3%81%AE%E3%83%9E%E3%83%AB%E3%83%81%E3%83%90%E3%82%A4%E3%83%88%E5%95%8F%E9%A1%8C-%CF%89

unity ライセンスエラー、手動で登録した

unity2019をWindows10にインストールした。無料版のUnityをインストールした。
UnityHubをインストールしてUnityをインストールしてUnityHubから新規作成をするとUnityが起動せず
ライセンスエラー、手動で登録した
続きを読む

安価スマートフォン用三脚、TRIPOD、JT-3110A購入レビュー感想|アイフォンアプリとアンドロイドアプリでどちらが広告収入が高いか、答えはアイフォンでした|ひよこレスキューFor android版を公開、グーグルプレイにアップ

商品レビュ、感想

スマートフォン用三脚、TRIPOD、JT-3110A購入レビュー感想

ユーチューバーの人みたいに、自分撮りして説明できないのですが、今回購入したスマートフォン用三脚、TRIPOD、JT-3110Aの購入レビューです。
小型三脚に、スマートフォンを固定するためのホルダーがついています。
このホルダーは、スマートフォンを挟む部分を延長方向に引っ張って伸ばして、その間にスマートフォンを挟んで固定します。固定はバネの作用で固定されます。
アイフォン4,4s,5位は固定できると思いますが、ネクサス7は挟めません。

画像 脚を伸ばした状態
写真 2014-01-09 10 30 46
続きを読む

7 今日のエラーAndroidアプリ開発、andEngine GLES2 Anchor Center,box2d |manifest.xmlの記述ミスでintentでエラー

前回のエラー対処Androidアプリ開発、今日のエラーまとめ(1)ー(6)分、2003年9月22日〜11月7日

7 今日のエラーAndroidアプリ開発

アンドロイドアプリを作っていて、何回か同じようなプロジェクトを作成していると同じような設定をしなければならない箇所がでてきます。設定したと思っていたら、設定していなくてデバッガーに何が悪いのかが表示されないことが多々あり、そのとき、5分、10分とエラーと格闘します。すぐに分かるものならばよいのですが、エラーの対処に戸惑って、1日2日とムダにすることがあります。それを避けるためにエラー対処記録を取るようにしました。
続きを読む

海外ニュース見出し、カリフォルニア州、クリスマスの夜、結婚式に使う色について喧嘩し婚約者を花嫁が刺す|MacOSX,Android用プログラム、ゲーム用シミュレーション用API LiquidFunの公開、その他Unity、カテゴリ

海外のニュース

カリフォルニア州、クリスマスの夜、結婚式に使う色について喧嘩し婚約者を花嫁が刺す

Wedding Color Scheme Argument Leads to SC Stabbing

クリスマスの夜、カリフォルニア州南部で、結婚式に使う色について喧嘩し、婚約者を女性が刺したと発表しました。
水曜日の午後8時半頃、クリスタル・ジェームスは婚約者と結婚式についての相談で議論となり、彼が自宅に帰ろうとしたとき彼に襲いかかりました。
彼は、上半身に怪我を負いましたが、命に別状はありません。
ジェームズは、家庭内暴力等の罪により逮捕され、保釈金は1万ドルです。
続きを読む

C2A(3)cocos2d for iPhoneからandEngine for androidへの移植(たぶん)過程メモ,サイトリンクメモ、アンドロイドのローカライズ、アイコンの自動リサイズサイト

(3)cocos2d for iPhoneからandEngine for androidへの移植(たぶん)過程メモ,サイトリンクメモ、アンドロイドのローカライズ、アイコンの自動リサイズサイト

(2)の過程メモ、タグ、タッチイベント
(1)の過程メモ、box2dに関する

今回の記録は比較というよりは、情報先サイトのリンクのメモになります。
ここしばらく、プログラムをする気分でなくなっていて移植過程メモを記載する情報はありません。
 現在、BOX2Dのアプリがもう少し完成なのです。制限時間とメニューを入れれば終わりです。もうちょっとやる気を出して、完成、GooglePlayへのアップを目指したいと思います。
 

registerEntityModifier で、処理が終わったことを検知して、次の処理をするonModifierFinished

参考リンク

android – registerEntityModifier on Finish – Stack Overflow

Moving Camera smoothly (from point A to B) – AndEngine Tutorials

AndEngine Entity Modifiers – AndEngine Tutorials

アンドロイドアプリのローカライズ

続きを読む

googleplay アプリ登録手順|アンドロイドアプリ特実意商法文検索Liteアプリをアップ

googleplay アプリ登録手順

グーグルプレイにアップロードした時に間違ってしまった手順最初のアンドロイドアプリのときの記事

2013年11月29日、アンドロイドアプリ 特実意商法文検索Liteアプリをアップました。
2本目のアンドロイドアプリを登録しました。なお前回作成したアプリの限定版なので、単にいらない部分を削っただけのアプリです。
日本語しかいないのですが、全世界向けに登録しておきました。

アプリ登録手順を簡単にメモっておきます。

<googleplay アプリ登録前の準備>

キャプチャ2枚
アイコン各種用意:アイコンの自動リサイズサイト(iPhoneアイフォン、androidアンドロイド)
http://makeappicon.com/
このサイトを利用して、アンドロイドのアイコンのリサイズで使用しました。
 一つのファイル1024サイズ推奨で、複数のアイコンをリサイズしてくれます。アイフォン、アンドロイド用にリサイズしてくれます。
その後、手動で各ディレクトリにペーストしました。

APKファイルの出力(eclipse)、APKは、”Android Tools” > “Export Signed Application Package…を実行して、必要な情報を入力します。個別プロジェクトのフォルダに保存しました。

掲載する文章4000文字以内、80文字以内(プロモーションの場合は別途画像を用意しないと登録されません)

<googleplay アプリ登録>

ログインURL
play.google.com/apps/publish

アプリ名を入力
APKファイルのアップロード
各種入力

その後

すぐには公開されず、約2時間後、午後7時46分ごろに公開されました。


本ずわいかにしゃぶ 1.0kg×2セット株式会社キタウロコ荒木商店3980円、5980円

たらば蟹足 1.5kg越前かに問屋ますよね、価格4,777円 (税込) 送料込

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

クリスマスツリー

Androidアプリ開発、今日のエラーまとめ(1)ー(6)分、2013年9月22日〜11月7日

Androidアプリ開発、今日のエラーまとめ(1)ー(6)分、2013年9月22日〜11月7日までのエラー記事

過去記事のまとめになります。
一箇所にまとめてみました。

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

http://enjoygoodtown.com/blog/4736.html

(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
続きを読む

(2)cocos2d for iPhoneからandEngine for androidへの移植(たぶん)過程メモ,タグ、タッチイベント

(2)cocos2d for iPhoneからandEngine for androidへの移植(たぶん)過程メモ,タグ、タッチイベント

前回の(1)cocos2d for iPhoneからandEngine for android移植過程メモはこちら

アンドエンジンよりは主に、box2dのコードを調べていますが、アンドロイドのBOX2Dに限定したサイトは少なく、FLASHだったり、C#, cocos2dだったりしました。box2dが活用された時期は数年前になるようで、その間にサイトが無くなった可能性もあります。

プログラム言語が異なるので、検索したサイトの記事が、AndroidとBox2dの参考にならないかと残念に思っていたら、Flashのコードをよくよく見ると、box2dがC++で記載されているせいか、若干の記載が異なるだけで、ほぼ似たようなコードの記載になっているようでした。他のプログラム言語で書かれているBOX2Dの記載でも、JAVAのアンドロイドにおいても参考になりました。

では、以下より、移植のための比較メモを始めます。途中cocos2dに関する比較のためのコードの記載がない箇所があります。

cocos2dでもAndEngineでもタグを設定できます。これで、スプライトの種別を判別できます。
これによって、判定処理により、あるタグは無視して、あるタグだけタップした時に何か処理を与えることができます。

Andengineチュートリアル、
AndEngine Simple Android Game Tutorial

cocos2dの時と同じ内容のチュートリアルでとても参考になります。

タグの設定

iPhone

Android
スプライトにタグを設定できます。intです。implementクラスに記載します。
Sprite sprite;
sprite.setTag(1);

final DEFAULT_TAG=1;
sprite.getTag()==DEFAULT_TAG;

getChildIndex(i).getTag()として取得できます。
getChildCount()で総数を取得し、For でチェックします。
以下は、参考のコードです。実行チェックしてません、
[c]
for(int i; i<getChildCount();i++){
if( getChildIndex(i).getTag() == DEFAULT_TAG){
//do something
}
}
[/c]

Zオーダーでスプライトの重なりについては、

cocos2dは
[self addChild:sprite z:1];

AndEngineは
Zindexにおいて
sprite.setZIndex(1);
のようにします。

タッチイベントの取得

AndEngineのタッチイベントの記載は複数の方法あるようです。
画面全体に対するイベントと、特定エリアに限定したタッチイベントがあります。
メソッドを記述するだけ、宣言をするだけでは機能しない(設定不足となる)ものもあります。
インプリメントの記述漏れについては、エクリプスがエラーを表示するので、その時に宣言を追加すれば良いと思います。

AndEngine
onAreaTouched(),IOnAreaTouchListener

設定
setOnAreaTouchListener(MainScene.this);//dont forget

定義
boolean onAreaTouched

登録
registerTouchArea(sprite);

onAreaTouchedを使って、タップされたスプライトなどにアクションを与えたいとき、
設定し定義してもどのスライトに対して、そのイベントを対応させるのかは、登録しないとコンパイルエラーや実行時のエラーがなくても正常に動作しません。
タッチ後のアクションを与えるのかがわからないからです。

これはonSceneTouchEvent(Scene, TouchEvent)と異なります。
onSceneTouchEventは、
設定
setOnSceneTouchListener(MainScene.this);
して、定義を書けば動きます。
この点が異なります。

box2d衝突判定ContactListenerを使用

ContactListenerはobjective-c、cocos2dにもありません。box2d固有のものです。

cocos2dのbox2dについてはまだ、cocos2d with box2dのプログラムを進めていないので明確に記載できません。
とりえず、AndEngineの衝突判定は、ContactListenerを使用します。
忘れるといけないので記載します。
宣言についての説明は省略し、実際は他のところに記載しています。
なお、contactListenerにsetTransformを記述しても、BODYは移動しません。(実はここが重要だったりします。)

そのために、registerUpdateHandlerタイマーを利用して、contactListenerにBODYが接触したかのフラグ等を入れてチェックをして、接触したら、移動させるように別途用意する必要があります。(プログラムがエラーにならないので、なぜか悩みましたが、海外の掲示板に書かれていました。)
なお、色を変更するくらいは、実行出来ました。

参考
body.setTransform does not work inside contact listener (andEngine and box2d)

[c]
private ContactListener createContactListener()
{
ContactListener contactListener = new ContactListener()
{
@Override
public void beginContact(Contact contact)
{
final Fixture x1 = contact.getFixtureA();
final Fixture x2 = contact.getFixtureB();
if (x1.getBody().getUserData()!=null && x2.getBody().getUserData()!=null ){
if ( x1.getBody().getUserData().equals("hiyoko") && x2.getBody().getUserData().equals("another") ||
x1.getBody().getUserData().equals("another") && x2.getBody().getUserData().equals("hiyoko")
){
Log.d("contact", "contact_hiyoko");
woodRectangle.setColor(1.0f, 0.0f, 0.0f);
}

}
}

@Override
public void endContact(Contact contact)
{
final Fixture x1 = contact.getFixtureA();
final Fixture x2 = contact.getFixtureB();
if (x1.getBody().getUserData()!=null && x2.getBody().getUserData()!=null ){
if ( x1.getBody().getUserData().equals("hiyoko") && x2.getBody().getUserData().equals("another")||
x1.getBody().getUserData().equals("another") && x2.getBody().getUserData().equals("hiyoko")
){
Log.d("contact_end", "end_hiyoko");

woodRectangle.setColor(0.0f, 1.0f, 0.0f);
}

}

}

@Override
public void preSolve(Contact contact, Manifold oldManifold) {
// TODO Auto-generated method stub

}

@Override
public void postSolve(Contact contact, ContactImpulse impulse) {
// TODO Auto-generated method stub

}
};
return contactListener;
}
[/c]

(6)A物体とB物体が衝突しないように設定するのは、FixtureDefでmaskBitの設定をする

以下の例は、
BOXはBOXとWALLで衝突し、CIRCLEはCIRCLEとWALLに衝突します。
BOXとCIRCLEは衝突しません。
(short)0はグループのようです。グループに分けて、衝突の分類分けができるみたいです。

なので、登録した物同士が衝突し、登録してないものは衝突しない。透けていくということです。

PhysicsCollisionFilterExample.javaより

[c]
/* The categories. */
public static final short CATEGORYBIT_WALL = 1;
public static final short CATEGORYBIT_BOX = 2;
public static final short CATEGORYBIT_CIRCLE = 4;

/* And what should collide with what. */
public static final short MASKBITS_WALL = CATEGORYBIT_WALL + CATEGORYBIT_BOX + CATEGORYBIT_CIRCLE;
public static final short MASKBITS_BOX = CATEGORYBIT_WALL + CATEGORYBIT_BOX; // Missing: CATEGORYBIT_CIRCLE
public static final short MASKBITS_CIRCLE = CATEGORYBIT_WALL + CATEGORYBIT_CIRCLE; // Missing: CATEGORYBIT_BOX

public static final FixtureDef WALL_FIXTURE_DEF = PhysicsFactory.createFixtureDef(0, 0.5f, 0.5f, false, CATEGORYBIT_WALL, MASKBITS_WALL, (short)0);
public static final FixtureDef BOX_FIXTURE_DEF = PhysicsFactory.createFixtureDef(1, 0.5f, 0.5f, false, CATEGORYBIT_BOX, MASKBITS_BOX, (short)0);
public static final FixtureDef CIRCLE_FIXTURE_DEF = PhysicsFactory.createFixtureDef(1, 0.5f, 0.5f, false, CATEGORYBIT_CIRCLE, MASKBITS_CIRCLE, (short)0);
[/c]

(7)乱数

1.Random r = new Random();
//乱数の取得
int i = r.nextInt(180); //0~180の乱数を取得する

2.int ran = (int)(Math.random()*100)+90;//0-0.9に100倍(90)して+90とする
Math.random()は0以上1未満なので、それに該当する数をかけて、10とか100にします。
この例では、0から99にして90を加算しています。

3.ミリ秒を使用
Calendar cal = Calendar.getInstance(TimeZone.getDefault());
cal.setTime(new Date());
int ms = cal.get(Calendar.MILLISECOND); // 0..999
int ran = (int)(Math.random()*100)+ms/10;//msについては個別に対応することとしてとりあえず10分の1として、深い意味はありません。

効果音、BGM

音の形式については、oggが推奨されているようですが、wav、mp3も再生可能です。
問題なく、再生できました。なお、ファイル名が違っていたり、ファイルが無いと強制的に終了します。エラーが発生してもちょっとみにはどこに問題があるかわからず、ログを追っかけてわかるので、ファイルIO関連は、ログを出力するようにするか、強制終了しないように回避策を入れたほうが良いと思います。(私は余裕が無いので、ログくらいしか出しません)

getBaseActivity()は、個別に作成したactivityです。
MainActivity.javaのonCreateEngineOptions()記載します。
EngineOptions eo=new EngineOptions(true, ScreenOrientation.PORTRAIT_FIXED,
new RatioResolutionPolicy(DEFAULT_CAMERA_WIDTH, DEFAULT_CAMERA_HEIGHT), camera);
eo.getAudioOptions().setNeedsMusic(true);
eo.getAudioOptions().setNeedsSound(true);

[c]
SoundFactory.setAssetBasePath("mfx/");
MusicFactory.setAssetBasePath("mfx/");

private Sound badSound;
private Music bgmMusic;
badSound=SoundFactory.createSoundFromAsset(getBaseActivity().getSoundManager(), getBaseActivity(), "se_bad.m4a");
bgmMusic=MusicFactory.createMusicFromAsset(getBaseActivity().getMusicManager(), getBaseActivity(), "bgm_play_short.mp3");
bgmMusic.setLooping(true);
[/c]
あとは、それぞれplay()です。

6 今日のエラー、 andEngineをGLES2 Anchor Centerにして、box2dをインポートして、実行するとエラー

6 今日のエラー、 andEngineをGLES2 Anchor Centerにして、box2dをインポートして、実行するとエラー

今日のエラー前回、google play 関連のエラー,Box2d のアプリがエミュレータでエラー、APIのバージョンを上げる|admobのライブラリの追加忘れ|onAreaTouched(),IOnAreaTouchListenerが動かない|box2d衝突判定ContactListener が正常に動かない|プロジェクト名、パッケイージ名の変更したいときは

(1)andEngineをGLES2 Anchor Centerにして、box2dをインポートして、実行するとエラー

andengineで作成したプロジェクトをインポートし、GLES2 Anchor Centerのandengineに切り替えようとしました。
つまり、andengineのライブラリのプロジェクトをインポートし、このライブラリを削除して、代わりにGLES2 Anchor Centerのandengineを選択し、box2dを追加しました。
するとbox2dにandengineがくっついてしまって、機能上2つのandengineが読み込まれた形になります。
この状態で実行するとエラーになりました。

Unable to execute dex: Multiple dex files define Lorg/andengine/AndEngine;
com.android.dx.util.DexException: Multiple dex files define Lorg/andengine/AndEngine;

どうやら、GLES2 Anchor Center.jarとbox2dをインポートするとandEngine.jarも読みこ込まれてしまって、android Anchor Center.jarとandroid.jarでほぼ同じものを見ている状態になりました。
実は、box2dをインポートするとandEngine.jar自動で読み込まれるので、box2dを手動のコピペでlibにペーストしてみました。

するとエラーは消えました。困ったときは、手動がよさそうです。
次に、box2dに問題がないかを確認します。

>結果として、anchor centerに対応してAndEngineとBox2dをそれぞれダウンロードして、この2つを利用することになりました。

(2)activety_main.xml正常にレイアウトが表示されない(未解決)

java.lang.NullPointerException
という警告が表示される。ただし、プログラムは正常に表示されます。
なお、ADMOBは正常に表示されます。

対応:よくわかりません。
うだうだ考えて先に進まないよりは、とりあえず、ノーマルなandEngineのみのひな形を用いいて再度プロジェクトを作成することにします。そして、Admob等の部分を追加して、エミュレータでテスト用の画面が表示できるところまでを確認してみます。

その後、box2dとGLES2 Anchor Centerのandengineに切り替えていきたいと思います。

つまり、
andengineでSpriteとADMOBの確認後
から
box2dとGLES2 Anchor Centerのandengineに切り替え
ということになります。

1.andengineでSpriteとADMOBの確認

書籍を参考にしてひな形をしたプロジェクトPJをインポートして、各種設定をする
ADMOBをコピペ
実行確認OK

2.andengineのライブラリを一旦リムーブして、GLES2 Anchor Centerのandengineを追加(座標系の変更)、結論はこのままでは失敗

GLES2 Anchor Centerのandengineの追加はプロパティから行った
実行後、スプライト画像が表示されるが、画像の中心が左下に移動している。これは、andengineのサンプルで、(0,0)のフル画面として表示させるためのものなので、本来であれば、画面いっぱいに画像が表示されるはず。
それが、左下に移動して4分の1しか表示されていない。

つまり、ライブラリを変えたことで、左下原点で、画像中心になったということか?
そうです。左下原点であり、画像中心座標に変わりました。
これで、coco2dと同じ座標系になりました。
ここで、ちょっとまた、こんがらがってきました。今まで、andengineは、左上原点、画像も左上基準でした。また、box2dも時計回りでポリゴンを作成していました。
今回のGLES2 Anchor Centerのandengineにより、cocos2dと同じようになります。

ちなみに、アンドエンジンのサンプルは標準のアンドエンジンを用いて作成されているので、左上原点が基準です。
ここらへんがちょっとややこしくなってきます。

andengine:左上原点、画像左上基準、下がY軸正(android,iOSと同じ)
andengine GLES2 Anchor Center:左下原点、画像中心基準、上がY軸正(cocos2dと同じ)

(3)(2)の続き、GLES2 Anchor Centerのandengineにbox2dのライブラリをインポートする方法

box2dのプロジェクトは、標準のAndEngineを利用しているので、そのままインポートをすると、標準のAndEngineを取り込んでしまいます。
そこで、box2dにGLES2 Anchor Centerのandengineを変更してから、プロジェクトに入れます。
このとき、box2dのインポートをしたプロジェクトはエラーが表示されますがこのままにしておきます。
もとのAndEngineに戻せばエラーは消えますが、今度は現在作成中のPJが、andEngineとGLES2 Anchor Centerのandengineの2つのライブラリになってしまい、エラーとなります。

(3.2) (3)の更に続き、The type org.andengine.entity.shape.IAreaShape cannot be resolved.

結論は、
ワークスペースで、GLES2 Anchor Centerのandengineと標準のandengineを分けることにしました。
これでやれば、ごちゃごちゃしなくなりそうです。すでに、ごちゃごちゃしてます。
ワークスペースを別に作ることで、いままでのプロジェクトのライブラリが重複することがなくなるそうです。

andengineのbox2dを一旦、ワークスペースから削除してから
新しくワークスペースを作成し、
GLES2 Anchor Centerのandengineと anchourcenterのbox2dをインポートします。

ただし、ワークスペースの切り替えが、エクリプスの再起動になるので、ウィンドウの切り替えのように瞬間的にはできません。こういう部分は不便です。

現在のワークスペースの構成

・andengine, 通常のアンドロイドアプリ作成のためのワークスペース
・GLES2 Anchor Centerのandengineとanchourcenterのbox2dのためのワークスペース
・他
という感じでワークスペースを構成しています。