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 是所有转换和定位操作发生的点。它就像节点中的一个引脚,它被“附加”到其父节点。锚点是标准化的,就像一个百分比。(0,0) 表示左下角,(1,1) 表示右上角。但是您也可以使用高于 (1,1) 和低于 (0,0) 的值。默认锚点为 (0,0)。它从左下角开始。CCSprite 和其他子类有不同的默认锚点。

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

于 2012-08-28T14:31:26.020 回答
0

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

于 2012-08-28T13:47:30.150 回答