如何在两层或节点之间划分屏幕?

时间:2013-12-30 08:37:13

标签: ios objective-c cocos2d-iphone

注意:这与堆栈溢出的其他问题不同,如: Split screen on Cocos2d 不要将其标记为重复,因为这与两个不同的节点有关。我不是要为一个节点创建两个视口。我想要做的只是在屏幕上管理两个不同的节点。

我有两个CCNodes(如果效果更好,可以将它们更改为CCLayers)。我希望他们每个人占据屏幕的一半。目前我将一个放在底部(0,0),另一半放在(0, <screen height / 2>)

每个节点都包含子节点(横向,精灵等,例如蓝色和红色x),代表游戏世界中的角色。每个节点代表同一世界的不同视图。例如,如果这是一场比赛,则顶部节点将代表跟随红色X的摄像机,而底部节点将代表跟随蓝色X的摄像机。

我不想要一个节点的图形,在另一个节点的区域内重叠。

通过使一个节点的z顺序高于另一个节点,我可以防止下层节点的图形与上层节点重叠。但是,如何防止上层节点的图形与下层节点的图形重叠。我使用z-order作为示例可能的解决方案,但想法是如果每个节点代表世界的摄像机视图,我如何确保每个摄像机视图仅占据屏幕的一半?

我该怎么做?每个节点都会发生各种各样的事情(世界变得旋转/放大/缩小等)。我需要能够操纵每个节点,但仍然没有重叠(可见)?

确定:

Split Screen view

确定:蓝色X与上层节点的世界不重叠。

Split Screen view 2

不行:应该是上层节点一部分的红色X与下层节点重叠。

Split Screen view with overlap

编辑:这是一个与堆栈溢出的其他问题不同的问题,如: Split screen on Cocos2d

我不是要查看同一节点的两个部分。我试图在两个不同的节点之间划分屏幕。

编辑:在我的方案中尝试视口解决方案是不可能的或可扩展的。我需要在两个不同节点之间划分屏幕。我不能只使用一个节点。

2 个答案:

答案 0 :(得分:0)

解决方案如下。

解决方案1:复杂

假设这些。

Layer Top z = 1; Layer Bottom z = 0;

案例1:当任何世界中的单个节点越过其边界时。 只需交换他们的z订单。它工作正常。

案例2:当两个层中的节点越过它们的边界时 检查哪个世界具有最大z值。 使重叠的chid不可见。在另一个图层中创建一个子节点(具有相同属性的z值较小,物理值也相同,因为使用box2d)。

如果玩家在下层跳跃,则必须同步顶层和底层的两个孩子。因此,当它下降并且重叠消失时,删除后一层中的子节点并再次使重叠节点可见。

注意:如果你失败的情况1 yu可以使用案例2,但它非常复杂

解决方案2:简单 假设这些。 Layer Top z = 1; Layer Bottom z = 0;

案例1:交换z订单

案例2:图层顶部z = 0 Layer Bottom z = 1;

假设底层有真正的玩家正在玩,顶层是其他玩家

当玩家处于较低的跳跃状态时,只需向下重新定位该层。因此,看到平台根据玩家的y位置和x位置移动会很棒。看起来更逼真。

答案 1 :(得分:0)

如果您使用的是cocos2d 2.0或更高版本,请尝试使用CCClippingNode作为每个“摄像机视图”的根节点。基本上,您可以定义一个边界矩形,剪切节点不会在该边界外显示节点内容。