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

4

1 回答 1

6

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

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

你不需要编写你的 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];
于 2011-10-09T11:34:56.753 回答