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);
}

上記のコードを使用して画面をスワイプしたときに画面に表示される問題を説明するために、画面の中央をタッチすると、マップの左下隅がそのタッチされた座標にジャンプし、タッチが解除されるまでタッチします。マップの左下隅は、常にタッチを開始した場所に移動します。また、マップを移動している間、マップは狂ったように点滅し、過度に移動すると完全に消えます。

本当にありがとうございました。よろしくお願いします、ヒロ

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 に答える