【问题标题】:cocos2d-x object management with multiple scenes and layerscocos2d-x 多场景多图层对象管理
【发布时间】:2013-05-29 23:48:20
【问题描述】:

我想了解游戏创建中的对象管理。我正在使用 Cocos2d-x。

我有一个场景,它有好几层。这些层由多个层组成。

用户通过触摸事件将对象添加到图层。

我很难管理所有事情。

是一种可能的方法来创建一个包含游戏层(而不是像背景一样构成整个游戏的层)的向量,并且每个层都有自己的向量,其中包含层上的对象以及每个对象的状态。

那么我如何根据另一层中发生的事情真正影响单独层的状态。

我想我可能正在努力寻找一种既能存储游戏中发生的事情又要确保我可以访问这些对象来更改它们的好方法。

能否创建一个 CCScene,然后再创建多个 CCScene?而不是在各个层之间来回滑动,用户在场景之间来回滑动,我使用父 CCScene 来了解创建的其他 CCScene 发生了什么。还是我只是创建一个 CCNode,然后创建多个 CCScene 并使用该节点来跟踪正在发生的事情。

【问题讨论】:

    标签: c++ object cocos2d-iphone cocos2d-x


    【解决方案1】:

    我认为您正在寻找的解决方案是更有效地使用类。我现在有一个游戏,玩家必须管理在 4 个“走廊”中进行的活动,每个走廊由 3 个“行”组成,每行包含各种坏人、好人等等。您通过滑动循环穿过走廊,每次只能看到 1 个走廊,因此每个走廊都是自己的 hudlayer。管理散落在走廊上的大量坏人是一场噩梦,而且效率非常低,所以我需要一种很好的方法来将坏人分成几组,而无需在 main 函数中使用一堆硬编码的数组......这就是我的方法做到了:

    在“self”里面有 4 个大厅 hud 层,每个大厅里面有 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;
    

    然后在 .m 中制作

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

    【讨论】:

    • 完美。这与我的想法一致。您如何看待使用 smart_ptrs 存储数组等?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多