ゲームプログラマ志望が福岡で叫ぶ 『絶望』 -17ページ目

ゲームプログラマ志望が福岡で叫ぶ 『絶望』

プログラマーになりたい!!!!! あ、風のうわさで聞いた最近若者で流行っているトゥイッターなるものを始めてみました (・ト・) @toshi_desu_yo

はい次々~~~

詰まってるから早めにどんどんリファレンス読んでいく!!!
しかし記憶できるかはまた別だけどな!!



*************************************************************************************************************************************

============【 IOSアプリケーションプログラミングガイド 】============

*************************************************************************************************************************************

を読んでいってみる。

アプリ制作においての設計や方向性のアイデアを教えてくれるっぽいですね。
どんなアプリを作りたいか。そのためにはどの機能を使ってどういうふうに作り上げていけばいいか。
iPhoneプログラムからはじめる初心者のかた向けっぽいですね。
教えてくれるというので是が非でも学んで野郎じゃねぇか馬鹿野郎!!!《゚Д゚》


あ、ちなみに今回はかなり省きます(笑)

これ200ページくらいあるんだけどwwwwwwww多いなwwww
途中から作りながら覚えていく



◎アプリケーションの中核を成す UIKit
IOSアプリの中核は UIKitフレームワークのオブジェクトから構築されます。
イベント処理から画面への表示、様々なシステムとの連動まで提供します。
まずは UIKit から勉強しましょう!


UIKitはあらゆるアプリケーションの基盤です。
UIKITがアプリケーションのイベントループも担当しているらしい。
※イベントループ : 中でぐるぐる回っており、タッチイベントや加速度センサに反応があった時指定された場所を呼び出す。
 ループしている場所が見えない。


アプリケーションの中心は UIApplicationオブジェクトです。




ほ~ん(´・∀・`)ヘー
ここからはアプリを実際に見ていきながらあわせてpdf読んでいく形にしてみる。
ソッチのほうが覚えやすいと思う(多分、恐らく)





-------------------------------------------------------------------------------------------------------------------------------------


「XCode」 -> 「File」->「new」 ->「project」この中の『 Single View Application 』テンプレートを選んでみる。
このテンプレートは1つのViewとそれを管理するViewController、それと、

設定を行えば視覚的に画面を構築できるストーリーボード、もしくはnibファイルが含まれるらしい。



Viewとは画面に描画されるものらしい。
アプリでよく見るボタンやテキストを入力するところもViewだとか。
タッチイベントもこいつが受け付ける。だからボタンViewの上をタッチすればボタンがタッチされたと理解できる。

そしてこいつらを貼り付けれるコントロールと呼ばれるViewが1つあり、(こいつはViewControllerが持っている)
その上に他のViewをぺたぺた貼っていく。
そして最終的にコントロールViewをウィンドウに貼り付けるとその上に貼り付けられたViewごと画面に描画される。。


ViewControllerはViewを管理する所。
こいつが描画するViewを切り替えたり、保持するViewを生成や、破棄したりするとかなんとか。。



ほぉ! すげーな!!(ノ´∀`*)
(よくわかってない)


全て開いてみた ↓

作成する時に「Device」のところを「Universal」にして作成してしまったのでストーリーボードもiPhoneとiPadの二種類できてます。



AppDelegateとやらは後から見るとして「Supporting Files」の中身に我らC信者が見慣れてるものが!!!!!




main 様がぁ~・・・ いたぁ~・・・

IOSはObjective-CというCの派生言語って言ってたし、やっぱりmainから始まるのだろう。
main様↓


まず早速見慣れない @autoreleasepool とやらが。
文字からしてこのカッコで囲んだところのメモリをカッコが終わる時に全て削除するものだと思う。
※ ARC(自動参照カウント)を選択すると現れるそうです。

ARCにするとメモリの開放をコンパイラが自動的にしてくれるらすぃ。
今まで書いていた [ ~~~ release ] autorelease を書くとエラーになったのはそのためですか。




気になるのは


UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

の部分。

この関数が UIApplication を作成してイベントループを回すように連絡しているもの!    のはず,,,,。


1, 2番目の引数はコマンドラインからの何かしらの情報が入っている。  のはわかる。
3番目の引数は呼び出されるUIApplicationの名前を指定するらしい。nilだと "UIApplication" になる。




nil だとデフォルトのUIApplicationを呼び出すということになるのかな。 ????


4番目の引数は生成するアプリケーションデリゲートとやらの名前を渡すらしい。
ここがnilだと nib ファイルに関連付けてある アプリケーションデリゲートやらを読み込む。

でも今回はストーリーボードなので引数にちゃんと名前を指定してあるのかな。


次に見慣れない関数。

NSStringFromClass -
 クラスの名前を NSString型 で返す関数。

(例) ↓

@interface TestA : NSObject;
/** なんか変数 **/
@end

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

NSObject* pObject = [ TestA alloc ];
NSLog( @" pObjectの本当の正体は!! %@ です ",  NSStringFromClass( [ pObject class ] ) );


【結果】
2012-10-02 17:20:32.556 Test01[59502:c07]   pObjectの本当の正体は!! TestA です 



おぉー! なるほどー!! となっただけです。はい。
つまり、呼び出したいAppDelegate名を書けばいいんですね。はい。


本題に戻ると、 UIApplicationMain で、
イベントの処理やフォアグラウンド、バックグラウンドの画面遷移を行うアプリケーションデリゲートを生成しているわけですね。

で、UIApplicationクラスでずっとイベントループを繰り返して、
UIApplicationクラスが終了すると @autoreleasepool でメモリが開放されてmain関数が終わると。



次に AppDelegate を見ていく!
さぁ! 隅々まで見せてもらおうか!! グヘヘ

ヘッダー ↓



UIResponder -
 画面タッチや加速度センサなどのイベントを受け取れるUIKitクラス。
 これを継承することで同じ機能を得られる。


で、:の右に書いてるというのは継承かなと大体の見当はつくのですが、
次の < > に囲まれた UIApplicationDelegate はなんぞや! と。

