2014年8月8日金曜日

UnityのiTweenで連続的にアニメーションさせる

UnityでGameObjectをアニメーションさせたい場合、iTweenというライブラリを使うと便利です。
http://itween.pixelplacement.com/index.php

このライブラリは以下のように簡潔な記述でアニメーションを実行することができます。

iTween.MoveTo(gameOject, iTween.Hash("x", 10, "time", 1f);

ただし、あるアニメーションが終わったあとに別のアニメーションを連続して実行したい場合、コールバックメソッドを定義する必要があり面倒です。
//横→縦と移動する
void Start()
{
 iTween.MoveTo(gameOject, iTween.Hash("x", 10,
                                       "time", 1f, 
                                       "oncomplete", "OnComplete", 
                                       "oncompletetarget", gameObject);
}

void onComplete
{
 iTween.MoveTo(gameOject, iTween.Hash("y", 10, "time", 1f);
}


そこでこれをサポートするヘルパークラスを作成してみました。

iTweenExtention

以下のように使用できます。

iTweenExtention.SerialPlay(
 gameOject
 ,(iTweenAction)iTween.MoveTo, iTween.Hash("x", 10, "time", 1f)
 ,(iTweenAction)iTween.MoveTo, iTween.Hash("y", 10, "time", 1f)
);

記述が冗長だったりパラメータが不正な場合はランタイムエラーになったりする等の欠点があるので余裕があれば改善してきたいところです。

2014年7月14日月曜日

iOS8で追加されるUIVisualEffectViewの使い方

こんにちは。京都ではそろそろ祇園祭ですが、そもそも祇園祭にそこまで思い出も思い入れもないので書き出しを完全に失敗したmatsumiです。

今回のお題は、7月11日現在beta3公開中のiOS8で追加されている「UIVisualEffectView」というクラスの書き方についてです。

【※注意※】このエントリーはiOS8 beta3での仕様を基に書いています。今後のbeta版や正式版にて改変がかかる可能性がありますので、その点にご注意の上お読みください。

さて、この「UIVisualEffectView」ってクラスですが何をする物かと言うと、あるUIViewに対して磨りガラスのような効果をかぶせる事ができます。

iOSで磨りガラスっぽい画面というと、まず思い出されるのが、そう、通知センターとコントロールセンターですね。

このクラスを使えば、それらの背景で使っているような効果を簡単に実現できる訳です。
これは便利。

2014年6月26日木曜日

CIFilterのちょっと気の利いた書き方

こんにちは。京都に生まれ育ってン十年。京都の暑さに身体が全く順応せず、毎年クールビズのシーズン間で夏バテしているmatsumiです。

今回のお題は「CIFilterのちょっと気の利いた書き方」です。

CIFilterとはCore Imageで用意されている画像にフィルターをかけるクラスです。
要は、写真系のアプリとかで使われている加工用のいい感じのフィルターを作れますよーってクラスです。
詳しくはAppleのクラスリファレンスあたりをお読みください。

このCIFilter、ちょっと書き方にくせがあって、その辺まとめてる記事があまり無かった気がしたので書いてみます。


まずは、試しにCIFilterで用意してあるフィルターの一種CIVignetteを使った結果です。
元画像
フィルター適用

ビネット効果(トンネルエフェクト)と呼ばれるもので、トイカメラ風の周囲が暗い画像を作る事ができます。

2014年6月5日木曜日

Cocos2dx v3.0 で plugin-x / AdMob を利用する


Cocos2d-xフレームワークに入っているplugin-xのAdMobプラグインを利用してiOS/Android両方に対して広告掲載を行います。

試した環境は以下のようになっています。
最新だとAdMobのiOS側で64bit対応が入っていたので、今回は最新のものを使っています。

2014年5月31日土曜日

facebook/popを使ったアニメーション

video

popは2014/4/28 にFacebookがOSSとして公開したアニメーションのライブラリです。
比較的簡単に多彩なアニメーションが実装出来るということで、試しに使ってみました。

2014年5月11日日曜日

Cocos2d-xでiOS向けアプリをSuspend/Resumeした時に音声再生されなくなる問題の解決方法

iOSでのみ、サスペンドしたあとにレジュームする事でアプリ復帰後、たまに音声再生されなくなる不具合が発生します。4, 5回に1回くらいの割合なので、何度か試してみてください。
なお、Cococs2d-x 3.0.0 final にて確認しましたが、フォーラムを読む限りだと問題自体は以前から発生していたようですね。

2014年4月25日金曜日

Cocos2d-x v3.0.0 の環境設定

ようやくv3.0.0の正式版がリリースされた事ですし、Cocos2d-x v3.0.0 で環境設定して iOS/Android向けにビルドするところまでのエントリーを書きます。
※Mac OS X でのセットアップ前提で書いています。

2014年4月12日土曜日

App Storeで「子ども向け」アプリを配信する方法


子ども向けアプリとして「たまぴんびゅーん」をリリース出来ましたので、子ども向けアプリとして配信するには何をする必要があるかを書きます。

2014年4月7日月曜日

iOSアプリを公開せず2回審査に通し、3回目で公開したい場合の申請フロー

仕事だといろいろ紆余曲折する事もあり、App Store公開までに以下のリリース手順を踏まざるを得ない状況になることが稀にあるかと思います。今回はその手順の説明を行います。
  • v1.0.0:未公開
  • v1.0.1:未公開
  • v1.0.2:初公開

2014年4月4日金曜日

UIViewにCAGradientLayerを使ってグラデーションをかける

はじめまして。もうすぐ1年ですがピッチピチの新人と言い張るmatsumi(中年)です!

今回のお題は、iOS7がフラットデザイン風になったことで、
すっかり肩身の狭くなった感があるグラデーションについてです。

肩身が狭くなったとは言え、デザイン上なにかと必要になるグラデーションなのですが、
CAGradientLayer」を使用すればUIViewに簡単にグラデーションをかける事ができます。

手順は、
1.「CGGradientLayer」を作る
2.サイズ、色、開始位置と終了位置を指定
3.UIViewのlayerにグラデーションのレイヤーを追加
これだけ。

2014年4月2日水曜日

Cocos2dxでターゲットをiOS7以上にした時に発生するエラーの解決方法

メインターゲット プロジェクトの Deployment Target7.0 以上にした際、ビルド時に以下のようなエラーが沢山発生します。
※Cocos2d-x 2.2.2 での内容となります。

2014年3月31日月曜日

UISegmentedControlのカスタマイズ



UISegmentedControlは非常に便利なコントロールです。
画面上部に置いてライクな使用も出来るし、
ナビゲーションバー上に置いて、複数ボタンのように扱う事も出来ます。
本来の役割はラジオボタンに近いのですがね。

ただし、このカスタマイズ方法がかなり特殊なので、
今回はそれについてまとめたいと思います。
※Storyboardの使用を前提としています。

2014年3月26日水曜日

Cocos2dxでSpineでのボーンアニメーションが上手くいかない解決方法

Spine 1.8.18 で出力した png/json/atlas を使い、 Cocos2d-x 2.2.2 でボーンアニメーションしようとした時に、CCEGLView::sharedOpenGLView()->setDesignResolutionSize を使うとテクスチャアトラスがそのまま表示されてしまいます。

最新のSpineにCocos2dxに入っているSpine Runtimeが対応出来ていない可能性があるので、今回はSpine Runtimeを入れ替えてみます。

2014年3月24日月曜日

iOS7.1でUIProgressViewのカスタム画像が表示されなくなる

UIProgressViewにカスタム画像を適用させる場合、以下の通りにカスタム画像をセットしていたかと思います。

progressView.progressImage = [UIImage imageNamed:@"image"];
progressView.trackImage = [UIImage imageNamed:@"trackImage"];

ただし、上記の方法ではiOS7.1では画像が適用されません。
(バグレポートに挙がっているのでその内改善されるとは思いますが。)

よって、独自のコンポーネントを作って回避するしかないのですが、
既に対応して下さっているライブラリがあります。

JEProgressView

中身も非常にシンプルで、バージョンチェックをして、必要があれば、progressとtrackの両方のImageViewを用意して元のprogressViewのsubviewを上書きしているだけです。

クラスを変更するだけで対応が可能なので、利用させて頂きましょう。

JEProgressViewを利用する際の問題点としては、
セットする画像サイズを自動調整してくれない
という点でしょうか。

よって、セットする画像の幅、高さは、利用するprogressViewのサイズに合わせて利用しましょう。


Cocos2d-xをEclipseでビルドした際に発生するエラーを解決する方法

Xcode側で発生しないのにEclipse側では発生する問題がいくつかあります。その解決方法はズバリ表示させなくする事です。
以下のようにします。

  1. [Package Explorer]でビルド対象のプロジェクトを右クリック
  2. [Properties]を選択
  3. [C/C++ General] > [Code Analysis]を選択
  4. 上部のラジオボタンを[Use project settings]に変更
  5. 画面下部の[Problems]から以下の項目をチェックアウト
    Invalid arguments
    Abstract class cannot be instantiated

他にもエラーが発生すればどんどんチェックアウトすれば良いと思います。

2014年2月20日木曜日

Xcodeプロジェクトで、他端末でheaderファイルのリンクなしエラーが発生した時の解決方法

Xcodeプロジェクトを他人と共有していると発生するかもしれない問題です。

Xcode > Build Settings の「Framework Search Paths」と「Library Search Paths」に追加されているパス名が絶対パスになっている事が原因である可能性が高いです。
解決方法は、2つの項目ともにダブルクリックして編集状態にし、絶対パスになっている箇所を以下のように修正していきます。

例)
/Users/hyoromo/project/iOS/TamaPinByun/TamaPinByun/libs/hoge
  ↓
$(SRCROOT)/TamaPinByun/libs/hoge

上記の方法が面倒くさくて一時的解決をお望みの場合、エラー発生端末側でエラーファイルを追加し直しすればビルド出来る状態になります。

2014年2月18日火曜日

Cocos2d-iphoneを使った際にGameCenterでクラッシュする問題について

Cocos2d-iphone 2.1 を使用しているアプリで、Game Centerを使って以下のフローを実施した際にクラッシュします。
  1. GKGameCenterViewController を表示(Leaderboardの表示)
  2. アプリをサスペンド状態にする
原因は Cococs2d-iphone のメインコントローラが CCDirector なので、Cocos2d-iphoneフレームワークの各所ではそれ前提で処理が記述されているから。
解決方法は以下のようになります。

AppController.m
-(void) applicationDidEnterBackground:(UIApplication*)application
{
    if([navController_ visibleViewController] == director_) {
        [director_ stopAnimation];
    } else {
        [navController_ dismissViewControllerAnimated:NO completion:nil];
        [director_ stopAnimation];
    }
}

2014年1月24日金曜日

Foundationフレームワークの記法

 それほど目新しい内容ではありませんが、昔からiOS開発に携わっている方ほど無駄なコードを書くのに慣れてしまっているかと思いますので、比較的よく使うもののみまとめてみました。

NSString
@"hoge"
NSStringについては昔からこれですね。UTF-16。
余談ですが、NSStringにもstringByAppendStringという連結メソッドがありますが、これは元のインスタンスを一度破棄し、新たにメモリを確保するため、連発するとパフォーマンスが劣化します。
文字連結を行う際は必ずMutableで行いましょう。


NSNumber
@(1)
ついつい、[NSNumber numberWithInt:1]とか書いてしまいますが、intもfloatもこの記法でNumber化できます。


NSArray
@[@"a",@"b"@"c"]
ARCのない時代を過ごしてきた人は[NSArray array]だけでautorelease書かなくていいんだ!なんて素敵!なんて思った時代もあったかもしれませんが、今や@[]だけでOKです。

NSDictionary
@{@"key" : @"value", @"key2" : @"value2"}
こちらもArrayと同じような記法ですね。
余談ですが、NSMutableDictionaryの値のセットメソッドとして、setObject:forKeysetValue:forKeyがありますが、後者の方はnilを受け付けてくれます
というか、受け付けてkeyごと消してしまいます
前者の方はnilが設定されるとクラッシュするので、ケースバイケースで使い分けるといいですね。

他にも@propertyの@synthesizeが省略可能になったりとか、コンパイラが進化するごとにコーディングの記法も2、3年前と比べて大きく変わりました。
たまにしか使用しないコードはともかく、頻繁に使用するような上記のクラスに関する記法は新しくなるたびに習熟していく方が、手間はかかっても結果的にコストダウンに繋がると思います。

というわけで新しい記法が出たら積極的に覚えて慣れていきましょう!
今回は以上ですー。



iOSアプリ向けライブラリの探し方

iOSアプリ向けのライブラリを探す時、Cocoa Controls サイトで探すと楽です。でも、探し方が悪いと目的の機能を持ったライブラリは見つけ難いです。本エントリーはそんな人向けに簡単な探し方フローを書いています。

2014年1月8日水曜日

iOSアプリの多言語対応サポートアプリ「Linguan」の使い方

多言語対応する際、Xcode上で行うのは凄く大変&翻訳漏れをしてしまいがちです。そんな時にApp Storeで公開されているMac OS X向けアプリ「Linguan」を使うと楽に行えます。
Linguan
カテゴリ: 開発ツール, ユーティリティ