0

私は tiledmap ベースのアプリを持っており、その上を移動するスプライトを取得することに取り組んでいます。しかし、この仕事をしていて気づいたことがあります。次のコードを実行すると:

float x = 0.0f;
float y = 0.0f;
playerSprite.position = ccp(x,y);

次に、私のプレーヤーは実際にはマップから外れています:

マップ外のプレイヤー

代わりに、キャラクターを次の位置に配置することでこれを補う必要があります。

playerSprite.position = ccp(x + playerSprite.boundingBox.size.width / 2,  y + playerSprite.boundingBox.size.height / 2)

それとも、マップの構成に何か問題がありますか? タイルを 0,0 いっぱいまで広げてはいけませんか?

私のマップは次のように初期化されます。

// Setup our map
map = [CCTMXTiledMap tiledMapWithTMXFile: @"Map.tmx"];
NSAssert(nil != map, @"Map is nil");

[self addChild: map z: -1];

そしてプレーヤーは初期化された幅です:

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile: @"SpriteTest.plist"];
CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"SpriteTest.png"];
[self addChild: spriteSheet];

self.playerSprite = [CCSprite spriteWithSpriteFrameName: @"cyanWalkHorizontal1.png"];
[spriteSheet addChild: self.playerSprite];
self.playerSprite.position = ccp(0,0);

したがって、全体として、初期化が間違っているかどうか疑問に思っています。それを配置するときに、スプライトの幅/高さを考慮する必要があります。

4

2 に答える 2

1

cocos2d ドキュメントから:

anchorPoint は、すべての変換と配置操作が行われるポイントです。親に「接続」されているノードのピンのようなものです。anchorPoint はパーセンテージのように正規化されます。(0,0) は左下隅、(1,1) は右上隅を意味します。ただし、(1,1) より大きい値と (0,0) より小さい値も使用できます。デフォルトの anchorPoint は (0,0) です。左下隅から始まります。CCSprite およびその他のサブクラスには、異なるデフォルトの anchorPoint があります。

CCSprite のデフォルトのアンカー ポイントは (0.5, 0.5) - スプライトの中心です。

于 2012-08-28T14:31:26.020 に答える
0

ゲーム開発では、スプライトの登録ポイントが異なる場合があります。この場合、レジストレーションポイントがスプライトの中心に設定されているように見えるので、幅と高さの半分を追加/削除することで補う必要があります。

于 2012-08-28T13:47:30.150 に答える