デリゲートというのは日本語で「委託」という意味で、これを別のオブジェクトに渡すと自分では処理をしない機能を渡せるらしい。


UIApplication自体は起動時の初期化、画面遷移等をしてくれるありがたい存在ということはわかります。
しかし、< > の意味がわからないと。 そしてDelegate。


調べた所。
 <UIApplicationDelegate>であれば、UIApplicationの機能を追加することらしい。    
 なので今回の場合、UIApplicationの一部の機能をAppDelegateが置き換える。

 UIApplicationで使用する関数を  <UIApplicationDelegate> をしているクラス( つまりAppDelegateクラス )が代わりに中身を書き、
 このAppDelegateクラスに ”お前UIApplicationな!” と言ってUIApplicationとしてクラスを生成してあげると、
 システムがUIApplicationの関数名を呼び出すと、 AppDalegate に書いた関数が呼び出される。
 

・・・・・


C++ でいう仮想継承じゃーん............ (多分)

後ろのdelegateは仮想クラスって意味か。 今回だと UIApplication の仮想クラスを継承してね!☆彡 か。
後、Objective-Cでは多重継承ができないんですと。 だから仮想継承を沢山作るわけか。 


仮想継承とはつまり、< > の中に書いたクラスの皮をかぶれるということですな!
皮をかぶりソイツになりきれる。包茎///

継承では親の変数も引き継げる
仮想継承は親の関数情報( 関数の中身はない )しか引き継げない。継承先で関数の中身を書く。
結局、UIApplicationMain関数ではUIApplicationの役目を果たすAppDelegateクラスを呼び出してるのか。





取り敢えず曖昧だけどこんな感じじゃないかな?w 途中で思っていたものと違う動作をしたらまた調べる。

で、次は

@property( strong, nonatomic) UIWindow *window;



@propertyはアクセサメソッドを自動で作成する。
※アクセサメソッド -
 GetterとSetter!! 

 

指定した変数の


-( void ) SetWindow:( UIWindow* )pWindow
{
        if ( window != pWindow )
        {
              [ window release ];
               window = pWindow;
        }
}
-( void ) GetWindow
{
        return window;
}


みたいなprivateな変数をアクセス出来るように関数を作るのが一々だるい場合は使用する といいのか。


strong -
 強い参照。 ARCにより追加された。
 strong指定するといろんな所にその変数を渡した時、元々保持していたクラスが破棄されても1つでもこの変数を持ったクラスがある限り生き残り続ける。
 そう!俺は生命力が強いんだ!! ってこと?( ゚д゚ )

反対にweakもあり、

weak -
 こちらは弱い参照。
 元々保持しているクラスがいなくなったら、他のクラスが保持していても これを指定した変数もメモリから抹消される。


らしい。
使い方によってweakとstrongを使い分けないとメモリ参照エラーや破棄されないオブジェクトが溢れかえりそう。。。
後1つのnoatomicは、

nonatomic - 

 マルチスレッドにおいてスレッドセーフ(同時に同じ変数にアクセスしないことを保証する)を自動でしてくれるのを解除する。。のかな?w
 で、シングルスレッドなのにスレッドセーフを保証するのは速度の無駄!
 だということでそれを破棄している感じ! だと思う


ちなみに @property書かなければその変数は strong になるらしいです。デフォルトがstrong。

へー 他にもあるらしいけど取り敢えずこれだけ知ってればいい感じだ。
というかプロパティ関数ぐらい自分で書くわー・・・。



次に AppDelegate.m を見ていく!



なんにもねぇええええええええええええええええ!!!!!!!!!!!
OH! イングリーッシュ!!!!

びっくりするほどなんもねぇ・・・
あれ? ViewControllerの生成とかどうしてんだ・・・((((;゚Д゚))))


と、思ってストーリーボード、ARCを使用しないプロジェクトをもう一つ作って AppDelegate.m の中身を見てみた。


