2015年7月15日水曜日

[Cocos2d-x]アクション終了時に処理を実行する

Cocos2d-x v3.6

auto mySprite = Sprite::create();
auto action = FadeOut::create(0.1);
mySprite->runAction(action);
// ラムダ式でコールバックを設定する
auto callback = CallFuncN::create([](Ref *sender){
  //コールバック処理をここに書く
  Node *node = (Node *)sender;
  node->removeFromParent();
});
// アクションとコールバックをシーケンスに設定する
auto seq = Sequence::create(action, callback, NULL);
mySprite->runAction(seq);

2015年7月14日火曜日

[Admob]テストIDについて

Admobは開発時ににはテスト広告が使用が推奨されている、
このテスト広告を使用するためにはtestDvicesの配列にD端末IDを追加すれば良い。
DeviecIDはAdmob固有のものでiPhone UIDなどとは別物である。
端末がiOSシュミレーター、Androidエミュレターの場合はGAD_SIMULATOR_IDを使用する。

端末IDをを知るには[GADRequest request]時に出力されるログに表示される
To get test ads on this device, call: request.testDevices = @[
@”ここに端末IDが表示される” ];

このためテスト端末を利用するときははじめの1回は本番環境として起動する必要がある。

ちょっと考えればあたりまえだが、
https://developers.google.com/mobile-ads-sdk/docs/admob/ios/targeting?hl=ja#test_ads

開発段階では、表示回数が不正にカウントされないよう、テスト広告を使用することをおすすめします。

と記載されていたので、はじめの1回が不正になるのじゃないかと考えていたため、
本番環境での起動に躊躇してしまった。
AdmobさんはGoogleIDを結構警告(とBAN)すると聞いたので

2015年7月13日月曜日

[Cocos2d-x]Actionを連続させて行う

spriteを順番にactionさせる

auto downAction = MoveBy::create(0.5, Point(0, 30));
auto upActiopn = MoveBy::create(0.5, Point(0, -30));
//Spawnは2つのアクションを制御することができる、3つ以上はSequeneにすること
auto upDownAction = Spawn::create(downAction, upActiopn, NULL);
sprite->runAction(upDownAction);

spriteを順番にactionさせ、ループさせる

auto downAction = MoveBy::create(0.5, Point(0, 30));
auto upActiopn = MoveBy::create(0.5, Point(0, -30));
//Sequenceは複数のアクションを順番に行うことができる
auto sequence = Sequence::create(downAction, upActiopn, NULL);
auto repeatForever = RepeatForever::create(sequence);
sprite->runAction(repeatForever);

2015年5月27日水曜日

[Cocos2d]Cocos2dをちょっとやってみた感想

開発環境はmac mini 2014、Core i5 2.5G、メモリー 8G
  • Cocos2d-x 3.6
    C++またはLua
    iOS、Android、Windows Phone 8に書き出し可能
    LuaならCococsが用意したEclipseベースのCode IDEが使用できる
  • Cocos2d-JS 3.6.1
    Javascript
    iOS、Android、Web(WebGL)に書き出し可能
    Cococsが用意したEclipseベースのCode IDEが使用できる
  • Code IDE v1.2
    Lua、JavaScriptでCocos2dを使用するときに使えるIDE基本的な機能は入っている
  • Cocos v2.2
    UIエディターやアニメーションエディター、プラットフォームのダウンロード機能などが含まれたCococsの補助ツール
    今のところイマイチ

複数のデバイスサイズに対応させるにはややコーディングが必要

Cocos2dには種類が大量にあるが、プラットフォームが多くリリースされた理由はこちらのサイトを見れば分かる

miyahiraブログ - cocos2dの歴史をまとめてみた。
http://blog.miyahira.me/2014/11/cocos2dcocos2d-x-cocos2d-iphone-
cocos2d.html

Cocos2d-Xを触ってみた感想

・初回ビルドに時間がかかる(Xcode C++ シミュレーターだと2回目以降は5~15秒程度)
・Xcodeが使える
・iOS+Xcodeでシミュレータの立ち上げに失敗することがある(これはNative Xcode開発でも同じか?)
・サンプルが多い特にLuaだと中華系サイトに大量にある

Cocos2d-x v3 C++ Tutorial Series
https://www.youtube.com/playlist?list=PLRtjMdoYXLf4od_bOKN3WjAPr7snPXzoe
動画数53本とかなり多いがこれを全部みれば基本が分かる
youtubeの説明のリンクからGithubのコードが見れる

