注意:这与堆栈溢出的其他问题不同,如: Split screen on Cocos2d 不要将其标记为重复,因为这与两个不同的节点有关。我不是要为一个节点创建两个视口。我想要做的只是在屏幕上管理两个不同的节点。
我有两个CCNodes
(如果效果更好,可以将它们更改为CCLayers
)。我希望他们每个人占据屏幕的一半。目前我将一个放在底部(0,0)
,另一半放在(0, <screen height / 2>)
。
每个节点都包含子节点(横向,精灵等,例如蓝色和红色x),代表游戏世界中的角色。每个节点代表同一世界的不同视图。例如,如果这是一场比赛,则顶部节点将代表跟随红色X的摄像机,而底部节点将代表跟随蓝色X的摄像机。
我不想要一个节点的图形,在另一个节点的区域内重叠。
通过使一个节点的z顺序高于另一个节点,我可以防止下层节点的图形与上层节点重叠。但是,如何防止上层节点的图形与下层节点的图形重叠。我使用z-order作为示例可能的解决方案,但想法是如果每个节点代表世界的摄像机视图,我如何确保每个摄像机视图仅占据屏幕的一半?
我该怎么做?每个节点都会发生各种各样的事情(世界变得旋转/放大/缩小等)。我需要能够操纵每个节点,但仍然没有重叠(可见)?
确定:
确定:蓝色X与上层节点的世界不重叠。
不行:应该是上层节点一部分的红色X与下层节点重叠。
编辑:这是一个与堆栈溢出的其他问题不同的问题,如: Split screen on Cocos2d
我不是要查看同一节点的两个部分。我试图在两个不同的节点之间划分屏幕。
编辑:在我的方案中尝试视口解决方案是不可能的或可扩展的。我需要在两个不同节点之间划分屏幕。我不能只使用一个节点。
答案 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作为每个“摄像机视图”的根节点。基本上,您可以定义一个边界矩形,剪切节点不会在该边界外显示节点内容。