あらぁー。 これはこれでめんどくさくなりましたわね(ノ´∀`*)


まずは、このデリゲートクラスの関数が何のためにあるか書いてあったので・・・書く!


willFinishLaunchingWithOptions -
  アプリケーション起動後、最初に実行される。

didFinishLaunchingWithOptions - 
  アプリケーションが画面を表示する直前に実行される。最後の初期化処理を記述すると良い

applicationWillResignActive - 
  フォアグラウンド状態から抜けようとしている際に呼び出される。
  ゲームを一時中断状態にするための処理を書くと良い(中断セーブとか。)

applicationDidEnterBackground -
  バックグラウンド状態で動作しており、いつでも一時停止状態になるうることを表している。

applicationWillEnterForeground - 
  バックグラウンド状態から抜けつつあるけども、アクティブになっていない時に入ってくる。

applicationWillTerminate -
  アプリケーションがもうすぐ停止することを表します。
  一時停止状態であればこのメソッドは呼び出されません。

ホームボタンを押されてアプリケーションがバックグラウンド行く前に、お願いすれば5秒時間をもらえるらしい。
その間に中断セーブやら、メモリを圧迫しないようにモデルの破棄やらしろってことだな。
5秒以上は待ってくれないらしいww強制BAN!( ‘д‘⊂彡☆))Д´) パーン



で、恐らくストーリーボードを使用する場合ストーリーボード自体にWindowとそれに貼るViewと最初に読み込まれるViewControllerが組み込まれているはず。
そしてストーリーボードはViewController間の画面遷移を容易に自動的に行なってくれるので
AppDelegateにもViewControllerにも画面遷移する記述が無いわけか。

後はストーリーボードで設定しろぃ! 
 しかしバックグラウンドに行くときはここを見ろよ!後はViewControllerに任せた!!


という感じか( ゚д゚ )


ViewやViewControllerは長くなりそうなのでまた今度見るとして、後の .plist ファイルやら 変な画像ファイルやらを見ていく。
こいつらは・・・・

↓の画像を見てください!!
(決してめんどくさいからではない!!)

設定ファイルとアイコン等の初期画像らしいですね。
ココらへんは開発の最後らへんでお世話になりそう。



長くなったのでまた次に書きたいと思います。
後はメモ↓


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



・UIApplicationオブジェクト
 イベントループの管理。イベントの管理。 

・「アプリケーションデリゲート」オブジェクト
 mainエントリポイントからUIApplicationMain関数で生成されるオブジェクトです。
 起動時の初期化、状態遷移を管理します。
 UIResponderを継承すればイベントの処理もできるようになりました。
 
・ViewControllerオブジェクト
 ViewとViewを継承したオブジェクトを管理し、管理しているViewをウィンドウ上に埋め込んで画面描画します。

・UIWIndow
 埋め込まれたViewを表示する場所を提供します。
 表示内容を切り替えるときはその時メインで管理しているViewControllerのViewを切り替えます。
 ウィンドウは切り替えるものではありません。
 UIApplicationオブジェクトと連携してViewやViewControllerにイベントを配信する役割もあります。
 
・View
 画面に描画されるものを提供します。ボタンやテキストフィールド等もViewの1つ。
 指定された矩形領域に何らかを描画するもの。 ボタンViewであればボタンが指定した場所に描画される。
 領域内で発生したイベントを受け付けます。

・レイヤオブジェクト
 実際に描画される場所。Viewの内容はレイヤに描画しています。
 


◎カスタムデータモデルの定義
システムが提供するデータ型を活用するべし。 Foundationフレームワークが持っている。
開発時間短縮に役立つでしょう。

・文字列、テキスト
 NSString、NSAttributedString - IOSはUnicodeベースです。

・数値を格納
 NSNumber - 整数値、浮動小数点値、ブール値、char型を表します。
 NSIndexPath - 一連の数値を格納し、配列になっている。

・生のバイト列
 NSDate - 生のバイトストリームを格納したい時に使用します。バイナリファイル。
 NSValue - 標準的なデータ型を格納するために使用します。

・日時と時刻
 NSDate - 時刻に関係する情報が格納されている。 
 NSDateComponents - こちらも時間の情報が入るが、違いはカレンダーと同期する所で、
  時間を日数で加算したり、
  2つ日時を指定してその2つの日時の差(時間)を求めたり出来る。

・NSURL -
 ネットワーク関連、およびファイルのパスを設定取得する機能もあります。

【配列】
・NSArray - NSObjectを継承したオブジェクトを配列で格納するオブジェクトです。
      頭から0,1,2,,,が割り振られます。
・NSDictionary - こちらはキーを自分で設定します。
・NSIndexSet - 整数型の配列。
・NSSet - ある集合の中に任意の要素が入っているか、入っていないかの判定に使用する。
     順不同なので中身がバラバラに格納されている。
・NSOrderedSet - NSSetに順序情報を追加したバージョン。

(上記の集合オブジェクトのNSの後にMutableを付けると、可変的になる。"後から情報を追加できるようになる")


他にもよく使われるデータ型で

・NSInteger / NSUInteger - 符号付き/符号なしの整数。
・NSRange - NSStringの中の指定した数の文字を取り出す時等に使用する。
・NSTimeInterval - 時間の感覚を表す秒数
・CGPoint - x, y 座標。
・CGSize - w, h の大きさ。
・CGRect - x, y, w, h が格納できる。




ここまで来たら後は作りながら調べて覚えて行こうかなと思います。


【結論】
むずい
どうも、もう10月という現実を受け入れることができずに絶望して仕事に身が入らない僕です。 うそです。いつも身が入ってません。


只今スパカァポォ!!マロンちゃんを食べてます!(仕事場です)

まろろんちゃん



何故か横だああああああああああああああああ!!!!!!!!!

なんでだよ!m9( ゚д゚)
すいません。 体はまっすぐに、首だけを90度ほど傾けて御覧ください。


で、たべてるんですが、中々うまし!!!
これは、10トシポイント上げるわ。

最初は「んー・・ バニラのほうが良かったかなぁ(´Д`)」
渋々顔だったんですが、
食べるたびに

(´Д`)

( ゚д゚ )

( ´∀`)

(・∀・)

(ノ・∀・)ノ=●ウンコー!!

・:*:・(*´∀`*)ウットリ・:*:・


になっていったわけです!!!


いや、なんか後から美味しくなるねこれ。
さすが世界のスパカァポォ!! ってところですか。

これ食べてるとなんかマロマロとするんですよね。マロンがマロって来てマロリング、マロニーはやっぱりうまいとい。で、僕もマロラーになりそうなロマンを感じるマロンですね。これ。

つぶつぶの食感も中々にいい!!



この肌寒くなってきた季節。
仕事が忙しくて中々秋の風情を楽しむことができない大人の方々。
身近な存在のアイスでお風呂上りにでも秋の味覚をほんのりと感じるのはいかがでしょうか?

しかし、スパカァポォ!!どちらに軍配が上がるのか。。。
スパカァポォの方が売れている感じはしますねー。 でも爽はシャリシャリ感がうまし。


どちらも楽しんで食べたらいいですね^^




いやー それにしてもクリといったら秋、秋と言ったら山。山と言ったら様々な木々。
様々な木々といったらどんぐり。どんぐりといったらリスですなぁ~( ´∀`)

ん? クリと...........りす..........?
( ゚д゚)ハッ! くりとr.......! 



うわっ!!誰だ貴様!!!!やめっ・・・! うわああああああああああああああああああああああああああああぁぁぁぁあああああああぁあああああ!!!!!!!!!!


【結論】
お昼かった焼きそばにお箸ついてなくて涙ちょちょぎれた
あいふぉんアプリを制作している小童なのですが、、、
イマサラナガラで恐縮なのですが。

俺、IOSのプログラム殆ど知らねぇや( ゚д゚ )



今までC++で9、8割書いていたのでほぼ知らない。
ネイティブのみでかけぇい! と言われたら即日本古来より伝われし伝説の存在、土下座をするハメになりそうなので、
ココらへんでいっちょ様々なリファレンスを読んでいこうかなと思います。

