在Cocos2D中滚动平铺地图

hir*_*oki 6 scroll map cocos2d-iphone sliding

我有一个我根本想不通的问题; 可能是因为我没有正确的知识.

我有一个用Tiled制作的TMX地图.地图大于屏幕尺寸(平铺是32x32像素,有100x100平铺).我想要做的是能够通过滑动屏幕移动地图.

我在网上查看了各种教程并检查了paddle.m示例,但仍无法使其工作.我遇到的所有教程都集中在围绕地图移动夹紧的居中精灵......再次,我想要做的是能够通过滑动/滑动屏幕来移动地图; 就像在滚动iPod或移动图片时一样.

有人可以帮忙吗?

这是我的ccTouchMoved代码

-(void) ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event
{
    CGPoint touchPointMap = [touch locationInView: [touch view]];
    touchPointMap = [[CCDirector sharedDirector] convertToGL: touchPointMap];
    touchPointMap = [self convertToNodeSpace: touchPointMap];
    CCLOG(@"Touch Point Map %lf, %lf", touchPointMap.x, touchPointMap.y);

    self.position = CGPointMake(touchPointMap.x, touchPointMap.y);
}
Run Code Online (Sandbox Code Playgroud)

为了说明当我使用上面的代码滑动屏幕时我在屏幕上看到的问题:似乎如果我触摸屏幕的中心,地图的左下角将跳转到触摸的坐标并随着我移动触摸,直到我的触摸解除.地图的左下角将始终移动到我开始触摸的位置.此外,当地图被移动时,它会像疯了一样闪烁,如果过度移动,则完全消失.

再次感谢所有,非常感谢.最好的和亲切的问候,hiro

hir*_*oki 6

我找到了问题的解决方案.在Cocos2D社区中有一个非常聪明的人,他编写了一个控制器,不仅可以有机地平移,还可以放大和缩小.

链接到Controller,示例和预览影片

你不需要编写touchBegan,Moved和End方法; 这个控制器为你做了一切.

我的初学者

self.theMap = [CCTMXTiledMap tiledMapWithTMXFile: @"city_map.tmx"];
        self.bgLayer = [theMap layerNamed:@"bg"];

        // boundingRect is the area you wish to pan around
        CGRect boundingRect = CGRectMake(0, 0, 32*50, 16*50);

        theMap.anchorPoint = ccp(0,0);
        [self addChild: theMap z: -1];

        // _controller is declared in the @interface as an object of CCPanZoomController
        _controller = [[CCPanZoomController controllerWithNode:self] retain];
        _controller.boundingRect = boundingRect;
        _controller.zoomOutLimit = _controller.optimalZoomOutLimit;
        _controller.zoomInLimit = 2.0f;

        [_controller enableWithTouchPriority:0 swallowsTouches:YES];
Run Code Online (Sandbox Code Playgroud)

  • 该代码现在是cocos2d-extensions的一部分:https://github.com/cocos2d/cocos2d-iphone-extensions (2认同)