Cocos2d-JSを触ってみた感想

・JavaScriptなので習得が用意
・Webだとファイルを保存するだけで実行可能で、トライ&エラー手法で短期間に色々試せる
・iOS、Androidへのビルドは非常に長い、初回の空プロジェクトでも3~5分はかかる
・v2.xとv3.xだと挙動や呼び出しが違うので注意する必要がある
・v3.xのサンプルや情報が少ない
・公式のリファレンスやガイドだけでは作りにくい

Cocos2dの別プラットフォームをやっている人ならすんなり入れると思うが、
いきなりやるにはちょっと情報が少なすぎる

参考にしたサイト

公式リファレンス
http://www.cocos2d-x.org/reference/html5-js/V3.6/index.html

公式サンプル
http://cocos2d-x.org/js-tests/
v2.xのサンプルが混ざっているので注意

Cocos2d-js(v3系)のチュートリアルまとめ
http://qiita.com/hp0me/items/55b784e9c616c52cab43

JavaScript の超便利なメソッド bind で this を制御する
http://foreignkey.jp/archives/763
.bind(this)について
JavaScriptのthisはObjective-CやJavaとは違った動きをすることがあるので
thisの扱いは覚えておいた方がいい

2015年4月20日月曜日

[iOS]iTunes Store operation failed "You are not authorized to use this service"

App Storeへアプリを販売可能にするため、XcodeからOganaizerを使用してアプリをアップロードしたところ以下のエラーが発生した。

iTunes Store operation failed
You are not authorized to use this service
(あなたはこのサービスを使用する許可が無い)

stackoverflowによると

http://stackoverflow.com/questions/28248496/you-are-not-authorised-to-use-this-service-itunes-app-upload-error

解決法:XcodeのiOS Developerのアカウントをリログする

http://stackoverflow.com/questions/28553827/itunes-store-operation-failed-you-are-not-authoried-to-use-this-service

Appleのサービスがで問題が発生しているのでアップロードできない


2つの回答があったが、どちらにも該当しなかった。
解決方法は「iTunes ConnectとiOS Developerのアカウントは同じアカウントを使用する」だった。

というのもiOS3.xのころはiTunes ConnectとiOS Developerは別々のアカウントを作る必要があったが、iOS8(Xcode6)ぐらいから別々のアカウントではアプリのアップロードができなくなったっぽい。

Application Loader 2.9.1を使用すれば別々のアカウントでもできるが
Application Loader 2.9.1の使用は推奨されてないので別の問題が発生する可能性がある
https://itunesconnect.apple.com/apploader/ApplicationLoader_2.9.1.dmg

2015年4月9日木曜日

[Titanium Mobile]Android モジュールを作成 3.5.1GA

・環境
Titanium Studio, build: 3.4.1.201410281727
Titanium SDK 3.5.1GA


手順は簡単で
・Android NDKをTitanium Studioにリンクする
・Titanium StudioにJDKのインストールする
の2つしか無い、が予想外のところでエラーが発生するのでかなり時間がかかった

  • Android NDKをTitanium Studioにリンクする
    現在Android NDKは10aまであるがTitanium Stadioではr8bが安定して動作するようだ
    Titanium Devloperのマニュアルでは10を使っているが罠かもしれない

    Android NDKのダウンロードリンク

    ダウンロード後適当なフォルダに展開し
    Titanium Studio -> Preferences -> Studio -> Platforms -> Android -> Android NDK Home
    をAndroid NDKに設定する

    プロジェクトのBuild.propertiesに
    android.ndk=/Users/[User Name]/Documents/AndroidNDK/android-ndk-r8b
    をを追加する
  • Titanium StudioにJDKのインストールする
    Help -> Check New Software
    から

    Eclipse Kepler release
    を設定し

    Programming Languages ->Java Developer Tools
    をダウンロードする
    この後再起動を求められるので再起動する
  • ビルド方法
    Project Exploerから
    android -> build.xml
    を右クリック
    Run - >Ant
    を実行

    プロジェクト名を右クリック -> Publish -> Package
    でビルドできる

    Titaniumプロジェクトにモジュールを追加した状態で
    モジュールを更新後AntとPublishをしてもTitaniumプロジェクトが反映されない場合は、tiapp.xmlからモジュールを外すか、modules -> androidフォルダ配下のモジュールを削除すると更新される場合がある。