※此処から先はただのメモ書きになります。
僕が特別気になったことのみを抜粋して書いていく(`・ω・´)
興味ない方は今すぐパソコン or 携帯をぶっ壊しましょう!



まずはIOSのプログラミングってなに? って疑問から解消するためにも
初歩のリファレンスをぬるりと読んでいく。

日本語に訳してくれた勇士に感謝を述べますm(_ _)m




===========【 IOS テクノロジーの概要 】===========

IOSは、iPhone, ipod touch, ipadで稼働する物全てを管理するシステムです。
IOS SDK には、独自のアプリケーション開発に必要なツールが含まれています。
フレームワークとObjective-c言語で構築され、IOS上で実行されます。
※フレームワークとは
 開発に必要なライブラリや画像等を一纏めに持っているもの。
 必要なライブラリがあった場合、それをまとめているフレームワークを読み込む。



◎IOSのアーキテクチャ
基本的に、IOSはCPU、GPU、メモリ、カメラ等のハードウェアとアプリケーションの仲介役を担っています。
開発者は基本的にハードウェアと直接やり取りしません。
代わりにIOSから提供された機能を介してやり取りするので、安全で、かつデバイスの能力が変わっても気にすることなくアプリケーションを簡単に作成できます。


IOSは図1-2に示すようなレイヤの塊でアプリを表現します。

上位レベルのフレームワークと、下位レベルのフレームワークがあり、開発者はできるだけ上位レベルのフレームワークを使用して開発するべきです。
上位レベルの方が簡単に開発できるようになっており、安全です。記述するコード量も減ります。
下位レベルの方を利用して開発もできます。こちらの方しか公開されていないフレームワークもあり、柔軟性もあります。しかし、多少難解になります。

各レイヤのテクノロジーとフレームワークは後で説明します。


◎IOS SDKの構成要素
XCode - コードの編集、コンパイル、実行およびデバッグを行う総合開発環境です。
IOSシュミレーター - Mac上でiPhoneアプリをテストできます。
IOS Developer Library - IOSのライブラリや開発に関するヘルプを纏めた文書です。

シュミレーターでアプリのテストはできますが、加速度センサーやGPS等は実機を利用してデバッグしなければなりません。
実機でテストしながら開発するにはAppleの有料IOSデベロッパプログラムに参加しなければなりません【 (URL) IOS Dev Center の IOS Developer Program を参照してください。

IOS SDK のインストール方法、およびアプリ制作のための使用方法については【 (URL) IOS App Developer Workflow Guideを参照してください。


◎Developer Libraryの使い方
IOS Developer Library には、サンプルコード、チュートリアル、ライブラリに関するヘルプが含まれています。
※特にサンプルコードは眺めるだけでも指南代わりになるので見るべし!

入門書から下位レベルの情報まで様々あります。


起動方法
1 : 【 (URL)Apple Developer Webサイト 】にアクセス。
2 :  XCode の 「ヘルプ」 -> 「Developer Documentation 」 を選びます。

この中から調べたい情報を探します。

ドキュメントと素早く検索できる Quick Help ウィンドウの使い方の詳細については【( URL)Xcode4 User Guideを参照してください。



◎ Cocoa Touch レイヤ
Cocoa Touchには、アプリを作成するための主要なフレームワークが含まれています。
基本的な機能から、タッチイベントやプッシュ通知機能、上位レベルの多くの機能を提供しています。
開発者はまずはこのレイヤのテクノロジーを調べるべきです。

----- ストーリーボード -----
IOS5で導入されたアプリを視覚的に設計する方法です。
以前はnibファイルというもので代わりに設計できていましたが、こちらは1つのシーンに対し1つ作成しなければなりませんでした。
しかしストーリーボードは全てのシーンを1つで管理、開発することが可能になりました。
ストーリーボードで重要なことは、画面遷移が視覚的、容易に開発できることです。

プログラム上からはUIKitフレームワークを使用しストーリーボードにアクセスできます。

【 (URL) XCode 4 User Guideを、参照してください。
プログラム上からストーリーボードにアクセスする方法については、
【 (URL) UIStoryboard Class Referenceを参照してください。


----- Gesture Recognizer -----
アプリのViewに付加するオブジェクトで、スワイプや拡大縮小のタッチの動きを感知して指定した関数を実行してくれます。
これがなければ複雑なタッチの動きを開発者自身が検出するプログラムを書かなければなりません。
詳細については【(URL)Event Handling Guide for IOSを参照してください。


----- ピアツーピアサービス -----
BlueTooth経由でピアツーピア接続を提供します。
※ピアツーピア : 端末同士をネットワークで接続してデータを送受信する通信方式。
 直接相手と繋ぐのでオンラインゲームが可能になる。
 ファイル共有などが有名。

【(URL)Game Kit Programming Guideを参照してください。


----- 標準システムView Controller -----
Cocoa Touchレイヤのフレームワークには様々な機能に応じた標準のインターフェイスが提供されています。
以下のいずれかを実行する場合は、対応するView Controller を使用すると開発しやすいです。

・連絡先情報の表示または編集 - Address Book UI フレームワークの View Controller
・カレンダーイベントの作成または編集 - Event Kit UI フレームワークのView Controller
・電子メールまたはSMSメッセージの作成 - Message UI フレームワークの View Controller
・ファイルの内容を開く、またはプレビューする - UIKitフレームワークの UIDocumentIntractionControllerクラス
・写真を撮る、またはユーザのフォトライブラリから写真を選ぶ - UIKitフレームワークの UIImagePickerControllerクラス
・ビデオクリップの撮影 - UIKitフレームワークのUIImagePickerController クラス

【(URL) View Controller Programming Guide for IOSを参照してください。
特定のViewControllerについては、該当するフレームワークのリファレンスを参照してください。



◎ Cocoa Touch フレームワーク 
以下ではCocoa Touchレイヤのフレームワークおよび、機能を説明します

----- Address Book UIフレームワーク -----
新規の連絡先を作成したり、既存の連絡先を編集、選択できます。
【(URL)Address Book Programming Guide for IOS及び、
【(URL) Address Book UI Framework Reference for IOSを参照してください。


----- Event Kit UIフレームワーク -----
カレンダー関連の編集及び表示を簡易に行えます。
【(URL)Event Kit UI Framework Referenceを参照してください。
及び【(URL)カレンダーとリマインダーのプログラミングガイドを参照してください。


----- Game Kitフレームワーク -----
アプリにピアツーピア通信機能を追加できます。
【(URL)Game Kit Programming Guide 及び、【(URL)Game Kit Framework Referenceを参照してください。


----- iAdフレームワーク -----
アプリに広告を配信できます。
広告のロードと表示、タッチしたときの操作全てを自動的に処理します。
【(URL)iAd Programming Guide を参照してください。


----- Map Kitフレームワーク -----
スクロール可能なマップインターフェイスをアプリに組み込めます。
【(URL)Location Awareness Programming Guideを参照してください。


----- Message UIフレームワーク -----
メールの送信と受信、作成を支援します。
【(URL)Message UI Framework Referenceを参照してください。


----- Twitterフレームワーク -----
ツイッターを編集、送信する機能を追加できます。
【(URL)Twitter Framework Reference 】を参照してください。


----- UIKitフレームワーク -----
IOSにグラフィックなイベント駆動型( タッチがあった時、加速度センサが反応した時などに指定したイベントを実行する )アプリを提供します。
アプリに含まれる機能のほとんどをこいつが提供しています。
他にもデバイス固有機能である、

・加速度センサ ・内蔵カメラ ・フォトライブラリ ・デバイス名およびモデル情報
・バッテリー状態情報 ・近接センサ ・接続されたヘッドセットからのリモートコントロール情報

なども管理している。
ここをまず見て機能を調べたらいいと思います。
【(URL) UIKit Framework Referenceを参照してください。



◎Media レイヤ
グラフィックス、オーディオ、及びビデオのテクノロジーが含まれています。
見た目もサウンドも素晴らしく簡単に作成できます。

----- グラフィックステクノロジー -----
最も簡単で綺麗に出す方法は予め描画済みの画像をViewに貼り付けておいてそれをIOSに管理、描画させることですが、拡張性もなく大量のアニメーションに対して不十分でゲームには余り向きません。
そのような場合に以下のテクノロジーを使用できます。

・CoreGraphics( 別名Quartz ) - IOS独自の描画サポート。大体はこれで解決する!
・CoreAnimation - Viewやコンテンツのアニメ-ションサポート
・CoreImage - ビデオ画像や静止画像を操作するためのサポート
・OpenGL ESおよび GLKit - GPUを使用して高速な2D, 3Dを描画できます。
・CoreText - テキストのレイアウトと描画を処理します。
・Image I/O - ほとんどの画像形式を読み込み、書き込みを行える
・Assets Library - フォトライブラリの写真やビデオにアクセスする手段をサポート

グラフィック関連のフレームワークに関する詳細については、後述します。


----- オーディオテクノロジー -----
高品質オーディオの再生、録音機能、バイブレーションのトリガ機能が含まれています。
以下は上位フレームワークから下位フレームワークの順に並んでいます。

・Media Playerフレームワーク - iTunesに簡単にアクセスでき、再生を支援します。
・AV Foundationフレームワーク - オーディオの再生と録音を管理します。後はカメラ等も。
 AR等のリアルタイム画像処理アプリを作成したい場合はこれを調べるといいです。
 【(URL)AV Foundation
・OpenAL - 定位オーディオ( 左右だけではなく奥行き、方向も感じられる )を提供するクロスプラットフォーム( 様々なOSで開発できる )対応のインターフェイスを提供します。
・Core Audioフレームワーク - 再生と録音をシンプルで洗練したインターフェイス。
 警告音、バイブレーション、ストリーミングの再生の管理を行えます。

IOSのオーディオテクノロジーは以下のフォーマットに対応しています。
・AAC  ・Apple Lossless( ALAC ) ・A-law ・IMA/ADPCA(IMA4) ・リニアPCM
・u-law ・DVI/Intel IMA ADPCM ・Microsoft GSM 6.10 ・AES3-2003


----- ビデオテクノロジー -----
アプリからムービーファイルを再生する場合のテクノロジーです。
ビデオをキャプチャしたり、アプリにビデオを組み込んだりできます。
こちらも上位から下位に並んでおり、容易に機能を対応させるためにもできるだけ上位を使用するべきです。

・UIKitのUIImagePickerControllerクラス - ビデオ録画のための標準インターフェイスを提供します。
・Media Playerフレームワーク - アプリから全画面 or 一部にビデオを再生するための簡単に使えるインターフェイスを提供します。
・AV Foundation - 再生とキャプチャを管理します。
・Core Media - より下位レベルに近いデータ型の操作を提供します。

IOSでは .mov, .mp4, .m4v, .3gp 形式に対応しており、以下の圧縮規格ファイルの再生を支援します。
・H-264ビデオ ・MPEG-4 ・先ほど紹介した複数のオーディオフォーマット

UIImagePickerController クラスの使い方については、
【 (URL)Camera Programming Topics for IOSを参照してください。



◎Mediaレイヤのフレームワーク
Mediaレイヤのフレームワークが提供するサービスについて説明します。

------ Assert Libraryフレームワーク ------
デバイスから写真やビデオを取得できます。ユーザーが保存したフォトアルバムに含まれている写真やビデオにアクセスできます。
【(URL)Assets Library Framework Referenceを参照してください。


------ AV Foundationフレームワーク ------
オーディオコンテンツを再生するためのクラスが含まれます。
ファイルやメモリから任意の長さのサウンドを再生できたり、複数の同時再生、エフェクトを制御できます。録音も可能です。
・メディアの管理、編集 ・ムービーのキャプチャ ・ムービーの再生 ・トラックの管理
も可能です。


メディアアイテムの操作と管理を上位レベルのフレームワークよりはるかに洗練された方法で支援します。
【(URL)AV Foundation Framework Referenceを参照してください。


------ Core Audio フレームワーク ------

アプリ内でオーディオの生成、録音、ミキシング、再生を行うことができます。
またバイブレーション機能をトリガできます。


【(URL)Core Audio Overview
を参照してください。
Audio Tookboxフレームワークは【(URL)Audio Queue Services Programming Guide及び、【(URL)Audio Toolbox Framework Referenceを参照してください。


------ Core Graphics フレームワーク ------
Quartz 2D描画APIのインターフェイスが含まれています。
Quartzは、MacOSXで使用されているものと同じ描画エンジンです。
ジオメトリの描画、アンチエイリアス化、グラデーション、画像、色、座標空間の変換、PDFの作成、表示、解析をサポートします。
ゲームアプリもこれを使用して開発できます。
【(URL)Quartz 2D Programming Guide及び
【(URL)Core Graphics Framework Referenceを参照してください。


------ Core Image フレームワーク ------
ビデオや静止画像を操作します。顔面認識、特徴認識も可能です。
CPUやGPUを使い、高速で処理をします。
【(URL)Core Image Reference Collectionを参照してください。


------ Core MIDI フレームワーク ------
キーボードやシンセサイザなどのMIDIデバイスと通信する機能を提供します。
MIDIメッセージの送受信、Dockコネクタやネットワークを駆使してデバイスに接続されたMIDI機器とやり取りをします
※MIDI(ミディ)とは電子機器をコントロールして音を鳴らせたりするもの。
【(URL)Core MIDI Framework Referenceを参照してください。


------ Core Test フレームワーク ------
テキストのレイアウトとフォントの処理を行う機能を提供します。
画面上のテキストの配置管理や様々なフォントや描画設定も行えます。
単純な文字入力はUIKitフレームワークのテキストクラスで十分ですが、ワードアプリなど高度なテキスト処理を必要ならばご使用ください。
【(URL)Core Text Programming Guide及び
【(URL)Core Text Reference Collection を参照してください。 


------ Image I/O フレームワーク ------
画像データ、画像メタデータの読み込みと書き込みを提供します。
Core Graphicsデータ型、及びCore Graphics関数を使用し、IOSで利用できる標準的な種類の画像を処理します。
【(URL)Image I/O Reference Collectionを参照してください。


------ GLKit フレームワーク ------
OpenGL ES2.0アプリのサポートライブラリです。
・GLKViewクラス、GLKViewConllectionクラスOpenGL ESの生成、描画等の標準的な実装を代わりに引き受けます。
開発者はここに処理を書くだけで済みます。
・GLKTextureLoaderクラス - 画像変換、読み込みの処理を行います。
GLKフレームワーク - ベクトル、行列、四元数等の関数、オブジェクトが用意されています。
・GLK...Effect - よく使用されるシェーダーを記述してあるファイルです。
【(URL)GLKit Framework Referenceを参照してください。


------ Media Player フレームワーク ------
オーディオ、ビデオを再生するための機能を提供します。
iTunes音楽ライブラリにアクセスして様々な機能を行えます。
(URL)Media Player FrameWork Referenceを参照してください。
iTunesライブラリにアクセスする方法の詳細については
【(URL)iPod Library Access Programming Guideを参照してください。


------ OpenAL フレームワーク ------
定位オーディオを提供できます。
これで高品質で高性能のオーディオを実現できます。


------ OpenGL ESフレームワーク ------
2D、及び3Dを高速に描画するツールが用意されています。
高品質なシェーダーも使用可能です。

【(URL)OpenGL ES Programming Guide for IOS及び、
【(URL)OpenGL ES Framework Referenceを参照してください。


------ Quartz Coreフレームワーク ------
CoreAnimationインターフェイスが含まれています。様々な形式のコンテンツに対して複雑なアニメーションを簡易に実装できます。
【(URL)Core Animation Programming Guide及び
【(URL)Core Animation Reference Collectionを参照してください。



◎Core Servicesレイヤ
すべてのアプリケーションで使用する基本的なサービスが含まれています。
直接使用せずとも、ほとんどの部品はこの上に構築されています。

------ iCloudストレージ ------
アプリは文章やデータをオンラインストレージに上げることが出来るようになります。
これにより、他のPCやデバイスからでもデータにアクセス可能です。
他にも環境設定など複数のデバイスで共有するデータを置くことにより自動的にデバイスの設定を統一化できたり、設定を保存できたりします。
【(URL)IOS App Programming Guideを参照してください。


------ 自動参照カウント ------
ARC( Automatic Reference Countingu )Objective-Cのオブジェクトのメモリ管理を自動的にコンパイラレベルで行う機能です。
ARCがオブジェクトのメモリを自動的に破棄する処理を記述します。
既存のプロジェクトをARCに移行する手順については
【(URL)XCode New Features User Guideを、またARCそのものについては、
【(URL)Programming With ARC Release Notesを参照してください。



◎Core Services フレームワーク
Core Servicesの機能を説明します。

------- Accountsフレームワーク -------
ユーザーアカウントにログインするための機能を提供します。
アプリが起動するたびに認証処理が必要な時でも問い合わせをなくせることができます。
Twitterフレームワークと併用することで、Twitterアカウントにアクセスできます。
【(URL)Accounts Framework Referenceを参照してください。


------- Core Dataフレームワーク -------
Model-View-Contorollerアプリのデータ・モデルを管理します。
プログラムでデータ構造を定義する代わりにこれを使用してデータ構造を作成できます。
CoreDaraを通してデータモデルの実態の生成、管理、使用を行われます。
これを使用することにより、必要なコード量を大幅に削減できます。
アプリ開発において、CoreDataの使用をおすすめします。
【(URL)Core Data プログラミングガイドまたは
【(URL)Core Data Tutorial for IOSを参照してください。または
【(URL)Core Data Framework Referenceを参照してください。


------- Core Foundationフレームワーク -------
IOSのデータ管理およびサービス機能を提供します。
・配列 ・バンドル(データに付属) ・文字列管理 ・日付と時刻の管理 
・未加工データブロック管理 ・環境設定管理 ・URL及びストリーム操作
・スレッド及び実行ループ ・ポート及びソケット通信

Core FoundationフレームワークはFoundationフレームワークと密接に関係しており、
双方は、どちらの関数でも同じように使用することが可能です。

【(URL)Core Foundation Framework Referenceを参照してください。


------- Core Locationフレームワーク -------
位置と方角の情報をアプリに提供します。
近隣の施設を検索する際にこの情報を利用できます。
磁気センサーでの方角サポート、位置変化を追跡するため携帯電話の基地局を使用する、低消費電力の位置監視サービスのサポートが導入されました。
【(URL)Location Awareness Programming Guideを参照してください


------- Core Mediaフレームワーク -------
ほとんど使われませんが、オーディオとビデオの作成と表示においてより正確な制御を必要とする開発者に提供されます。
【(URL)Core Media Framework Referenceを参照してください。


------- Event Kitフレームワーク -------
デバイス上のカレンダーにアクセスするためのインターフェイスを提供します。
使用することで、既存のイベントを取得できたり、ユーザーのカレンダーに新規のEventを追加できたりします。アラームを含めることもできます。
【(URL)Event Kit Framework Referenceを参照してください。 
Event Kit UIも参照してください。


------- Foundationフレームワーク -------
Core Foundationの機能の多くをObjective-cの形で提供します。
【(URL)Foundation Framework Reference】を参照してください。



◎Core OS レイヤ
他のテクノロジーの土台となる下位レベルの機能が含まれています。
使用していなくてもたいてい他のフレームワークの土台になっています。
セキュリティ、外部のハードウェアアクセサリとの通信を明示的に行う必要がある状況では、このレイヤのフレームワークを使用します。

------ Accelerateフレームワーク ------
DSP(デジタル信号処理)、線形代数、画像処理の計算を実行するためのインターフェイスが含まれています。
【(URL)Accelerate Framework Referenceを参照してください。


------ Core Bluetooth ------
Bluetooth対応アクセサリを活用できます。
Bluetoothの登録、接続/切断処理などできます。


------ External Accessoryフレームワーク ------
接続されているハードウェアアクセサリと通信をします。
デバイスのピンDockコネクタを使用して接続するか、Bluetoothを使用してワイヤレスに接続します。
このフレームワークは接続されている個々のアクセサリについての情報を取得し、通信のための初期化方法を提出します。その後コマンドでアクセサリを直接自由に操作できます。
【(URL)External Accessory Programming Topicsを参照してください。


------ Generic Security Servicesフレームワーク ------
セキュリティ関係の標準的なサービスをアプリに組み込めます。


------ Securityフレームワーク ------
アプリで管理するデータのセキュリティを保証します。
証明書、公開鍵、非公開鍵を管理します。
キーチェーンへの証明書、暗号鍵の保存もサポートします。
【(URL)Security Framework Reference及び、
【(URL)KeyChain Services Programmingを参照してください。




以上。疲れた
※一部省いております!
 最後の方は余り使用しないと踏んだので大幅カットしてます!! 下位レベルの情報を全て知りたい方はpdfを参照くださいm(_ _)m

このpdfはIOSの機能の一覧みたいですな。
ここから自分の欲しい機能を保持しているフレームワークを見つけて、そこを調べていくと...


見た感じなんですが、
取り敢えず UIKit を調べる事。 次に View Controller関係。
ゲームを作成したい方はゲームの内容に合わせて
UIKit → Core Graphics → OpenGL ES + GLKit と調べていくといいのではないかな。

Core Graphics ではどれくらいの速度を得られるのだろうか?
3Dを使わずにゲームを作っていく上で OpenGL ES と変わらない速度を得られるのであれば無理にクロスプラットフォームのOpenGL ESではなく、ネイティブなCore Graphicsを使用したほうがいいと思う。

シェーダみたいな機能は使用できないっぽ。



まぁ、しかしこれだけじゃ意味わからんな(マジで)

取り敢えずまずは UIKit系の中身が半端無く広そうなので、早めに勉強終えて Core Graphics でゲーム作ってみる( `ト´)

