0

ゲーム制作におけるオブジェクト管理について知りたいです。Cocos2d-x を使用しています。

シーンがあり、いくつかのレイヤーがあります。これらのレイヤーは、それぞれ複数のレイヤーで構成されています。

ユーザーは、タッチ イベントを介してレイヤーにオブジェクトを追加します。

私はすべてを管理するのに苦労しています。

ゲーム プレイ レイヤー (背景のようにゲーム プレイ全体を構成するレイヤーではない) を含むベクターを作成する方法の 1 つです。各レイヤーには、レイヤー上にあるオブジェクトとそれぞれのステータスの独自のベクターがあります。

では、別のレイヤーで起こっていることに基づいて、別のレイヤーのステータスに実際に影響を与えるにはどうすればよいでしょうか。

ゲームで起こっていることを保存する良い方法と、それらのオブジェクトにアクセスしてそれらを変更できるようにすることの組み合わせに苦労しているのではないかと思います。

複数のCCSceneを作成するCCSceneを作成できますか? さまざまなレイヤー間をスワイプする代わりに、ユーザーはシーン間を前後にスワイプし、親の CCScene を使用して、作成された他の CCSenes で何が起こっているかを把握します。または、CCNode を作成してから、複数の CCSscenes を作成し、ノードを使用して何が起こっているかを追跡しますか。

4

1 に答える 1

1

あなたが探している解決策は、クラスをより効果的に使用することだと思います。私は現在、プレーヤーが 4 つの「廊下」で進行中のアクティビティを管理する必要があるゲームを持っています。各廊下は 3 つの「行」で構成され、各行にはさまざまな悪者、善人などが含まれています。スワイプで廊下を循環し、一度に 1 つの廊下しか表示されないため、各廊下は独自のハドレイヤーです。廊下に散らばる悪者の群れを管理することは悪夢であり、非常に非効率的でした。そのため、メイン関数にハードコードされた配列を多数持たずに、悪者をグループに分割する良い方法が必要でした.... 方法は次のとおりです。それをやった:

「self」内には 4 つのホール hud レイヤーがあり、各ホール内には NSMutableArrays である 3 つの行があり、各行内にはアクター タイプ (善人、悪人、残骸など) を表すいくつかの配列があります。

これらすべてをネストされた配列に入れると機能します。例:

 NSMutableArray *badGuys;
 NSMutableArray *goodGuys;
 NSMutableArray *row1 = [NSMutableArray arrayWithObjects: badGuys, goodGuys];
 (repeat for row2, row3)
 NSMutableArray *hallWay1 = [NSMutableArray arrayWithObjects: row1, row2, row3];
 NSMutableArray *mainGame = [NSMutableArray arrayWithObjects: hallway1, hallway2....

ただし、これには多くの明示的に定義された変数が必要です。これを行うためのよりクリーンな方法は、クラスを使用することです。

.h 内の RowClass.h/RowClass.m:

NSMutableArray *myGoodGuys;
NSMutableArray *myBadGuys;

次に、.m make で

-(NSMutableArray *) returnMyGoodGuys { return myGoodGuys };

HallwayClass.h/HallwayClass.m

RowClass *myRow1 = [[RowClass init] alloc];
RowClass *myRow2 = [[RowClass init] alloc];
RowClass *myRow3 = [[RowClass init] alloc];
NSMutableArray *allMyRows = [NSMutableArray arrayWithObjects: myRow1, myRow2, myRow3];

.m で:

- (NSMutableArray *) getRowNumber : (int)rowNumber { return allMyRows[rowNumber-1]; }

HallwayClass *hall1 = [[HallwayClass init] alloc];

それで、あなたが特定の廊下で善人を引き抜く必要があるとき

NSMutableArray *hall1row1GoodGuys = [[hall1 getRowNumber:1] returnMyGoodGuys];

配列に何かをする

[hall1row1GoodGuys retain];

または、foreach ループで処理する場合は、次のようにします。

foreach(RowClass *row in hallway1.allMyRows)
{
   do stuff
}

また

for(i=0; i<4; i++)
{
   RowClass *nextRow = hallway1.allMyRows[i];
    stuff
}

クラスを定義することは長い間私を怖がらせましたが、考えすぎなければ実際には非常に簡単に作業でき、物事を整理するのに驚くべきことをします。

このいくつかからいくつかのアイデアを得ることができれば幸いです:3

于 2013-05-31T02:55:40.663 に答える