0

2 つのシーン (mainMenu) とその他 (HelloWorldScene) があります。シーンの置換を使用してシーンを切り替えることはできますが、2 回目にロードしようとすると、init メソッドが呼び出されません。

これが私のこれまでの努力です。

//In my mainMenu.m

-(void)starting{

[[CCDirector sharedDirector] replaceScene:[HelloWorldLayer scene]];

}

//and in my HelloWorldScene.m file

-(void)goMain{

[[CCDirector sharedDirector] replaceScene:[mainMenu node]];

}

私の質問は、シーンを置き換えるときに、そのクラスの -(id)init メソッドをどのように呼び出すかということです。

4

3 に答える 3

1

これをしないでください:

[[CCDirector sharedDirector] replaceScene:[mainMenu node]];

既存のオブジェクト (mainMenu) を再初期化しようとしています。同じノードを使用したい場合 (私が追加するのはかなり珍しいかもしれません)、次のようにする必要があります。

[[CCDirector sharedDirector] replaceScene:mainMenu];

しかし、init が呼び出されることを期待しているので、メイン メニューの新しいインスタンスを作成する必要があります。これは、[HelloWorldLayer シーン] と同じ方法で、ノード メッセージをクラス自体に送信することによって実現します (MainMenu がその名前であると仮定します)。クラス):

[[CCDirector sharedDirector] replaceScene:[MainMenu node]];
于 2012-02-04T22:30:59.837 に答える
0

init メソッドが呼び出されましたが、一部の変数がリセットされませんでした。メソッドで手動でリセットする必要がありました。

HellowWorldLayer のハンドルを作成することで、そのクラス内で定義された任意のメソッドを呼び出すことができます。

HelloWorldLayer *hw = [HelloWorldLayer node]; // This is how we create the handle.
[hw Testing]; // This is how we call any method inside.

[[CCDirector sharedDirector]replaceScene:[CCTransitionCrossFade transitionWithDuration:0.5 scene:hw]]; // Use that handle for changing the scene

うまくいけば、それは誰かを助けるでしょう。

于 2012-02-06T05:22:16.030 に答える
0

通常、init メソッドは、オブジェクトが最初に作成されたときにのみ呼び出されるように設計されています。シーンに戻るときは、独自の -(void)switchBack メソッドを作成し、それを呼び出してシーンを適切に更新できます (すべてを再追加したくないため、これは init メソッドとは大きく異なる可能性があります)。 )。

私はこの問題を抱えていました。結局、コストがかからなかったので、シーンを切り替えるときに新しいシーンを作成しました (そして現在のシーンをリリースしました)。これは、シーンの切り替え後に未使用のテクスチャをすべて解放できるので良かったです。更新について心配する必要はありませんでした。

于 2012-02-03T12:05:33.190 に答える