OpenGL ES に関してはすでに作ってあるので速度の違いを試してみたい。


しかし・・・・
この記事書くだけで3日かかったんだけど( ゚д゚ )

何やってんだか・・・(´Д`)


皆さん! もう10月ですよ( ゚д゚ )

橙色が似合うこの季節。
皆様はどうお過ごしになられますでしょうか?


僕は・・・


うわああああああああああああああああああああああああああああ!!!!!!!

SANMA食ってねぇぇぇぇえええぇえぇえぇぇぇぇえええぇええ!!!(割りとマジで軽くショック)
  ,------, 
<゜二二二二<| 


秋になると秋刀魚さんの美味しさがやばくなりますね。
びっくりするほど美味しい。あれはもう異常の域に達してますよ。いかれてる。

そのかわり秋以外の秋の刀さんはそんなに美味しくなくなるw


ここまで豪語しておいて 
もしこれが実験で、科学的に秋と秋でない秋刀魚の美味しさが殆ど変わらないと証明されちゃったら泣いちゃいますね。
ただのプラシーボとか嫌だ。




そういえば台風が来ましたね。

僕は土日台風で雨が激しくなるだろうから金曜日の夜に引きこもりを決心したのですが、見事に雨ふらず。風もなく。穏やかな休日だった・・・・


せっかく....
せっかく台風のせいにして引きこもる理由をでっち上げようと思ったのになんなんだよぉおおおおおお!!
これじゃただ俺が家が大好きなヒッキー様、今流行のハウスインボス系男子じゃん!!(?)


違う!違うよぉぉお!!!(´;ω;`)