エラー処理

BUILD FAILED
/Users/[User name]/Library/Application Support/Titanium/mobilesdk/osx/3.5.1.GA/module/android/build.xml:354: The following error occurred while executing this line:
/Users/[User name]/Library/Application Support/Titanium/mobilesdk/osx/3.5.1.GA/module/android/build.xml:356: There is discrepancy between the architectures specified in manifest and compiled binary.

決定的な解決方法が見つからなかったがTitanium Studioを再起動すると治ることもある

BUILD FAILED
/Users/[User name]/Library/Application Support/Titanium/mobilesdk/osx/3.5.1.GA/module/android/build.xml:461:
/Users/[User name]/Documents/Titanium_Studio_Workspace/modulesample/android/build/docs does not exist.

プロジェクトの
android -> Build
にdocsというフォルダを新規に作成する

java.lang.IllegalArgumentException: already added: Lcom/sample/library/libraryClass$1;
ライブラリにあるクラス名が競合している。

2015年4月2日木曜日

[Titanium Mobile]MACでTitanium Android Moduleを作成する

Titanium Studio, build: 3.1.3 の記事なので最新版では動作しないかもしれません

新しい記事はこちら
[Titanium Mobile] Android モジュールを作成 3.5.1GA
https://www.blogger.com/blogger.g?blogID=2518627692473629903#allposts

・モジュールの作成
File>New>Mobile Module Project

項目を入力

hogeProxy.javaなどを編集

・コンパイル
build.properties
android.ndk=/Users/[user name]/android-ndk-r8
ndkのパスを追加

android NDKが入ってない時は追加する
http://developer.android.com/intl/ja/tools/sdk/ndk/index.html

Android NDKを触ってみる
http://qiita.com/alingogo/items/203477c9da373ab7eacb

build.xmlを右クリック
Run>Ant
を実行

プロジェクト名を右クリック>Publish>package

Output LocationがTitaniumSDKの場合
/Users/[user name]/Library/Application Support/Titanium/modules
に配置される。

Mobile Projectは開いているプロジェクトにModuleを直接配置し、
対象のTiApp.xmlに自動で追加される

・モジュールのインポート
TiApp.xml>module>"+"ボタンで追加することができる。


※モジュールをTitaniumプロジェクトに更新するときは
TiApp.xmlから更新するプロジェクトを"-"ではずさないと更新されないらしい

2015年3月29日日曜日

[AndroidSDK]Error:Execution failed for task ':app:dexDebug'.

Android StudioでEclipseで作られたAndroidプロジェクトをインポートしたところ以下のエラーが発生した。

Error:Execution failed for task ':app:dexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: 
Process 'command '/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home/bin/java''
finished with non-zero exit value 2

このログにある
Execution failed for task ':app:dexDebug'.
というエラーの原因は複数ある

EclipseからAndroid Studioのせかえ時のgradle対応でハマったエラーまとめ
http://qiita.com/konifar/items/dbbbfd94ad103239c627

Android Studio: Gradle - build fails — Execution failed for task ':dexDebug'
http://stackoverflow.com/questions/18021901/android-studio-gradle-build-fails-execution-failed-for-task-dexdebug

今回こちらで発生したエラーは
試験用と本番用2つの*.jarのライブラリに同名のクラスがあったため発生した。
重複クラスがあるライブラリのうち1つをgradleファイルから外して解決した

このエラーが発生した時はライブラリを見なおしてみると良い


dependencies {
//    compile files('libs/samplelib_testing.jar')
compile files('libs/samplelib.jar')
}

2015年3月28日土曜日

[AndroidSDK]ListViewで区切り線を非表示にする

ListViewに
android:divider="@null"
を追加するだけ
android:divider="#ffffff"
で区切り線の色を変えることができる。

区切り線の高さを変更するときは
android:dividerHeight="1dp"


を追加する

2015年3月17日火曜日

[AndroidSDK]用意した配列を読み込む

res -> values に arrays.xmlを作成し 配列を作成する

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="sample">
        <item>value1</item>
        <item>value2</item>
        <item>value3</item>
    </string-array>
</resources>

呼び出すときは

String[] stringArray = (String[]) getResources().getStringArray(R.array.sample);

2015年3月8日日曜日

[AndroidSDK]Android Studioでコード補完が無効になった

Android Studio1.1でコード補完(macではControl+Space)が反応しなくなったことがある。

