Fernweh @fernweh ?

1 週間と 4 日間前に活動
  • Fernweh が市場で新しい投稿を公開しました: Cocos2d-x v2 移行ガイド(テキトー日本語訳)   5 年と 3 か月前 · 表示

    サムネイル

    Cocos2d-x | Cocos2d-x v20 migration guide を 2012/9/23 (Cocos2d-2.0-x-2.0.2 released の時) に翻訳した。英語よくわからんし、辞書もろくに見ない上に途中で読むのが面倒になったのでテキトーな翻訳なんでたぶんいろいろ間違ってます。Google翻訳神さまありがとうございました。

    サマリー

    このガイドは 2系のバージョンが上がるたびに新しくなります。 APIの変更 新機能 OpenGL ES 2.0 に対応, OpenGL ES 1.1 はサポートから外れた iOS, Android, win32 をサポート

    cocos2d-iphone v2.0 と同様の変更

    Cocos2d-x は cocos2d-iphone を移植したものだから同様の変更があります。なので prog_guide:migrate_to_v2.0 ? cocos2d for iPhone の移行リストを見てください。 よく使うクラスやインタフェースの変更は以下のような感じです。 CCTransitionRadialCW は CCTransitionProgressRadialCW にリネーム CCTransitionRadialCCW は CCTransitionProgressRadialCCW にリネーム ARCH_OPTIMAL_PARTICLE_SYSTEM は CCParticleSystemQuad と同等になる CCParticleSystemPoint は gles20 branch から削除したので使えない CCMenuItemImage::initFromNormalImage は initWithNormalImage にリネーム CCDirector::setDisplayFPS(bool) は setDisplayStats(bool) にリネーム CCAnimate::initWithDuration(ccTime duration, CCAnimation [...]
  • Fernweh が市場投稿「[cocos2dx]CCTouchDispatcher にタッチを受け取るクラスを登録する」にコメントしました   5 年と 7 か月前 · 表示

    コメントどもっす。

    C++にretainなどのObjective-Cと同様のメモリ管理のメソッドはありませんので当然retain() を呼び出すと落ちます。

    ただしcocos2d-xではObjetive-cもどきなメモリ管理を行うためのretainやreleaseなどのメモリ管理のためのメソッドを実装したNSObjectならぬCCObjectがあるので、CCObjectを継承することでretainを使えるようになります。継承しない場合は、普通にnew, delete, alloc, free なんかでメモリ管理することになります。

  • Fernweh が市場投稿「cocos2d-x を使うために C++ を学習したメモ」にコメントしました   5 年と 8 か月前 · 表示

    コメントありがとうございます!
    プログラムの技能はまだまだなうえに、
    雑なメモ書きですが参考になったならうれしいです。
    誤字はこんど暇な時に直しておきます orz

  • サムネイル

    SKProduct

    iTunes Store から AppStore に登録したプロダクトについてローカライズされた情報を扱う。読み込み専用の5つのプロパティから成る。ローカライズは iTunes Connect で行う。 @property(nonatomic, readonly) NSString *localizedDescription __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0) | ローカライズされたプロダクトの説明 @property(nonatomic, readonly) NSString *localizedTitle __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0) | ローカライズされたタイトル @property(nonatomic, readonly) NSDecimalNumber *price __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0) | 価格 @property(nonatomic, readonly) NSLocale *priceLocale __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0) | 価格のロケール @property(nonatomic, readonly) NSString *productIdentifier __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0) | プロダクトID

    SKProductsResponse

    NSObject の派生クラス、なんも継承してない。SKProductsRequest によりリクエストしたプロダクトのレスポンス。読み込み専用の2つのプロパティから成る。 @property(nonatomic, readonly) NSArray *products __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0) | SKProduct の配列 @property(nonatomic, readonly) NSArray *invalidProductIdentifiers __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0) | 送ったリクエストが正しくない場合はここに入れられる

    SKPayment

    プロダクト購入のためのオブジェクト。SKPaymentQueue#addPayment [...]
  • サムネイル

    参考にしたリンク

    StoreKit.framework

    StoreKit.frameworkを使用するのでプロジェクトに追加しておく。 StoreKit のヘッダーを見ると以下のようなクラスが含まれていることが分かる

    アプリ内課金を実装するために継承すべきプロトコル

    SKProductsRequestDelegate, SKPaymentTransactionObserver のプロトコルが必要。 SKPaymentTransactionObserver は開始したトランザクションを受け取り処理を実行するためのメソッドを持つ。

    SKRequest

    SKProductsRequest の親クラスであり抽象クラスである。リクエストを開始する -start や 中止する -cancel メソッドを持つ。AppStoreへリクエストができるオブジェクト。

    SKRequestDelegate

    – (void)requestDidFinish:(SKRequest *)request __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0) | リクエスト完了時に呼ばれる – (void)request:(SKRequest *)request didFailWithError:(NSError *)error __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0) | リクエスト失敗時に呼ばれる

    SKProductsRequest

    SKRequest のサブクラス。プロダクト情報のリクエストを実行できる。プロダクトはAppStoreで販売するもの全てを指す。リクエストした結果は SKRequestDelegate#productsRequest:didReceiveResponse: に SKProductsResponse として渡される。 – (id)initWithProductIdentifiers:(NSSet [...]
  • Fernweh が市場で新しい投稿を公開しました: 知ってると楽になるUIWebView関連6つのTips   5 年と 10 か月前 · 表示

    サムネイル

    リクエスト可能なURLを制限する

    UIWebViewDelegater#webView:shouldStartLoadWithRequest:navigationType: メソッドで NO を返すとリクエストが実行されないので、これを利用して リクエストを拒否することができる。

    リクエストするときにキャッシュを利用しない方法

    NSURLCache のイニシャライザでキャシュポリシーを設定できる。 cachePolicy 引数に NSURLRequestCachePolicy 列挙子を指定する。指定できるものは以下の値 NSURLRequestReloadIgnoringLocalCacheData を指定すればキャッシュを使用しない。

    UIWebView をリリースして削除した後にアプリがクラッシュする

    とりあえず自分の場合はWebViewの delegate がリリースしたあとで使われるのが原因だった。UIAlertView でも同じ様なことして悩んだっけ orz 適切なタイミングで nil をセットしてやればOK。

    UIWebView で表示されている内容を消して、表示を空にしたい

    空のHTMLを読みこめばいいだけ。

    キャッシュを削除する

    NSURLCache がキャッシュを管理しているらしいけど… NSURLCache#removeAllCachedResponsesでキャッシュ削除できるっぽい。なんか違う気もするけど情報をきちんと探しきれなかった… 今感じていること iPhoneアプリでHTTP通信を頻繁に行っているとメモリ使用量が… こういう情報もあった。

    ネットワークの接続状況を知る

    Cocoaの日々: ネットワーク接続状況取得ライブラリを公開 のライブラリがとてつもなく便利です。 [...]
  • Fernweh が市場で新しい投稿を公開しました: [StoreKit]SKPaymentTransactionStateFailed のエラー内容のメモ   5 年と 10 か月前 · 表示

    サムネイル

    Error Domain=SKErrorDomain

    5つのエラー分類がある。

    SKErrorUnknown | Code=0 “Cannot connect [...]

  • Fernweh が市場で新しい投稿を公開しました: UIWebView のメソッドやプロパティ、関連リンクのメモ   5 年と 10 か月前 · 表示

    サムネイル

    UIViewControllerのサブクラスをUIWebView用に作る

    XCode のメニューの File > New > New FIle… > iOS > Cocoa Touch > UIViewController subclass からテキトーにファイルを生成して、新しいクラスに UIWebViewDelegate を実装する いちいちプログラムで画面をつくるのは面倒くさいので インターフェースビルダー で xib を利用したほうが楽だね。

    UIWebViewDelegate

    ウェブページにアクセスするときなど特定のタイミングにコールされるメソッドが定義されている。 これらのメソッドは UIWebView#loadRequest: が呼ばれたあとやリンクをクリックした時などに順次実行される。 – (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType | リクエストを開始する直前にコールされる。このプロトコルのメソッドのうち最初にコールされる。NO を返すと読み込まれないので、リクエストの内容によって処理を振り分けできる。 – (void)webViewDidStartLoad:(UIWebView *)webView | ウェブページのダウンロードを開始した時にコールされる。これは2番目。 – (void)webViewDidFinishLoad:(UIWebView *)webView | ウェブページのダウンロードが完了した時にコールされる。これは3番目。 – (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error | ウェブページのダウンロードが失敗した時にコールされる。ここで失敗した時には ユーザーに失敗したコトを伝えなければならないらしい。これを怠るとリジェクトされるっぽい?これも3番目にコールされる。

    メソッドなどのメモ

    goBackとgoForwardメソッド, [...]

  • Fernweh が市場で新しい投稿を公開しました: [Twitter.framework]ツイッターつぶやき機能を実装するためのメモ   5 年と 10 か月前 · 表示

    サムネイル

    iOS 5 では Twitter.framework が使える
    Twitter.framework で ツイートするためのビューを表示する

    Twitterのつぶやき機能を実装したいなぁということで調たことなどのメモ

    iOS 5 では Twitter.framework が使える

    Twitter.framework を Optional でプロジェクトに追加する。
    iOS部分の分岐コードは以下のように簡単にできる。

    Twitter.framework で ツイートするためのビューを表示する

    そういうことで以下のようなメソッドを書いた。

    ※引数に const char * を使ってるのは cocos2d-x で使用する都合のため。
    ※URL は複数セットできるのだけれど1つしかセットできるようにしていない。

    Twitter の URL のパラメータは

    こんな感じ。URLエンコードしないとダメだよ。UIWebViewなどを使う場合はこれだけ知ってれば十分かな。さて次はUIWebViewの使い方を覚えねば。。

  • Fernweh が市場で新しい投稿を公開しました: NSURLを文字列から作ってどう処理されているのか調べてみた   5 年と 10 か月前 · 表示

    サムネイル

    URLを扱うためのクラス…というのはわかるけど何がなんだかイマイチよくわかっていなかったので少し調べた とりあえず適当に動かしてNSURLのメソッドの中から文字列を返すものをログに吐き出してみた @”http://userName:userPassward@fernweh.jp:80/b/sitemap/?param&b=11#F” の結果 @”hoge” の結果 @”あいうえお” の結果 @”foo/bar?2000″ の結果

    @”http://userName:userPassward@fernweh.jp:80/b/sitemap/?param&b=11#F” の結果

    なるほど、静的イニシャライザで与えた文字列をパースしてくれるんだね。 でも query はパースしてくれない。ぐぐってみるとどうやらqueryのパースは自分でやらないとダメっぽい。

    @”hoge” の結果

    @”あいうえお” の結果

    マルチバイト文字列には見事な拒否反応をしてくれました。返された NSURL* が nil だった…NSURLに与える文字列はあらかじめURLエンコードされていなければダメなようです。

    @”foo/bar?2000″ の結果

    parameterString と pathExtension が全部空っぽだったおかげでどんなメソッドなのかわからない orz。 ログに出力しなかったけど、 port メソッドはポート番号のNSNumber* を返す。。 同じくログに出力しなかったけど、pathComponent メソッドはpathを分解したNSArray* を返す。 [...]
  • Fernweh が市場で新しい投稿を公開しました: [GameKit.framework] GKAchievementのメソッドやプロパティのメモ   5 年と 10 か月前 · 表示

    サムネイル

    ゲームセンターは…認証されたプレーヤ(デバイスにログインしているプレーヤ)、デバイスに誰もログインしてない状態があるために、ログインしているユーザー別に記録を分けようとするとかなり面倒くさい。。

    GKAchievement はアチーブメント(成績)データを送信したり受信したりするのクラス。アチーブメント達成時にそのことを示すバナーを表示したりもする。 + (void)loadAchievementsWithCompletionHandler:(void(^)(NSArray *achievements, NSError *error))completionHandler|ゲームセンターからアチーブメントをロードするスタティックメソッド。ロード完了後にハンドラがコールされる。ハンドラには GKAchivement* の配列が渡される。 + (void)resetAchievementsWithCompletionHandler:(void(^)(NSError *error))completionHandler|ゲームセンターに記録している全てのアチーブメントをリセットするスタティックメソッド。リセット完了後にハンドラがコールされる。 – (id)initWithIdentifier:(NSString *)identifier|IDを指定してGKAchievementオブジェクトを初期化する。 – (void)reportAchievementWithCompletionHandler:(void(^)(NSError *error))completionHandler|アチーブメントの情報を送信する。送信するデータは以下のプロパティで設定する。 @property(nonatomic, retain) NSString *identifier|アチーブメントID @property(nonatomic, assign) double percentComplete|進捗状況を 0 ~ 100 で設定する。 @property(nonatomic, readonly, getter=isCompleted) BOOL completed|進捗状況が 100 なら YES。そうでないなら NO。読み込み専用。 @property(nonatomic, assign, getter=isHidden, readonly) BOOL hidden|隠しアチーブメントかどうかを取得できる読み込み専用のプロパティ。 @property(nonatomic, retain, readonly) NSDate *lastReportedDate:初期化時に設定される読み込み専用のプロパティ。直前にレポートした日付を取得できる。 @property(nonatomic, assign) BOOL showsCompletionBanner __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0)|アチーブメントが完了した時に少しの時間だけ、そのことを知らせるバナーを表示するかどうかを設定できるプロパティ。 [...]
  • Fernweh が市場で新しい投稿を公開しました: GKScoreとGKLeaderboardのプロパティやメソッドのメモ   5 年と 11 か月前 · 表示

    サムネイル

    GKScore GKLeaderboard GKLeaderboardViewController と GKAchievementViewController いろいろ学習してきた内容が溜まってきたので消化すべくアプリを考え中。でもまだまだ学習が足りない部分があるので頑張ろう。。

    GKScore

    リーダーボードのスコアを扱うためのクラス。リーダーボードから渡されるスコアのクラスであり、リーダーボードにスコア送信するときに使用するクラスでもある。 @property(nonatomic, assign) int64_t value|スコアの値 @property(nonatomic, readonly, retain) NSString *formattedValue|スコアをフォーマットするための文字列。読み込み専用。 @property(nonatomic, retain) NSString *category|リーダーボードのカテゴリIDのプロパティ。必須。 @property(nonatomic, assign) uint64_t context __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0)|えーとこれは何だろう?よくわからない。「optional additional context that allows a game to store and retrieve additional data associated with the store. Default value of zero is returned if no value is set.」というコメントが付いてるけど具体的にどう使うのだろう。。 @property(nonatomic, readonly, retain) NSDate *date|スコアが記録された日付。読み込み専用。 @property(nonatomic, readonly, retain) NSString *playerID|そのスコアがどのプレイヤーのものか。読み込み専用。 @property(nonatomic, readonly, assign) NSInteger [...]
  • Fernweh が市場で新しい投稿を公開しました: GKPlayer と GKLocalPlayer のプロパティとかメソッドのメモ   5 年と 11 か月前 · 表示

    サムネイル

    GKPlayer GKLocalPlayer Game Center 実装したいなぁということで cocos2dで作るiPhone&iPadプログラミングを読みつつゲーセンプログラムを学習中。

    GKPlayer

    プレイヤーのIDやニックネームを保持するクラス。 @property(nonatomic, readonly, retain) NSString *playerID|プレイヤーID @property(nonatomic, readonly, copy) NSString *alias|ニックネーム @property(nonatomic, readonly) BOOL isFriend|友達かどうか – (void)loadPhotoForSize:(GKPhotoSize)size withCompletionHandler:(void(^)(UIImage *photo, NSError *error))completionHandler __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0); |日本語情報が全く出てこないのでよくわかんないけど、プレイヤーの画像をUIImageで取得できるものっぽいね。引数sizeには GKPhotoSizeSmall または GKPhotoSizeNormal 列挙子を指定する。

    GKLocalPlayer

    ローカルプレイヤーはデバイスにログインしているユーザーを表すGKPlayerのサブクラス。 @property(nonatomic, readonly, getter=isAuthenticated) BOOL authenticated|ローカルプレイヤーか認証されているかどうか @property(nonatomic, readonly, getter=isUnderage) BOOL underage|年齢制限のあるプレイヤーかどうか @property(nonatomic, readonly, retain) NSArray *friends|友達リストを取得するためのプロパティ。GKPlayerの配列。 + (GKLocalPlayer *)localPlayer|ローカルプレイヤーを取得する静的メソッド – (void)authenticateWithCompletionHandler:(void(^)(NSError *error))completionHandler|認証完了時にハンドラがコールされる – (void)loadFriendsWithCompletionHandler:(void(^)(NSArray *friends, NSError *error))completionHandler|友達リスト取得時にハンドラがコールされる GK_EXTERN NSString *GKPlayerAuthenticationDidChangeNotificationName|NSNotificationCenterに登録するときに使用するイベント名。 [...]
  • Fernweh が市場で新しい投稿を公開しました: [cocos2d-x]CCProgressTimer クラス – ローディングなどのUIを簡単に実装できるクラス   5 年と 11 か月前 · 表示

    サムネイル

    Loadingの進捗状況を表示したりとか、時間ゲージだとかそういう要素を表現するのに便利な CCNode のサブクラス、CCSpriteのラッパー。プログレスタイマーを表示しているもの自体はクラスメンバのCCSprite。

    updateメソッドなどで で更新するなりしないと何も起こらないよ

  • Fernweh が市場で新しい投稿を公開しました: [cocos2dx]CCTouchDispatcher にタッチを受け取るクラスを登録する   5 年と 11 か月前 · 表示

    サムネイル

    タッチした時に ccTouchBegan などのメソッドがコールされるけど、これはCCTouchDelegateのサブクラスであるCCTargetedTouchDelegateまたはCCStandardTouchDelegateを継承しているクラスのうち CCTouchDispatcherシングルトンに登録されているオブジェクトのメソッドがコールされている。

    CCTouchDispatcher#addTargetedDelegateメソッドで登録できる。addTargetedDelegate の第2引数は タッチ時にコールするオブジェクトの優先度を設定するもの。数値が小さいものから順に実行される。

    ということで、以下のようなコードを実行して画面にタッチすると “Touched!”とコンソールに表示される。

    CCTouchDelegate を継承しても動作するんだけどたぶんよろしくないかと。。シングルタッチを扱う場合は CCTargetedTouchDelegate を継承する。一度に複数のタッチを受け取りたい場合は CCStandardTouchDeleaget を継承する。

  • Fernweh が市場で新しい投稿を公開しました: [cocos2d-x] CCArray と CCMutableArray についてのメモ   5 年と 11 か月前 · 表示

    サムネイル

    CCArrayの中身を走査する CCArrayのヘッダーと各種関数 CCMutableArray と CCArray cocos2d for iPhoneと違う点があるのでちょっと分かりにくい。。

    CCArrayの中身を走査する

    CCArray の中身を走査したい時は CCARRAY_FOREACH(__array__, __object__) マクロを使用する。 CCNode#childrenメソッドはCCArrayで子オブジェクトを返すので CCARRAY_FOREACH で走査できる。

    CCArrayのヘッダーと各種関数

    以下はソースコードのコピペに一部自分でコメントを加えたもの。 名前を見ればほぼ意味が分かるものばかり。 CCArrayは cocos2d for iPhone だと NSArray よりちょっぴり高速らしいけど、cocos2d-x だとどうなんだろうね。std::vector より早いんだろか。

    CCMutableArray と CCArray

    CCMutableArray はテンプレートで保持する型を指定して使用する可変配列である。 CCMutableArray なんてクラスがあるのでCCArrayは可変配列ではないように思えるけど CCArrayも可変配列なので間違えないように。 CCMutableArray は cocos2d for iPhone には存在しないクラスであり、std::vector のラッパーです。で、内部のstd::vectorを操作するためのメソッドが用意されている(CCArrayでは CCObject** 変数で配列を管理している)。vector を cocos2d for iPhone 風にしたクラス?ごめんうまく説明できない。まぁCCObjectを継承していて autorelease なんかでメモリ管理が楽なので 動的に配列を作る場合はこいつを使うといいかもねって感じだと思う。 また、CCArray は cocos2d for iPhone ではオブジェクトであればなんでも格納できたのだけど、cocos2d-xではCCObjectおよびそのサブクラスしか格納できないので注意すること。CCObject以外を配列にしたい場合は list なり CCMutableArray [...]
  • Fernwehアバター教えて!Xcodeエラーメッセージとその解決策 寺子屋に参加しました   5 年と 11 か月前 · 表示

  • Fernwehアバター教えて!iPhoneアプリ開発全般 寺子屋に参加しました   5 年と 11 か月前 · 表示

  • Fernwehアバター教えて!Objective-C 寺子屋に参加しました   5 年と 11 か月前 · 表示

  • Fernweh が市場で新しい投稿を公開しました: [cocos2dx]CCNode以外のオブジェクトのスケジュールを実行させる   5 年と 11 か月前 · 表示

    サムネイル

    CCScheduler や CCActionManager などに渡すオブジェクトは SelectorProtocol を継承しているクラスでなければならないので、これを継承したクラスを作成する。CCScheduler#scheduleUpdateForTarget でオブジェクトを登録 すると、登録したオブジェクトのSelectorProtocol#update メソッドがフレーム毎に呼ばれる。

    こんな感じのコードをかくと、フレーム毎にコンソールにログテキストが表示される。

    CCNodeの scheduleUpdateメソッドも scheduleUpdateForTarget によって updateメソッドを登録している。

    ※このコードはメモリリークしてしまう。実際に使うときはオブジェクトをどっかに保持して、適切なタイミングで解放する必要がある。

  • もっと読み込む