家は好きだけど俺はヒッキーじゃ・・ 俺はヒッキーじゃぁ・・・
遊びに行く友達がいないからではなぁぁあああい!!!!
 つД`)・゚・。・゚゚・*:.。..。.:*・゚




・・・


そう言えば今日朝歯医者行ったんですよ。
そう、あのドリルを持った白い悪魔と称される三大ほすぴたる恐怖神の一人、あの覇威者ですよ。

親知らずが、上に伸びずに横に伸びやがって(憤怒)


先生「( ´゚д゚`)アチャー これは痛いですね(笑)」
俺「ハハッ・・・(涙)」



(笑)て。。。(笑)て..... ... .. . ( ゚д゚ )

約一ヶ月前に死の宣告を受けて、ようやく本日行ったわけなんですが、



麻酔いっっっっっっってえええええええええええええええええええええええええ!!

そして震える体wwwwwwwwwwwwwwwwwwwwwwwwww

まさに生まれたての子鹿のような小刻みな震えを数十分魅せつけてやったわぁ... どやぁ


はい。 可愛いですねーー^^


なぜか看護婦さんが4人ぐらい俺を囲んでいた。
ニゲナイヨォ!(´;ω;`)
あまりの視姦プレイに興奮を覚えました(勃)



人間は真の恐怖を目の前にするとマジで震えるんですね
((((;゚Д゚))))ガクガクブルブル

西野カナばりに早く日常に会いたくて会いたくて震えてましたよ。


みなさん歯医者は定期的に行きましょうねぇ~( ´Д`)ノ
敗者になりたくなければね!( ゚д゚ )

