2013-05-29 2 views
0

Я хотел бы узнать об управлении объектами в создании игр. Я работаю с Cocos2d-x.Управление объектами cocos2d-x с несколькими сценами и уровнями

У меня есть сцена, у него несколько слоев. Эти слои состоят из нескольких слоев.

Пользователь добавляет объекты к слою через событие касания.

У меня с трудом удается все.

Один из возможных способов создания вектора, который содержит уровни игрового процесса (а не слои, составляющие всю игру, например, фоны), и каждый слой имеет собственный вектор того, какие объекты находятся на слое и статус каждого.

Как же я действительно влияю на состояние отдельного слоя на основе чего-то происходящего на другом слое.

Я думаю, что я могу бороться с комбинацией хорошего способа сохранить то, что происходит в игре, и убедиться, что я могу получить доступ к этим объектам, чтобы их изменить.

Может ли быть создан CCScene, который затем создает несколько CCScenes? и вместо того, чтобы проскакивать назад и вперед между различными слоями, пользователь щелкает вперед и назад между Сценами, и я использую родительский CCScene, чтобы узнать, что происходит с другими созданными CCScenes. Или я просто создаю CCNode, а затем создаю несколько CCScenes и использую Node для отслеживания происходящего.

ответ

1

Я думаю, что решение, которое вы ищете, более эффективно использует классы. У меня есть игра прямо сейчас, когда игроку приходится управлять деятельностью, проходящей в 4 «коридорах», каждая из которых состоит из 3 «рядов», и каждая строка содержит множество плохих парней, хороших парней и т. Д. Вы проезжаете по коридорам с помощью салфетки, и каждый раз видится только 1 коридор, поэтому каждый коридор - это собственный хадлер. Управление сокровищами плохих парней, разбросанных по коридорам, было кошмаром и действительно неэффективным, поэтому мне нужен был хороший способ разделить плохих парней на группы, не имея кучу жестко закодированных массивов в основной функции ... Вот как я сделало это:

Внутри «я» есть 4 слоя холла, внутри каждого зала находятся 3 ряда, которые являются NSMutableArrays, внутри каждой строки есть несколько массивов, представляющих типы актеров (хороший парень, плохой парень, мусор и т. д.), ,

Наличие всего этого в вложенных массивах может работать. Пример:

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.... 

Однако для этого требуется много явно определенных переменных. Более чистым способом сделать это будет использование классов.

RowClass.h/RowClass.m в .h:

NSMutableArray *myGoodGuys; 
NSMutableArray *myBadGuys; 

затем в .м сделать

-(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]; 

в .м:

- (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 
} 

Определение классов испуганы меня за долгое время, но они на самом деле очень легко работать, если вы не overthink, и делать чудеса для организации вещей.

Надеюсь, вы можете получить некоторые идеи из этого: 3

+0

Отлично. Это похоже на то, о чем я думал. Как вы относитесь к использованию smart_ptrs для хранения массивов и т. Д.? – Jason