在Cocos2D中滚动瓦片地图

6
我有一个问题,但是我无法解决它;可能是因为我没有正确的知识。
我有一个在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);
}

为了说明我在使用上述代码滑动屏幕时看到的问题: 似乎如果我触摸屏幕的中心,地图的左下角将跳转到那个被触摸的坐标,并且会随着我的手指移动而移动,直到我松开手指。 地图的左下角总是会移动到我开始触摸的位置。 同时,当地图被移动时,它闪烁得非常厉害,如果移动过度,它会完全消失。
感谢大家再次提供帮助,非常感谢。 最好的问候, hiro
1个回答

6
我找到了解决问题的方法。 Cocos2D社区中有一位非常聪明的人写了一个控制器,不仅可以自然地平移,还可以缩放。

控制器链接,示例和预览影片

您将不需要编写touchBegan、Moved和End方法; 这个控制器为您完成所有操作。

我的init

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];

2
那段代码现在已经成为cocos2d-extensions的一部分:https://github.com/cocos2d/cocos2d-iphone-extensions - drewish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接