基本的な質問のcocos2d-X

基本的な質問のcocos2d-X

1、Cocos2d-xは、クロスプラットフォームを実現する方法ですか?

AppDelegateクロスプラットフォームのプログラムのエントリとして、このパッケージ、異なるプラットフォーム上の異なる実装のパッケージの上に別の層を行います。たとえば、私たちは通常、主な機能によるプログラム実行の開始だと思うし、私たちはproj.linuxディレクトリ内に存在しmain.cppにファイルことがわかり、探しに行ってきました。CCApplicationでmain.cppにで:: sharedApplication() - >ファイル名を指定して実行();実行するために始めたこの1ルックス、この1つはマークされ、cocos2d-xのプログラムは、今sharedApplicationを達成するために配置されている()メソッドは、我々CCAplicationクラスなぜCCApplication :: sharedApplication()である、その前に、私たちはそのコンストラクタに呼び出す必要があり、run()メソッドを呼び出すと、sharedApplication()メソッドから見ることができ、または実行することはできません - >ファイル名を指定して実行();の前に私たちすべての最初の文AppDelegateアプリを持っている、とAppDelegate変数を作成する理由は、オブジェクトのサブクラスを作成するときに、そのコンストラクタを同時に呼ばれ、AppDelegateがCCApplicationサブクラスである、親クラスのコンストラクタが実行されます、それはAppDelegateになりますCCApplicationオブジェクトは、静的変数を割り当てているが、我々はそうAppDelegateの間で達成されるrunメソッド内CCApplicationの最初に呼ばれ、AppDelegate applicationDidFinishLaunching方法で達成しました。そして、我々は、この方法では、我々はCCDirectorに、制御した後など、その後、フルパワーを、いくつかの変数を初期化する最初のCCSceneシーンを作成:: sharedDirector() - >メインループ()を、方法。

cocos2d-Xフォルダで、プラットフォーム間のパッケージ・インターフェース内に格納されているプラ​​ットフォームフォルダが、存在します。そこCCApplicationProtocol.hヘッダは、CCApplicationを含むクロスプラットフォームのストレージのニーズの関数であるアンドロイド、IOS 3つのフォルダを、Win32のを持っているサブディレクトリ、カレントディレクトリ内のファイル。AppDelegateクラスはCCApplicationから継承されます。また、から継承されたCCApplication

CCApplicationProtocol。CCApplicationによって継承された定義CCApplicationProtocol applicationDidFinishLaunching仮想メソッドでは、AppDelegateを実現しました。クロスプラットフォームを実現するために。

Java入力→JNI→C ++→C ++入力処理(APIが実装された)→C ++出力出力→JNI→ジャワ

Androidのプラットフォームで開始cocos2d-X。Androidプラットフォームのエントリポイントはproj.android / JNI / hellocpp / main.cppに、上記と同等見出すことができます。これAndroidプラットフォームで実現異なるパッケージを持って、デフォルトでは、Javaの開発を使用することで、JavaはJNIでC ++プログラムを呼び出すために使用することができ、異なるプラットフォームによるものですmain.cppにファイルのmain関数の内部を見ると、ここでは、あまりにも正式そうしませんでした。私たちはただ知っている必要がありましょう、アンドロイドは、このように、それは我々がAndroidプラットフォームの入り口を-X cocos2dプログラムの先頭となり、様々な紆余曲折を通じて、アプリケーションによって開始され、最終的Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit関数に続いています。その他の入り口プラットフォームプログラムパッケージは、実装異なる他のプラットフォームが含まれている必要があります。

二十から四Cocos2D-X共通のインタビューの質問で_Cocos2D-X面の質問_Cocos2D-Xのゲーム開発_Cocos2D-X_部門、家庭

プロセス2.cocos2d-Xプログラムの終わり?

ポップアップ、または直接呼び出しCCDirector ::終了()、ゲーム内で最後のシーンをさまざまなロジックを維持するためのメインループの途中から実行し、時間を実行して、メソッド、クリーンアップゲームをトリガー、purgeDirector実行方法は、このように終わりますCCEGLView直接の出口(0)を実行するためにそのエンド()メソッドを呼び出して操作、(異なるパッケージ、PC用のOpenGLパッケージ、OpenGL ESのための携帯端末のパッケージで異なるプラットフォーム);したがって、プログラム全体の動作を終了、終了プログラムのプロセスを。(内部端のAndroidプラットフォーム()メソッドJNI方法terminateProcessJNI()は、現在実行中のプロセスを終了ダイレクトとしての機能、Javaで実装された関数を呼び出し)

