Cocos 2d tilemap。 0,0的精灵部分偏离地图?

时间:2012-08-28 13:44:13

标签: cocos2d-iphone

我有一个基于贴图的应用程序,我正在努力让精灵在它上面移动。但是,当我正在研究这个时,我发现了一些东西。如果我运行以下代码:

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

然后我的播放器实际上不在地图上:

Player off map

我应该通过将我的角色定位在:

来弥补这一点
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);

所以,总的来说,我只是想知道我是否正在进行初始化错误,我应该在定位时考虑精灵的宽度/高度。

2 个答案:

答案 0 :(得分:1)

From cocos2d documentation:

  

anchorPoint是围绕其进行所有转换的点   定位操纵发生。它就像节点中的一个引脚   在哪里它“附加”到它的父母。 anchorPoint被规范化,   像一个百分比。 (0,0)表示左下角和(1,1)表示   右上角。但是你可以使用高于(1,1)和的值   也低于(0,0)。默认的anchorPoint是(0,0)。它开始于   左下角。 CCSprite和其他子类有不同   默认anchorPoint。

CCSprite的默认锚点是(0.5,0.5) - 位于精灵的中心。

答案 1 :(得分:0)

在游戏开发中,精灵registration points可能会有所不同。在这种情况下,似乎注册点设置为精灵的中心,因此您应该通过添加/删除一半的宽度和高度进行补偿。