我如何制作一个处理旋转的无限/重复世界,就像在这个游戏中一样:
http://bloodfromastone.co.uk/retaliation.html
我通过具有这样的层次结构对我的旋转移动世界进行了编码:
场景
- mainLayer (CCLayer)
- rotationLayer(CCNode)
- positionLayer(CCNode)
rotationLayer 和 positionLayer 具有相同的大小(现在为 4000x4000 像素)。
我通过旋转rotationLayer来旋转整个世界,我通过移动positionLayer来移动整个世界,让玩家始终保持在设备屏幕的中心,并且是移动和旋转的世界。
现在我想这样做,如果玩家到达世界的边界(世界被移动以便世界边界与设备屏幕边界接触),那么世界被“包裹”到相反的边界所以世界是无限的。如果世界没有旋转,那将很容易,但现在我不知道如何做到这一点。我是一个数学和数学思维的傻瓜,所以我需要一些帮助。
现在我认为我不需要任何与 cocos2d-iphone 相关的帮助。我需要的是某种方法来计算我的玩家是否在世界范围之外,然后某种方法来计算我必须为世界提供什么新位置来包裹世界。
我想我必须计算一个圆的半径,这将是我在方形世界中的铸造厂,无论方形世界处于什么角度,都将确保可见矩形(屏幕)始终在世界广场。然后我需要一种方法来计算可见矩形边界是否在边界圆之外,如果是这样,我需要一种方法来计算边界圆中新的相对位置以将世界移动到。所以为了说明,我添加了 5 张图片。
在旋转的方形世界内的边界圆内的可见矩形:
可见矩形顶部在旋转的方形世界中击中边界圆:
旋转的方形世界移动到相反的垂直位置,因此可见矩形的底部现在在旋转的世界内达到边界圆:
另一个可见矩形顶部的示例在旋转的方形世界中击中边界圆,以说明不同的场景:
再次旋转的方形世界移动到相反的垂直位置,以便可见矩形的底部现在在旋转的世界内达到边界圆:
在非旋转的情况下移动 positionLayer 是我计算出来的数学,正如我所说,只要世界不旋转,我就可以计算出这个,但它确实如此。被移动/定位的世界/CCNode (positionLayer) 在被旋转的世界/CCNode (rotationLayer) 内。旋转的rotationLayer 的锚点始终位于屏幕的中心,但由于移动的positionLayer 在旋转的rotationLayer 内,它会围绕rotationLayer 的锚点旋转。然后我迷路了......当我将 positionLayer 向下移动到足以使其顶部边框到达屏幕顶部时,我需要按照 JohnPS 描述的方式包装该 positionLayer,但不是那么简单,我需要将它包装在基于矢量的关于rotationLayer CCNode 的旋转。这个我不知道怎么办。
谢谢索伦_