2つ以上のプロジェクトを開くとコード補完がおかしくなる、っぽい
コーディングするときは1つのプロジェクトにしよう。

バージョンアップで修正されることを祈ろう

2015年2月28日土曜日

[Unity]uGUIのButtonを押したあとハイライトが残ってしまう問題

Button(Script)のNavigarion -> Automatic -> Noneにする。


このNavigarionという機能はボタンなどのUIを使用した時にどういった動作するか決めるものらしい。

2015年2月26日木曜日

[AndroidSDK]Dependency Project:application:unspecified on project app resolves to an APK archive which is not supported as a compilation dependency.

AndroidStudioで以下のエラーが発生した
Warning:
Dependency Project:application:unspecified on project app resolves to an APK archive which is not supported as a compilation dependency. 
File:Users/UserName/AndroidStudioProjects/project/application/build/outputs/apk/application-release-unsigned.apk

プロジェクトの依存関係がおかしい、らしく原因は
apply plugin: 'com.android.application'
build.graleで保持しているアプリケーションが2つあったので
1つを
apply plugin: 'com.android.library'
にしてインポートしたところ解消された。

ライブラリにしたモジュールはbuild.graleからapplicationIdを削除する必要がある。

Android Studioでは
プロジェクト -> アプリケーション
                   -> ライブラリ
                   -> モジュール
といった関係でプロジェクト内には3種類のリソースがあるようだ

2015年2月25日水曜日

[AndroidSDK]Android Studio for macでオートインポートが動作しない

macでAuto importは
Control + Option + o
となっているが動作がうまくいっていなかったが
設定が足りなかった。

Android Studio -> Preferences -> Editor ->Auto Import > Insert imports on paste
-> All
に設定、さらに
Add unambigious imports on the fly
にチェックをする必要がある。

stackoverflow
What is the shortcut to Auto import all in Android Studio?
http://stackoverflow.com/questions/16615038/what-is-the-shortcut-to-auto-import-all-in-android-studio

2015年2月19日木曜日

[AndroidSDK]No resource found that matches the given name 'Theme.AppCompat.Light.DarkActionBar'

AndroidSDK+Eclipseでプロジェクトを新規作成時に以下のエラーが発生した
プロジェクトはTarget SDKが4.4 Min SDKが2.2に設定されていた

error: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light.DarkActionBar'.
styles.xml /ProjectName/res/values-v14 line 8 Android AAPT Problem

サポートライブラリが足りてない、
ということでインポートするのだが、やり方がちょっと手間だ
EclipsからFile -> import -> Android - Exsting Android Code in Workspace

"android-sdk\extras\android\support\v7\appcompat"
を選択する

Project -> properties -> Android
を開き
先ほどのインポートしたファイルを選択すると、足りていないファイルがインポートされる

"android-sdk\extras\android\support\v7\"
をインポートすると、v7のライブラリをすべてインポートできる

2015年2月18日水曜日

[AndroidSDK]Gradle DSL method not found: 'compile()'

Android Studioで追加されたBuild.gradleでGithubにあるモジュールをしようと
dependenciesを追加したところ以下のエラーが発生した。
Gradle DSL method not found: 'compile()'

結果からと言うとprojectのbuild.gradleではなくappのbuild.gradleにdependenciesを追加すると良い

stackoverflow
Android gradle build Error:(9, 0) Gradle DSL method not found: 'compile()'.
http://stackoverflow.com/questions/26851230/android-gradle-build-error9-0-gradle-dsl-method-not-found-compile

2015年2月17日火曜日

[iOS]main.mでEXC_BAD_ACCESSエラー

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
でEXC_BAD_ACCESSが発生した時はデバッグモードのゾンビオブジェクトを見たり
エラー時にログを発生される方法がある。

Zero4Racer PRO Developer's Blog
iOS 開発で、EXC_BAD_ACCESS とさよならするための6つのルール
http://www.zero4racer.com/blog/88

DJやったり、IPhoneアプリ開発やったり、、、
【iPhoneアプリ】EXC_BAD_ACCESSを解決する
http://dj32mitsu.blog.fc2.com/blog-entry-21.html


しかし今回コーディングをしているうちにどうしても解消できないエラーが発生した。
エラー内容はMain.mでのEXC_BAD_ACCESSだが、どうしても解消できない。
コードを1つ1つ検証してみた結果
main.m後に呼び出されるAppDelegate.mで呼び出されるはずの関数をコメントアウトしていた。
というのが原因だった。

