在Cocos2D中滚动平铺地图

时间:2011-10-09 00:03:18

标签: map scroll 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);
}

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

再次感谢所有人,非常感谢。 最好的和亲切的问候, 纮

1 个答案:

答案 0 :(得分:6)

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

Link to Controller, example and preview movie

您不需要编写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];