0

.tmx マップ内の特定のタイルのピクセル単位の位置を見つけようとしています。CCTMXLayer クラスの positionAt: メソッドでうまくいくはずですが、使用しようとすると座標 (0,0) の CGPoint が返されます。これは、私が使用しているコードの一部です。

    // CCTMXTiledMap Declaration using my class MapLayer
    //which inherits from CCTMXTiledMap
    MapLayer *tileMap = [MapLayer node];
    CCTMXLayer *myLayer = [tileMap layerNamed: @"Middle"];
    NSLog(@"%i", [myLayer positionAt: CGPointMake(x,y)].x);
    NSLog(@"%i", [myLayer positionAt: CGPointMake(x,y)].y);

CGPointMake の x と y の値に関係なく、CGPoint (0,0) の値がログに記録され続け、その理由がわかりません。

編集:

マップが間違っているとレイヤーを宣言しているだけですか? これは私のコードです。

    //init method for MapLayer.m class file 
    @implementation MapLayer 
    -(id) init { 
    if( (self=[super initWithTMXFile: @"ZombearTilemap.tmx"])) { 
    } 
    return self; 
    } 

    //in my MainScene.m class init method
    MapLayer *tileMap = [MapLayer node]; 
    [self addChild: tileMap];
    CCTMXLayer *tileMapLayer = [tileMap layerNamed: @"Middle"];

    // (tileMapLayer == nil) returns false

    //tileMap.mapSize.width returns 0
    //[[tileMapLayer tileAt:ccp(x,y)] boundingBox].size.height returns 0
4

1 に答える 1

0

確認すべき点がいくつかあります...

  1. 有効ですmyLayerか (nil ではありません)? nil の場合、TMX ファイルに「Middle」という名前のレイヤーがないか、TMX ファイルがロードされていません。
  2. myLayer.mapTileSize.widthとはmyLayer.mapTileSize.height非ゼロですか? それらがゼロの場合、TMX ファイルおよび/または のサブクラスで何かが非常に壊れていますCCTMXTiledMap

一般的なアドバイス: Cocos2d はオープン ソースです。ブレークポイントを設定し、CCTMXLayerのコードにステップ-(CGPoint) positionAt:(CGPoint)posインして、そこで何が起こっているかを調べます。


編集:

「Tiled」を使用して TMX ファイルを作成している場合は、[設定] に移動し、[タイル レイヤー データの保存形式] を [Base64 (gzip 圧縮)] から [XML] に変更します。Cocos2d はこの TMX エンコーディングを読み取ることができませんが、TMX ファイルを任意の種類のテキスト エディターまたは Web ブラウザーで開くことにより、データを簡単に表示できます。
(Tiled を使用していない場合、どのように TMX ファイルを作成しているのかわかりませんが、ここから入手してください: http://www.mapeditor.org/ )

プリファレンスを変更したら、TMX ファイルを開いて別の場所に再保存します。おそらく -XML.tmx などに名前を変更する必要があります。そうすれば、後で誤って cocos2d にフィードしようとして、ロードされない理由を疑問に思うことはありません。;)

レイヤーmapTileSizeは、マップのプロパティからプロパティを取得しtileSizeます。このプロパティは、TMX ファイルの要素から設定されます。次に例を示します。<map version="1.0" orientation="orthogonal" width="160" height="96" tilewidth="16" tileheight="16">

すべてがうまくいっている場合は、コードのどこかでこの値を誤って 0 にリセットしています。混乱している場合は、この xml ファイルを手動で微調整するか、正しいタイルサイズ値で TMX ファイルを最初から再作成する必要があります。

タイルの設定を「Base64 (gzip 圧縮)」に戻して、cocos2d がロードできる形式で作業を保存することを忘れないでください。

于 2012-05-09T23:26:25.517 に答える