1

我正在尝试制作 Ipad 游戏。对于游戏,我想要一个像游戏一样的滚动背景:Hay Day & Clash of Clans。我为此使用了 Cocos2D,扩展名为 CCLayerPanZoom。但这并没有提供很好的滚动效果(当您停止用手指移动时它不会停止,而是它的缓动?退出并“缓慢”停止)。而且我认为这个扩展类的缩放功能不是 100% 好。

有什么解决方案或好的课程吗?

谢谢。

4

2 回答 2

0

好家伙。刚刚在最近的原型中解决了这个问题:我很抱歉前面的内容。有几种方法可以做到这一点,既不干净也不简单。

我发现更直观的方法是移动相机的位置。您可以通过操作场景的 CCCamera 来做到这一点。从这个意义上说,您将在世界上滚动,就像在飞机上飞越它一样。对象之间的碰撞检测仍然很简单,因为所有对象都保持其“真实世界”位置。如果游戏世界中的精灵位于 (100,100),并且您将相机向左滚动 500,则精灵仍保持在 (100,100)。

不幸的是,这引入了很多与触摸输入相关的问题。您不能再轻松地检查“此触摸是否在此节点上”,因为触摸坐标仅限于屏幕分辨率。如果相机位于 (1000,1000) 并且您触摸屏幕中间的精灵,则该触摸位置注册在 (320,280)(屏幕中间)。现在所有的触摸计算都必须包含相机的偏移量,这可能很难记住并且重复包含也很麻烦。

第二种技术是将世界放入 CCLayer 中,然后将该层移动到相机下方。我发现这种方法比较麻烦,所以我没有追求很长时间。

于 2012-12-10T02:57:31.560 回答
0

使用 CCLayer 并将所有要移动的孩子添加到该层中。当您要移动所有内容时,请在更新中移动 CCLayer。

要将图层坐标转换为真实世界坐标,请使用以下函数:

-(CGRect)worldBoundingBox {

 CGRect rect = CGRectMake(0, 0, contentSize_.width,contentSize_.height);
return CGRectApplyAffineTransform(rect, [self nodeToWorldTransform]);

}

于 2012-12-10T10:08:17.413 回答