3、cocos2d-xのメモリ管理?

二つの主要なインテリジェントなメモリ管理手法がありますが、1は1つがゴミで、参照カウントです。Cocos2d-xは参照カウントメカニズムに使用されます。この目的のために独自のルートクラスCCObjectを実装し、各オブジェクトは、カウンタのライフサイクルを制御するための参照を含む、CCObjectメンバ変数m_uReferenceです。

もし場合、基準呼解放()メソッドマイナス1の端部1によって保持参照オブジェクト()メソッドを呼び出す必要がある場合m_uReferenceは、コンストラクタは、1(自己参照ではなく、実際の使用)のカウンタ値への参照を作成するときのために。自動解放()メソッドは、(緊急の必要があるファクトリメソッドを作成して)自動的に柔軟なガベージコレクションのプール(CCAutoReleasePool)内のオブジェクトを回復します。各フレームの端部は、自動回復プールオブジェクトが解放後に実行されたときに()

自動解放(自動プールを解放するオブジェクトコードを追加する)方法:CCPoolManager :: sharedPoolManager() - >のaddObject(本)

オブジェクトがメソッドのメモリプールを作成するために追加された後、オブジェクトの所有権は、既にメモリプールに属し、そして私たちは、実際にポインタを返さない独自のメインループのメインループは非常に重要なことをしたん、それは自動解放プールのトップをポップ、この時間です唯一、すべてのオブジェクトのすべてのメモリプールを解放することである。このような原理に依存することです、我々は長い上層のと同時に、必要なときに、このオブジェクトは、リリースを修正することができます知って、自動解放プール内のオブジェクトを配置するのを保証することができaddChild親で試合後に所有権の対象となっているが、また、正しいオブジェクトが削除されないことを保証します。

自動解放が1つのフレーム内で多数のオブジェクトを生成した場合、それが減少し、電池性能の回復になります。そのため、集中的な世代の自動解放オブジェクト(通常サイクル)前後の領域に、我々は最高の手動リカバリ・プールを作成して解放することができます。

CCAut0m_pReleasePoolStack

CCPoolManager :: sharePoolManage() - >プッシュ()

にとって(){}

CCPoolManager :: sharePoolManage() - >ポップ()

CCAutoreleasePool

4、どのようにCocos2d-xのレポートがクラッシュした後のゲームのために、サーバーに送り返される方法を主張し、メモリリークを処理し、ハンドルのメモリリーク検出ツールで

VSのメモリリーク検出ツールのVisualリークディテクタ、プログラムでメモリリークを見つけるために楽器を使用してXcodeのIOSメモリリークの下で

5、Cocos2d-xの3バージョンが特徴?

バージョン3.0:1は、新しいレンダリングシステムが存在します。

2、マルチスレッドのサポート、および新しいGPUプラットフォームをサポートするのは簡単。

3、より速く、より効率的でラベルのテキストのレンダリングを維持しやすいです。

4、それは新しい、統一されたイベントディスパッチャを持っています。

図5は、より親しみやすいC ++開発者のための互換性ObjectCに、そしてより多くの配慮の検討を低減します。C ++でのベストプラクティス、ObjectCにモードを交換してください。ハンガリー語の表記を削除します。

6、メニューとアクションラムダ式は、入力として受け入れることができます

図6に示すように、cocos2d-X CCScene CCLayer CCSprite CCNodeeに記載します

CCNodeはCCScene、CCLayer、CCSprite基本クラスは、視覚的な症状抽象クラスではありません。定義されたレンダリングツリー構造を容易にするためにクラスがあります。CCScenceはCCLayerとCCSpriteを置くことができるシーンクラス、です。もっとscenceを置くことができるアプリ、一つだけscenceが活性化されます。CCLayer層はCCSpriteを置くことができるクラスです。CCSpriteウィザードは、最小単位です。

7、CCActionとCCActionMessagerの話

CCActionベースクラスアクションである、すべての動きは、それがアクションのオブジェクトを表す、CCNodeにおけるアクションの役割を作成し、このクラスから派生しています。メイン使用CCFiniteTimeAction実行されるアクションの数が限られ、アクションの実行後に終了する、時系列での一連のアクションを実行することである。CCFiniteTimeActionがCCActionから継承されました。CCFiniteTimeActionはCCActionInstanse(基底クラスの瞬間的な動作)、及びCCActionInterval(遅延アクションベースクラス)に分けます。

