0

スプライトが大きすぎて一度にロードできないため、iOS/Kobold2dプロジェクトでCCBigImageを使用しています。残念ながら、アプリケーションを実行すると、で停止します

ERROR: Uncaught exception -[CCTextureCache
addImageFromAnotherThreadWithName:target:selector:]: unrecognized
selector sent to instance 0xa17d010

plistファイルをCCBigImageにロードするとき。私はそれを

CCBigImage* bg = [CCBigImage nodeWithTilesFile:@"bg1dot5.plist" tilesExtension: @"pvr.ccz" tilesZ: 0]

CCBigImage load()を呼び出します。このメソッドは

[CCTextureCache sharedTextureCache] addImageFromAnotherThreadWithName: _imageName
                                                               target: self
                                                             selector: @selector(loadedTexture:)

それは最終的に指定された例外につながります。「CCTextureCache+CCBigImageExtensions.h」をCCBigImageをロードするソースファイルにインポートしたので、指定されたセレクターがCCTextureCacheに追加されることを期待していましたが、明らかにそうではありません。

Kobold2d1.1.0とXCode4.3.3を使用しています(すべての最新バージョン)。そのセレクターを含めるために他に何かする必要がありますか?

私も電話しました

[[CCTextureCache sharedTextureCache] addImageFromAnotherThreadWithName:@"" target:nil selector:nil];

直接、拡張ヘッダーファイルをインクルードしたため、プロジェクトは正常にコンパイルされますが、CCBigImageをロードした場合と同じ例外が発生します。

4

1 に答える 1

2

Objective-Cカテゴリを含む静的ライブラリはiOSアプリと強制的にリンクする必要があります(Macアプリにはこの問題はありません)。そうしないと、カテゴリメソッドを解決できず、説明したエラーが発生します。詳細はこちら。

特にKobold2Dでは、-all_loadフラグを使用することはお勧めしません。これにより、アプリで使用していないコードも含め、利用可能なすべてのコードがアプリに盲目的にリンクされます。それは基本的にリンカーを盲目で愚かにし、アプリのサイズはおそらく数メガバイト大きくなります。

将来のKobold2Dバージョンでは、cocos2d拡張機能のフォースリンクを追加します。今のところ修正はFrameworksAndLibraries.xcconfig、BuildSettingsグループのKobold2D-LibrariesプロジェクトのXcodeでファイルを編集することです。

フレームワーク/ライブラリが強制的にロードされるセクションを見つけます。

LINK_WITH_ADMOB = $(KKLIBROOT)/GoogleAdMobAdsSDK/libGoogleAdMobAds.a
FORCE_LOAD_COCOS2D = -force_load "$(BUILT_PRODUCTS_DIR)/libcocos2d-ios.a"
FORCE_LOAD_KOBOLD2D = -force_load "$(BUILT_PRODUCTS_DIR)/libkobold2d-ios.a"
FORCE_LOAD_KOBOLDSCRIPT = -force_load "$(BUILT_PRODUCTS_DIR)/libkoboldscript-ios.a"
FORCE_LOAD_KOBOLDSCRIPTWRAPPER = -force_load "$(BUILT_PRODUCTS_DIR)/libkoboldscriptwrapper-ios.a"
FORCE_LOAD_ISIMULATE = -force_load "$(KKLIBROOT)/iSimulateSDK/libisimulate-4.x-opengl.a"
FORCE_LOAD_COCOS3D = -force_load "$(BUILT_PRODUCTS_DIR)/libcocos3d-ios.a"

KKFW_IOS = $(KKFW_SysConfig) $(KKFW_AVFoundation) $(KKFW_CoreGraphics) $(KKFW_CoreLocation) $(KKFW_MediaPlayer) $(KKFW_OpenGLES) $(LINK_WITH_ADMOB) $(FORCE_LOAD_KOBOLD2D) $(FORCE_LOAD_KOBOLDSCRIPT) $(FORCE_LOAD_KOBOLDSCRIPTWRAPPER) $(FORCE_LOAD_COCOS2D) 

次に、「KKFW_IOS =…」行の前に別のFORCE_LOAD_…エントリを追加して、cocos2d-extensionsライブラリを-force_loadします(これはすべて1行で、読みやすくするために改行を追加しました)。

FORCE_LOAD_COCOS2D_EXTENSIONS = 
           -force_load "$(BUILT_PRODUCTS_DIR)/libcocos2d-extensions-ios.a"

次に、この新しいFORCE_LOAD_COCOS2D_EXTENSIONSエントリを「KKFW_IOS =…」行の最後に追加します(読みやすくするために省略形)。

KKFW_IOS = $(KKFW_SysConfig) … $(FORCE_LOAD_COCOS2D_EXTENSIONS)

これで問題が解決し、CCBigImageカテゴリメソッドを使用できるようになります。

于 2012-06-23T10:18:10.590 に答える