間接的な原因はAppDelegateをいろいろと変更しているうちにおかしなクラスになってしまったようだ。
AppDelegateで行う処理はAppDelegateでないとできない処理だけにしてこう。

2015年2月3日火曜日

[iOS]setNavigationBarHiddenで座標frameがずれる

iOS7以降setNavigationBarHiddenを呼び出すとViewControllerのSubViewsが UINavigationbarが消えた分y座標が変更される(-44.0移動する) 自動で変更したくない時は
self.automaticallyAdjustsScrollViewInsets = NO;
を使用する

2015年2月2日月曜日

[iOS]iOS7以降のStatusbar、Navigationbar、Toolbarのメモ

//ProjectAppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    float version = [[[UIDevice currentDevice] systemVersion] floatValue];
    if (version >= 8.0) {
        //iOS8でtoolbar naigationbarの透過をオフにする
        //iOS7ではsetTranslucentでBOOLを受け付けないのでクラッシュする
        [[UINavigationBar appearance] setTranslucent:NO];
        [[UIToolbar appearance] setTranslucent:NO];
    }
    return YES;
}

//ViewController
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
   
    isHidingStatusBar = YES;
    //iOS7 ステータスバーの表示/非表示切り替え
    //navigationBarHidden toolbarHiddenを呼び出した時にも呼ばれる
    [self setNeedsStatusBarAppearanceUpdate];
    //iOS7
    self.navigationController.navigationBarHidden = YES;
    self.navigationController.toolbarHidden = YES;

    [self.navigationController.navigationBar setBarTintColor:[UIColor blackColor]];
    [self.navigationController.navigationBar setTintColor:[UIColor whiteColor]];
    [self.navigationController.navigationBar setTranslucent:YES];
    [self.navigationController setNavigationBarHidden:NO];
    
    [self.navigationController.toolbar setBarTintColor:[UIColor blackColor]];
    [self.navigationController.toolbar setTintColor:[UIColor whiteColor]];
    [self.navigationController.toolbar setTranslucent:YES];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    //[[[UIApplication sharedApplication] keyWindow] tintColor]は変更がない限りデフォルトカラー
    [self.navigationController.navigationBar setBarTintColor:[[[UIApplication sharedApplication] keyWindow] tintColor]];
    [self.navigationController.navigationBar setTintColor:[[[UIApplication sharedApplication] keyWindow] tintColor]];
    
    [self.navigationController.toolbar setBarTintColor:[[[UIApplication sharedApplication] keyWindow] tintColor]];
    [self.navigationController.toolbar setTintColor:[[[UIApplication sharedApplication] keyWindow] tintColor]];
}


//setNeedsStatusBarAppearanceUpdateで呼び出される
- (BOOL)prefersStatusBarHidden {
    //ステータスバーの表示/非表示をBoolで指定
    return isHidingStatusBar;
}

//setNeedsStatusBarAppearanceUpdateで呼び出される
- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation
{
    //アニメーションの設定
    return UIStatusBarAnimationFade;
}

2015年1月20日火曜日

[iOS]iOS7で文字列のサイズを求める

//iOS6まで、非推奨
CGSize size = [textLabel.text sizeWithFont:[UIFont systemFontOfSize:fontSize]
                         constrainedToSize:textLabel.size
                             lineBreakMode:UILineBreakModeWordWrap];
//iOS7
CGSize size = [textLabel.text boundingRectWithSize:textLabel.size
                                           options:NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin
                                        attributes:@{NSFontAttributeName:textLabel.font} context:nil].size;

2015年1月15日木曜日

[iOS]iOS7以降のModalView呼び出しと解放

float version = [[[UIDevice currentDevice] systemVersion] floatValue];
if (version >= 7.0)  {
    //iOS7以降
    //呼び出し
    [self presentViewController:vc animated:YES completion:nil];
    //解放
    [self dismissViewControllerAnimated:YES completion:nil];
} else {
    //iOS6以前
    //呼び出し
    [self presentViewController:vc animated:YES];
    //解放
    [self.parentViewController dismissModalViewControllerAnimated:YES];
}

2015年1月14日水曜日

[iOS]iOSのバージョンを調べる

float version = [[[UIDevice currentDevice] systemVersion] floatValue];
    
if (version >= 8.0)  {
        
} else {
        
}