CCActionInstanse:何も特別な、CCActionInterval主な違いとは何の実装プロセス、瞬時に完了したアクションの実装が存在しないことである。CCActionInterval:実装はいくつかの時間(またはプロセス)がかかります。私たちは、ほとんどが遅延アクションで使用し、それは別途説明します。

CCActionMessageは、一般的に、直接この単一の実施形態を使用していない、アクションのすべての単一の実施形態を管理するのではなく、CCNodeインタフェース、(CCNiode *) - > runAction関数()

runAction関数機能で、新しいCCActionとその管理CCActionMessage操作によって管理対応するターゲット動作ノードテーブルに追加。

m_pActionManager-> addAction(アクション、これ、m_bIsRunning!)。再调用アクション(Action)> startWithTarget(をpTarget)。

CCActionMessage初期化はCCDirectorの初期化で行われています。内部はCCActionMessageが定期的にタスクスケジューラを時限CCScheduleによって更新登録です。そう

各フレームリフレッシュを更新するための更新方法は、CCActionMessageをトリガーすると、システムはすべてのアクションにアクションテーブルを横断して、アクションの設定メソッドを呼び出します。

しかし、あなたはCCNodeの目標を操作したい場合は、サブクラスではないか、一時停止/再開アクションたいことCCActionMessagerを使用する必要があります

8、お気に入りのcocos2d-xのどんなツール?

TiledMap(マップエディタ)ParticleEditor(パーティクルエディタ)cocosBuilder(ビジュアルエディタ)テクスチャパッカー(絵の組み合わせツール)plistEditorツール

9、簡単なCocoStudio

CocoStudioはUIエディタ、アニメーションエディタ、シーンエディタとデータエディタを備え、ツールCocos2D-Xエンジンのセットです。主に芸術、シーンエディタとデータエディタのUIエディタやアニメーションエディタは、顔のゲームプランに直面している、これらの4つのツールが一緒に、さらなる発展の努力を減らすのに役立つ開発者に完全なゲーム開発システムを構成します開発効率を向上し、開発コストを削減します。

UIエディタ:現在のすべてのコントロールのサポートはCocos2D-Xを、多重解像度適応合併とカスタムUIの壊れたビューをサポートしながら。

アニメーションエディタ:、Flashアニメーションを直接に及びそうに統合壊れチャートをサポートしながら、骨のキーフレームアニメーション、フレームアニメーションシーケンスをサポートしています。

データエディタ:分解により計画値のExcelの表には、その後、Cocos2D-X認識できる形式に変換しました。

シーンエディタ:あなたは私たちの前にCocoStudio他のリソースエディタ、編集、現在のゲームシーン、ライブプレゼンテーション、WYSIWYGを統合することができます。また、サードパーティ製のツールモードをサポートしています。

10、簡単にCCSpriteframeCache CCSpriteBatchNode、およびCCNode、CCSpriteを描画する方法であると言いますか?

CCSpriteframeCache:ウィザードボックスフレームバッファ、バッファ・ウィザードボックスフレームは、主に合成テクスチャ画像の視野外破壊複数に対処します。大きなマップがより張マップよりも含まれているために使用CCTextureCacheには適していません。

すべてのCCSprite CCSpriteBatchNodeはテクスチャマップと組み合わせて使用​​する必要がありますが、FPSのゲームを向上させることができますので、1時間でレンダリングが、CCSpriteにCCSpriteBatchNodeに追加されます。

11、画面適応cocos2d-Xソリューション?

画面サイズとアスペクト比:適応要因である私たちの画面を決定します

CCEGLView :: sharedOpenGLView() - > setDesignResolutionSize(720、480、kResolutionShowAll)。

CCEGLView :: sharedOpenGLView() - > setDesignResolutionSize(720、480、kResolutionExactFit)。

kResolutionUnKnown:

これはcocos2d-Xで書かれたデフォルトモードで、どんな治療をしなかった、この場合には、ゲーム画面のサイズ比が制御できません

kResolutionExactFit:

フルスクリーン表示を犠牲にし、画質を維持しつつ、描画手段の相対的な極端なケースの画像が、ウィザード正方形、長方形が表示さになるだろう、円形、楕円形、固体このモードは推奨されないなっていました使用しています。

kResolutionShowAll:

4週間黒エッジ処理を残りのデザインのアスペクト比を維持するために、そのような異なる画像の割合が完全できません。魚やクマの足の両方を持つことができません

kResolutionNoBorder

