2012-08-28 39 views
0

我有一個基於tiledmap的應用程序,我正在努力讓精靈在其上移動。不過,當我正在處理這件事時,我注意到了一些事情如果我運行下面的代碼:科科斯2d瓷磚地圖。 Sprite在0,0部分偏離地圖?

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) 

Player off map

我應該代替通過定位我的性格來彌補這個

或者我在做我的地圖配置有問題嗎?如果瓦不能擴展到全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); 

所以,總的來說,我只是想知道,如果即時通訊做初始化錯誤,它的我在定位時應該考慮精靈的寬度/高度。

回答

1

From cocos2d documentation:

anchorPoint是圍繞着所有的轉化和 定位操作發生的點。它就像節點 中的一個引腳,它被「附加」到它的父節點。 anchorPoint被標準化, 就像一個百分比。 (0,0)表示左下角,(1,1)表示右上角的 。但是,您也可以使用比(0,0)更低的值(1,1)和 。默認的anchorPoint是(0,0)。它從左下角的 開始。 CCSprite和其他子類具有不同的 默認anchorPoint。

CCSprite的默認錨點是(0.5,0.5) - 在精靈的中心。

+0

多數民衆贊成在指出我。我有點困惑,但..如果CCSprite的默認anchorPoint是0.5,0.5(我確信這就是我的playerSprite的anchorPoint是),那麼它不應該與地圖正確對齊,而不需要添加'playerSprite.boundingBox.size.width/2'到x位置? – Kyle

+0

不可以。當您爲節點設置位置時,它是它的錨點,它將被固定到節點父級中具有這些座標的點。因此,當你的sprite的中心有錨點,並將其位置設置爲(0,0)時,它的中心將位於其父母的(0,0)點。無論錨點如何,節點的原點始終位於左下角。 – Kreiri

0

在遊戲開發中,精靈registration points可能會有所不同。在這種情況下,註冊點似乎被設置爲精靈的中心,所以您應該通過添加/刪除寬度和高度的一半來進行補償。