我有一个基于贴图的应用程序,我正在努力让精灵在它上面移动。但是,当我正在研究这个时,我发现了一些东西。如果我运行以下代码:
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);
所以,总的来说,我只是想知道我是否正在进行初始化错误,我应该在定位时考虑精灵的宽度/高度。
答案 0 :(得分:1)
anchorPoint是围绕其进行所有转换的点 定位操纵发生。它就像节点中的一个引脚 在哪里它“附加”到它的父母。 anchorPoint被规范化, 像一个百分比。 (0,0)表示左下角和(1,1)表示 右上角。但是你可以使用高于(1,1)和的值 也低于(0,0)。默认的anchorPoint是(0,0)。它开始于 左下角。 CCSprite和其他子类有不同 默认anchorPoint。
CCSprite的默认锚点是(0.5,0.5) - 位于精灵的中心。
答案 1 :(得分:0)
在游戏开发中,精灵registration points可能会有所不同。在这种情况下,似乎注册点设置为精灵的中心,因此您应该通过添加/删除一半的宽度和高度进行补偿。