歯医者と敗者・・・ 歯医者敗者ですよ! ミナサン!!カケテマスヨ!!!



【結論】
鹿んプレイ ヤバイ。  視姦鹿ですよ! ミナサン!!カケテマスヨ!!!




普通につまらんな( ゚д゚ )
前回書いたコンストラクタの第2章をふつふつを書いていく。



まずは 【explicit】

コンストラクタの前につけることでちょっと特殊にするキーワードです。



class A
{
private:
    int mNumber;

public:
    explicit A( int number  )
        : mNumber( number )
    { }
};



こいつを前につけることで暗黙の型変換ができなくなる。
お・恐ろしい・・((((;゚Д゚))))

暗黙的? 明示的??
どういうこと?



まず、explicit がついていないクラスAがあるとします。
そして、


void Func( A funcA ) { /** 何らかの処理 **/ }



という関数があった場合、


A testA( 1 );    // コンストラクタ
Func( testA );  // コピーコンストラクタが発生

これは前回の通り自動的に生成されたデフォルトコピーコンストラクタが呼ばれて
testA の メンバ変数 mNumber の値が funcA mNumber に無事コピーされます。


これは見た瞬間に正しいとわかりますね。
しかし、この関数の呼び出し方。別の書き方もできます。それが


Func( 20 );