フルスクリーンのゲーム画面;第二:このモードでは、2つの問題の一つ解決することができるゲームを設定するときに黒の左端を埋めるために、kResolutionShowAllは分化と比較して、アスペクト比を維持し、画面をわずかに拡大されています同時に発生する可能性があり、パッド入りの黒側の黒いバーを満たし、そうすることの結果を想像することができ、画像の一部の画面で出てくるの上に別の方向があるでしょう。

12、cocos2d-x吸蔵ゲームやSQLiteのCCUserDefault

CCUserDefault永続溶液Cocos2d-Xエンジンは、すべてのゲーム共通のユーザストアの設定情報が提供されます。このような音楽やサウンド設定など。それは本質的にXMLファイルです。コードは1行だけを使用します:

CCUserDefault :: sharedUserDefault() - > setIntegerForKey(「コイン」、コイン-1);

短所:各セットとXMLツリーを取得するには全粒、高効率、および値型は制限がありますが横断します、だけのような基本的なタイプはintとfloatをサポートしています。

SQListはオープン、軽量及び他の特性を有する、かつ確実にローカルに格納された高速データ用の組み込みデータベースです。唯一のコアインタフェース機能:

int型sqlite3_exec(sqlite3の*、constのchar型SQL *、INT(コールバック)(空、int型、char型**、文字**)、void *型、char型** ERRMSG)。

機能があります:BOOL sqlite3_open(のconstのchar *は、sqlite3の*)。

sqlite3_close(sqlite3の*)。

13、自動解放との間の差を放出します。

すぐに現在のオブジェクトの参照カウントが0未満である場合、オブジェクトは、操作の参照カウントをデクリメントリリースする、それが解放されます。

自動解放が自動的に現在のオブジェクトの参照カウントが0以上、解放されている場合解除操作を行うの一端操作が参照カウントをデクリメントする場合、プール内に置かれた物体を放出します。

詳細cocos2d-xのメモリ管理を詳細に3番目の質問で回答することができます。

原則キャッシュメカニズムは、14は何ですか?

ハッシュマップのメモリストレージ、各リソースプラスキーを行うには、新たに追加されたリソース。たびに、リソースの読み込み、最初のリソースが存在する見つけるには、そこに直接リターンがある、またはメモリにロードされました。

15、画像圧縮方法メモリオーバーヘッド方法を減らします

タイムリーなリリース、漏れの低減、資源の再利用、遅延ロード、ロード、などが課

JPGテクスチャがロード時に、リアルタイムテクスチャPNG形式に変換されますので、1)、JPGを使用しないでください。

2)すべてのテクスチャがあらかじめロードされました。

3)また、addImageAsyncメソッドを使用し、リソースの非同期ロードをサポートするテクスチャCCTextureCacheクラスバックグラウンドをロード。あなたは、非同期ロードのテクスチャの端は、通知することができたときにそのことを、コールバックメソッドaddImageAsync方法に用語を追加することができます。

4)あなたは機能と呼ばれるシーンの切り替え時にシーンを切り替えたとき、あなたがAからBシーンのシーンに切り替えた場合、総メモリあまりにも一般的なリリースのリソースを防ぐためにリリースされたすべてのメモリを置くことができる前にゲームシーンの多くは、シーンを持っている場合オーダーB ::のinit() - > A ::出口() - > B ::フォーカス取得時()。トランジション効果は、例えばCTransitionJumpZoom :: transitionWithDurationような関数とすることができる場合は、関数の呼び出しシーケンスがBとなる::のinit() - > B ::フォーカス取得時() - > A ::出口()。

そして、第二の方法は、そうでない場合は、過剰摂取、おそらくタイトなメモリとクラッシュの、2つのシーンが一緒に追加されたリソースの瞬間があるでしょう。

5)画像エッジ長Nが可能なように2の累乗を保持し、パッケージが一杯であるように、ステッチ画像に試みます。私たちは大きな画像にできる限り画像にパッケージの論理的な関係があることを知っているが、他の点は、パッケージ化されたときには、アカウントに配布層を取るということです。効率は使用CCSpriteBatchNodeであってもよいレンダリングするためにので、画像を1つのレベルに配置されている同じBatchNode、それは別のplistで包装各画像の階層関係に基づいていなければなりません。時にはメモリと効率の両方を持つことができない、唯一のバランスをしてみてください。

6)を避けるローディングPNGおよびそれらの間の少なくとも1のJPGテクスチャ(待機)に一つ一つは、参照カウントを待っているとして、一時的なUIImageオブジェクトがメモリの圧力を低下させる、解放されます。

のみpvr.cczの形式を使用して、テクスチャPVRフォーマットを使用する場合は7)、それは超高速スピードをロードしますので!他のフォーマットを使用して、ロード時間と少ないメモリを使用しないでください!

