0

私はまだcocos2dに慣れていません.ccp座標を使用しているときに、次の画面に移動しても同じ位置にとどまるというこの問題があります。タイル座標を使用していないという結論に達しました。そのため、変換の助けが必要です。

   - (CGPoint)tileCoordForPosition:(CGPoint)position {
float x = floor(position.x / map.tileSize.width);
float levelHeightInPixels = map.mapSize.height * map.tileSize.height;
float y = floor((levelHeightInPixels - position.y) / map.tileSize.height);
return ccp(x, y);
  }

-(CGRect)tileRectFromTileCoords:(CGPoint)tileCoords {
float levelHeightInPixels = map.mapSize.height * map.tileSize.height;
CGPoint origin = ccp(tileCoords.x * map.tileSize.width, levelHeightInPixels -    ((tileCoords.y + 1) * map.tileSize.height));
return CGRectMake(origin.x, origin.y, map.tileSize.width, map.tileSize.height);
} 

これは、通常の座標をタイル マップ座標に変換するために使用するものです。

今、特定の位置(0,0)で敵をスポーンしようとしています

     -(void)addsaw{

CCSprite *saw = [CCSprite spriteWithFile:@"saw.png"]; 
// Determine where to spawn the target along the Y axis
CGSize winSize = [[CCDirector sharedDirector] winSize];
int minY =saw.contentSize.height/2;
int maxY = winSize.height - saw.contentSize.height/2;
int rangeY = maxY - minY;
int actualY =  ( rangeY) + minY;

//THIS IS THE PROBLEM RIGHT HERE
saw.position = ccp(0,0);
[self addChild:saw];
// Create the actions
id actionMove = [CCMoveTo actionWithDuration:actualDuration 
                                    position:ccp(-saw.contentSize.width/2, actualY)];
id actionMoveDone = [CCCallFuncN actionWithTarget:self 
                                         selector:@selector(spriteMoveFinished2:)];
[saw runAction:[CCSequence actions:actionMove, actionMoveDone, nil]];
saw.tag = 1;
[_saws addObject:saw];

   }

addaw の ccp を変更して、cocos2d の通常 (0,0) ではなくタイル (0,0) でスポーンできるようにするにはどうすればよいですか?

4

1 に答える 1

3

レイヤーではなく、cctmxtiledmapにスプライトを追加する必要があります。

于 2012-11-16T16:36:53.870 に答える