首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

Cocos2d实现类似Clash of clans的缩放拖拽成效

2014-07-19 
Cocos2d实现类似Clash of clans的缩放拖拽效果最近开始跳入做游戏的坑了,而且想做一款独立游戏,虽然随时有

Cocos2d实现类似Clash of clans的缩放拖拽效果
最近开始跳入做游戏的坑了,而且想做一款独立游戏,虽然随时有烂尾的危险,但无妨一试~敬请期待~

目前正在准备游戏的原型,由于需要设计像COC的缩放场景,作为cocos2d的菜鸟兼ios开发新手,实在search遍了也没有像样的cocos2d代码,即使有效果也未如人意。stackoverflow上有老外关于pinch缩放手势的例子,但放到cocos2d环境,需要控制一个sprite或者tilemap的边界,就变得有点复杂了。这个问题实在卡了我好久好久,但通过参考了一些pinch示例以及不断调试anchor point和map position等值,最终解决,实在泪牛满面!

这个例子我使用了tilemap作为缩放的对象,当然需要的话也可以用sprite或其他代替。在使用了cocos2d的模版生成文件后,可以在hellolayer中的构造器里先添加本次需要的变量

-(void)adjustViewBoundingPosition:(CGPoint)newPos{    CGFloat adjustWidth=map.boundingBox.size.width*map.anchorPoint.x-map.position.x;    CGFloat adjustHeight=map.boundingBox.size.height*map.anchorPoint.y-map.position.y;        newPos.x=  MIN(newPos.x, adjustWidth);    newPos.x = MAX(newPos.x, winSize.width-[map boundingBox].size.width+adjustWidth);    newPos.y = MIN(newPos.y,adjustHeight);    newPos.y = MAX(newPos.y, winSize.height-[map boundingBox].size.height+adjustHeight);    self.position=newPos;}-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event{return YES;}-(void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event{    CGPoint touchLocation = [self convertTouchToNodeSpace:touch];        CGPoint oldTouchLocation = [touch previousLocationInView:touch.view];    oldTouchLocation = [[CCDirector sharedDirector] convertToGL:oldTouchLocation];    oldTouchLocation = [self convertToNodeSpace:oldTouchLocation];        CGPoint translation = ccpSub(touchLocation, oldTouchLocation);    CGPoint newPos= ccpAdd(self.position, translation);        [self adjustViewBoundingPosition:newPos];}


CCTouchMoved的方法通过获得手势滑动前后的位置差来设置新视图的位置,并使用了adjustViewBoundingPosition来限制移动边界。如果需要做到COC效果滑动时带有惯性,则又必须添加几项控制参数(如是否为拖动状态)同时设置一个schedule来添加惯性的动画,本例没有做这个效果,可以另行添加

adjustViewBoundingPosition和常规的控制边界代码没有什么不同,主要是多了adjustHeight和adjustWidth的值,这两个值是根据当前map的anchor point和position决定的。另外MIN和MAX的相关值与缩放的实际需求相关,譬如本人不需要考虑scale<2即地图小于屏幕的情况,所以MIN和MAX是定死了,可根据是否小于屏幕来对调MIN和MAX的值

以上就是基本的代码,由于只考虑实现,所以实际项目中还是需要按自己需求去调整,譬如添加惯性,控制缩放比例,缩放达到界限后用动画过渡等效果,在本demo中都没有提供,但这些处理并不复杂~so~

本例的代码已经放到github上,需要的时候可以下来看看 :)

Check this out: https://github.com/yijiancen/pinch-and-scroll-like-clash-of-clans

热点排行