8)テクスチャ・メモリ・フットプリント・ソリューションを低減するための最速の方法は、負荷への16ビットの色深度テクスチャとしてそれらを使用することです。cocos2dテクセルデフォルトフォーマットは、32ビットの色深度です。色深度が半減されている場合は、メモリの消費量が半分に削減されます。そして、これはレンダリングの効率を高めるためにもたらすでしょう。

16、Luaの話

図17に示すように、様々なデザインパターンは、Cocos2d-Xを使用しました

Observerパターン:通知センター

Decoratorパターン:アクションとその後継クラス間の関係

シングルトン:監督は通知センターにも、sharedDirectorを持ってsharedNotificationCenter

ファクトリメソッド:メソッドを作成します。

18差、UnityとCocos2d-X

Unity3Dのハイライトは、簡単にオーディオ/ビデオを扱う多くのサードパーティ製のプラグインと互換性のある各プラットフォームのワンクリックでの展開、ビジュアルプログラミングは、リソースを簡単にインポートしています。Cocos2d-xは、開発者のよく発達したコミュニティを持つことで、簡単に、さまざまな問題の解決策を見つけることができます。背骨、TexturePacker、Cocostudioおよびその他のツールは、リソース、UIのさまざまな問題を処理するために簡単にエンジンを作ります。そしてまた、道のオープンソース開発者は簡単に、独自のプロジェクトエディタを開発します。

使用:Unity3D任意の機能が達成するために、個々の成分に分離することができる、自分のニーズに応じてカスタマイズするために変更することができるオープンソースのCocos2d-xの利点。

ビジュアルエディタ:

より良い視覚的な編集のためにUnity3Dのサポートは、スクリプト時間はすぐに、あなたはすぐにココススタジオを立ち上げた補足社説を可視化するために、デモCocos2d-xは、より多くの書き込みコードレベルにあるプロトタイプを作成することができます。

19、携帯ゲームデザインのステートマシン設計のアニメーションカーブ、カメラ、MVCを使用する方法のようなゲーム

モバイルゲームのために最適化する方法を20、

最適化メモリの最適化は、一般的にメモリの最適化と最適化のフレームメモリに分割されています。

フレーム数の最適化は、メッセージループの最適化における論理演算と考えることができ、A *は、プルーニングと考えることができます。またはタイムスライスによって、

ボリュームとメモリの最適化の実行は以下のとおりであります

そのような複数のリソース画像の合成などのツールを使用してTexturePacker。

そのような32ビットの色深度16ビットの色深度として、PNG形式の圧縮ツールを使用して、あなたが絵をパッケージ化する前に、各画像を圧縮して画質を減らすように変更しました。

異なるプラットフォーム用の画像は、特定の圧縮形式を使用します

プロジェクトは、フレームシーケンスにおいてより会計処理されている場合、ドロップフレームモードを最適化するために使用することができます。

画像を拡大縮小、原画像は、元の70%から80%に減少し、その後の画像エディタを使用して増幅され、

図それは、それによって操作量を減少させる、マップエディタ、エディタを利用するメモリの使用量を低減することができる、大きなにスプライス。

21、どのように「感じ」を、ゲームを向上させるには?

ゲームの感触は、一般的にインフルエンザとの戦いを意味し、その後私はゲームオブジェクトを爆破する時に、ゲームの反発効果を生成するために、オブジェクトは、オブジェクトの気持ちがヒットしました。私たちが解決するには、メッセージとコールバックメカニズムを使用する必要が忌避効果を生成するために来たときに、別のゲームオブジェクトを爆破する(例えば拳など)のオブジェクトを作るために、右の時間を制御します。

データベース内のすべての機器を人を格納するためにどのように22、

文字のIDと機器IDのテーブルを確立します。

JSON文字列に人のすべての機器IDのシーケンスは、文字フィールドとして格納されます。バグがまた表示され、プレイヤーがすべての機器を失うことができます一度2つの最大の違いは、機器を変更する場合、最初の1つのレコードのみに影響を与えることがあり、2番目は、すべての機器に影響を与えます。どちらも長所と短所を持っている使用シナリオに基づいて自分を量ります。

cocos2d-xの圧縮パケットのサイズを小さくする方法23、?

24、どのようにゲームメモリの使用量を削減するには?

リリース元の2件の記事 ウォンの賞賛0 ビュー159

おすすめ

転載: blog.csdn.net/lynn807961674/article/details/105115954