問題タブ [ccscene]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cocos2d-iphone - cocos2d シーンの割り当て解除と ccb ノード
CCScene
メソッドを使用して CocosBuilder テンプレートから作成されたノードを 1 つだけ含む単純なものがあります[CCBReader nodeGraphWithFile:]
。
これまでのところ、シーンのメソッドで ccb ノードを解放していませんでしたdealloc
。しかし、割り当てプロファイラーで、シーンを数回プッシュ/ポップするとメモリリークが発生することに気付きましたCCDirector
。
release
このメモリ リークは、シーンのdealloc
メソッド内のノードを実際に使用すると解消されます。
ノードを保持/初期化していないのに、なぜノードを解放する必要があるのですか? 私が誤解したことがありますか?
replace - 同じCCSceneが2回交換された後、ゲームがクラッシュする
それは少し単純な問題ですが、私はそれを理解することができませんでした。
1->アプリケーションの開始(MainMenuシーンを使用)
2->開始(サブレベルのシーンが置き換えられます)
3->最初のレベルを選択します(Level1Sceneが置き換えられます。ゲームが開始されます。)
4->メインメニューに戻ります。(MainMenuシーンが置き換えられます)
5->開始(サブレベルのシーンが置き換えられます)
6->第1レベルを選択
7->クラッシュ。
box(32842,0x3f5c9d98)malloc:*オブジェクト0x4bed44のエラー:解放されたオブジェクトのチェックサムが正しくありません-オブジェクトは解放された後に変更された可能性があります。*デバッグするmalloc_error_breakにブレークポイントを設定します
シーンaからbを置き換えると、リリースされますか?
私の知る限り、pushSceneだけがシーンをメモリに保持します。
シーンとレイヤーは自動解放オブジェクトです。replaceSceneが呼び出されたときに解放する必要があります。(シーンの置き換え中に前のシーンが解放された場合。)
ios - ViewController は CocosBuilder によって作成された CCScene のインスタンス メソッドにアクセスしますか?
例を挙げて説明します。
たとえば、CocosBuilder でScene.ccbi とそのカスタム クラスSceneクラスを作成しました。
Scene header内で、メソッドを定義しました:
AppDelegate /ViewControllerで、CCBReader を呼び出して CCScene を作成します。
つまり、Scene.m にはそのインスタンスがあります。
この時点で、AppDelegate/ViewController は Scene のインスタンス メソッドにどのようにアクセスできますか? たとえば、ViewController 内:
ありがとうございました!
cocos2d-iphone - 1つのシーンでのCCLayer間の通信
別々の.mファイルで相互に通信する必要がある2つのCCLayerがあります
- Level1.m(Level1 CCLayerを使用したCCScene)-タイル化されたマップとプレーヤーのスプライトを保持します
- HUDLayer.m(Level1.mの上部へのリンク)-すべてのボタンを保持します
HUDLayer.mで次のコードを取得して、Level1.mのプレーヤースプライトと通信するにはどうすればよいですか?
私がこれに何日も立ち往生しているのを手伝ってください。少なくとも誰かが私を正しい方向に向けることができれば。ありがとう!
iphone - HUD レイヤーから iAd を移動できないのはなぜですか?
広告を画面外に移動する機能を備えた iAd を含む HUD レイヤーがあります。このコードを使用して、私が持っているシーンの 1 つに HUD レイヤーを追加します。
hudLayer は、iAd クラス ファイル名です。
別のシーンに移動すると、別のシーンに HUD レイヤーを追加しても、HUD レイヤーはそのまま残ります。このコードで iAd の位置を移動して、この問題を解決しようとしました。
シーンに追加した HUD レイヤーには、シーンを別のシーンに切り替える関数を呼び出すボタンがあり、次のコードを使用して上記の関数を呼び出します。
関数は呼び出されますが、iAd は動きません。HUD レイヤーの init 関数から同じ関数を呼び出してみましたが、iAd は移動しますが、別のシーンで呼び出しても移動しません。
objective-c - 間違った向きで読み込まれた Cocos2d シーン
いくつかの UIKit ビューの上に cocos2d シーンを作成しようとしています。cocos2d 2.0 CCDirector は UIViewController のサブクラスであることを理解しているので、それをサブビューとして追加するだけです。
appDelegate でシーンへの切り替えを処理するためにこの関数を作成しました (現在、http://www.raywenderlich.com/4817/how-to-integrate-cocos2d-and-uikit に続く MainWindow.xib のデリゲートです)。 :
だから私はこのコードからかなり欠けています。しかし、これで、 http://i.stack.imgur.com/pubWE.pngをロードするシーンに似たものが得られます
私の質問は:
1: 正しい方向に進んでいる場合
2: その場合、次のステップはシーンの向きを手動で調整することですか?
2.1: どうすればいいですか :)
iphone - CCTransition 中に CCScene を置き換えることは可能ですか?
実行中にonで呼び出すreplaceScene:
と、使用中のどのシーンでも呼び出されず、また、この操作の後、どのシーンも表示されなくなります。CCScene
CCDirector
CCTransition
dealloc
サンプルプロジェクトへのリンクはこちら
この動作を取得する最短の方法は、そのような方法です(問題を再現することを意味します):
私の質問は: がCCTransition
によって実行されているときにシーンを置き換える実行可能な方法はありCCDirector
ますか?
CCDirector
シーン置換の終了を通知するデリゲート コールバックを実装しましたが、実行中に iPhone のホーム ボタンを押しても、これは呼び出されませんCCTransition
。
答えが「いいえ」の場合、下記の目標を達成するための cocos2d-iphone の方法はありますか?
applicationDidEnterBackground
元々、この問題は、 (バックグラウンド タスクとして) または の場合に「ロード シーン」を追加したかったときに発生applicationWillEnterForeground
しましたが、バックグラウンド実行とは関係ないことに気付きました。私の最終的な目標は、ゲームが Game Center 認証ハンドラーが呼び出されるのを待っている間、シームレスなユーザー エクスペリエンスを提供することです。バックグラウンドから復帰したアプリの最初から表示される「ロード シーン」で十分です (ユーザー インタラクションを防止するだけでなく、さまざまな方法で実行できますが、以前のゲーム UI はユーザーに表示されません)。ただし、このソリューションは上記の問題の影響を受けやすくなります。ユーザーがシーンの移行中にホーム ボタンをタップすると、ゲームをバックグラウンドから移動した後に非常に奇妙な画面が表示されます。
編集: さらに調査した結果、 中にシーンを置き換えるための満足のいく解決策が見つかりませんでしたが、@LearnCocos2D (Steffen に感謝) が提案したように、呼び出すのではなく、可視の に「読み込み」を追加することでCCTransition
上記の問題を解決しました。これは完全ではありません。シーンの遷移中に子を追加すると、奇妙な結果が発生したときに (実行時間の意味で) 狭いウィンドウがまだあるためです。ただし、シーンを置き換えるよりははるかに優れています。新しいデバイスは非常に高速であり、3GS よりも高速なデバイスで「ホーム ボタン」をクリックする問題を再現するのは非常に難しいため、3GS でゲームをテストする場合にのみ関係があることを述べたいと思います。replaceScene
CCLayer
CCScene
CCTransition
ios - UIViewControllerが表示されている間にCCSceneを置き換える方法は?
私には 2 つCCScenes
の があります。それらを A と B と呼びましょう。シーン A にいるときは、UIViewController
ビデオ プレーヤーでインスタンスを提示します。次に、その UIViewController からシーン B に移動します。これがその方法です。
私が必要とするのは、私のUIViewController
. しかし、残念なことに、私はいつもシーン A に一瞬連れて行かれ、その後にシーン B が表示されます。私が理解している限りでは、viewController が から削除された後にのみ機能するようにUIViewController
ブロックを表示しています。そのため、viewController がまだオンになっている間に非同期に置き換える方法を見つける必要があります。何か案は?Cocos2D
CCDirector
CCScene