これは通ります。

コンパイラが黙的に型の変換を行なってくれたからです。
自動的に int → A型に変換



『おお! 自動的にやってくれるなんて便利じゃないか!』
と、思われるかもしれませんが、、

(ノ∀`)アチャー

これはやってはいけないことです。


他の人がこのソースを見た時に、
恐らく、絶対、確実に、半端無く、絶望的に

『 Func という関数は引数に整数型をとるんだな!』と、いらぬ誤解を生みます。


そして作成したAさんも後から見なおした時に混乱するでしょう。
プログラムなんて3日経てば自分で書いたことなど忘れるものですたい( ゚д゚ )

さらに意図しない変換を起こしてしまい、最悪エラーが出てくるかもしれません。
そこに時間をかけるのは無駄。

ならば最初から暗黙的な型変換を出来ないようにすればいいやない! ということです。


なので、
ここで登場するのが 『 explicit 』 ちゃん!  明白な~ という意味らしい。
この子をコンストラクタの前、 につけることで、




Func( 20 );            // エラー!  暗黙的・・・
Func( A( 20 ) );     // 通る!  キャストをして明示的!!



特別な理由が無い限りは explicit を必ず書いといてもいいんじゃないかな!
これにより明示的(キャスト)に記述していない場合、ビルドした時点でエラーが分かります。
便利ですわね!


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

次に、コピーしたくないオブジェクトがある場合。
(コピーコンストラクタ、代入演算子を呼び出されたくない場合)


自分の複製を作りたくないと思っていても人間はやってしまうもの。

なので、コンパイラにこのクラスはコピーしないで!”と定義してあげると、万が一コピーが発生する場面でもエラーをはいてくれるので助かります。



A1 = A2;            // いや!
A A2( A1 );        // これもやめて!!


方法は、
ただコピーコンストラクタ、代入演算子を privateにしてやれば良い。

class A
{
public:
    /** 生成と破棄は通常通り~ **/
    A(){}
    ~A(){}

private:
    /** 呼び出されなようprivate宣言のみでおk) **/
    A( const A& );
    A& operator = ( const A& );
}:



関数の引数はいりません。
だって使わないから。
省略しよう!

これでもし自分が予期せぬコピーが発生しようともコンパイラが教えてくれます( ゚д゚ )


後、ちょっと便利なやり方として継承を使う手もあります

class UnCopy
{
protected:
    /** 生成は通常通り **/
    UnCopy(){}
    ~UnCopy(){}

private:
    /** コピーはダメ! **/
    UnCopy();
    UnCopy& operator=( const UnCopy& );
};

こういう中身が何もないクラスを作成したとします。
そして、これをコピーしたくないクラスに継承させます。


/** private 継承 **/
class A : private UnCopy
{
    /** コピーコンストラクタ、代入演算子を宣言不可 **/
};



これでどんなクラスでも、コピーコンストラクタと代入演算子を宣言することができなくなります。
コンパイラがデフォルト関数を自動的に作成する時に、親クラスの対応する関数を呼びだそうとするらしい。 でも、その対応する関数がprivateならばその呼出しがエラーとなる


様々な機能をクラスで作成し、多重継承を活用することで無駄なコードを省けスッキリとした見栄えをだし、匠もびっくりデス。
継承を使えるのならばどんどん使っていくといいんじゃないかなと。


【結論】

特別なことがない限り explicit をコンストラクタの前に付ける!
コピーしたくないならばprivateに!
継承を活用しよう!


お昼のうどん( ぶっかけ月見 )美味しかった!




何故か俺の中では explicit青色ってイメージがするんだよなぁ・・・ なんでだろう