Cocos2d iphone CCSprite子类的Draw方法中的坐标

Cocos2d iphone CCSprite子类的Draw方法中的坐标,cocos2d-iphone,coordinates,subclass,ccsprite,Cocos2d Iphone,Coordinates,Subclass,Ccsprite,我正在使用cocos2dv2.1。我将CCSprite子类化,并覆盖了draw方法。我打电话给[super draw],所以关于精灵本身的一切都是正确绘制的 在这一点上,我想做的就是使用draw方法直接在精灵位置放置一个红点。简而言之,这个红点应该出现在精灵的中心点。我正在使用ccDrawSolidCircle函数 嗯,正在绘制圆点,但它没有与精灵对齐。当我在屏幕上移动精灵时,圆点也随之移动。我离位置0,0越远,点离精灵越远。当我将精灵移动到位置0,0时,圆点已正确放置 因为它是这样移动的,我假

我正在使用cocos2dv2.1。我将CCSprite子类化,并覆盖了draw方法。我打电话给[super draw],所以关于精灵本身的一切都是正确绘制的

在这一点上,我想做的就是使用draw方法直接在精灵位置放置一个红点。简而言之,这个红点应该出现在精灵的中心点。我正在使用ccDrawSolidCircle函数

嗯,正在绘制圆点,但它没有与精灵对齐。当我在屏幕上移动精灵时,圆点也随之移动。我离位置0,0越远,点离精灵越远。当我将精灵移动到位置0,0时,圆点已正确放置

因为它是这样移动的,我假设这与点和像素有关,因此我将点的位置乘以0.5。这使圆点更靠近了,但行为仍在继续。然后我尝试使用convertToNodeSpace和convertToWorldSpace函数,但都不起作用。但也许这些方法的某些组合会起作用。谁知道呢

在重写CCNode子类对象的draw方法时,我从来不用担心坐标问题,但对于CCSprite,它的工作方式不同。这可能是因为CCNode的draw方法为空

对此可能有一个简单的解决方案,可能与openGL坐标与cocos2d坐标有关,但我无法确定这一点,也无法在各种论坛中找到一些内容。任何帮助都将不胜感激

谢谢

编辑1:嗯,我发现了一些有效的方法,但我不知道这是否是最好的解决方案。我用以下代码行计算了一个新的中心位置:

adjustedPosition = ccp(self.quad.bl.texCoords.u + self.contentSize.width / 2, self.quad.bl.texCoords.v + self.contentSize.height / 2);
到目前为止还不错。但是,如果有人能进一步阐明这一点,请这样做

再次感谢

编辑2:编辑1之前我的绘图方法代码如下:

- (void) draw {
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glLineWidth(1);
    ccDrawColor4B(255, 0, 0, 255);
    ccDrawSolidCircle(ccp(self.position.x, self.position.y), 4, 10);
}
编辑后,现在是:

- (void) draw {
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glLineWidth(1);
    ccDrawColor4B(255, 0, 0, 255);
    adjustedPosition = ccp(self.quad.bl.texCoords.u + self.contentSize.width / 2, self.quad.bl.texCoords.v + self.contentSize.height / 2);
    ccDrawSolidCircle(ccp(adjustedPosition.x, adjustedPosition.y), 4, 10);
}

到目前为止,“调整位置”代码工作正常

你能像编辑之前一样发布你的绘图代码吗?请参阅主帖子中的“编辑2”。谢谢Hmmm ccDraw*方法坐标可能以像素为单位,而不是以点为单位。顺便说一句,ccp(self.position.x,self.position.y)等同于只使用self.positionLOL!。有趣的是,你指出了这一点,因为我在别人的帖子上看到了同样的事情,并且对自己说了同样的事情。起初我认为这是“点”对“像素”,这就是为什么我试图将位置分成两半,这通常是有效的。但在做了那件事之后,情况仍然很糟。这不重要,但为了以防万一,正在讨论的精灵被添加为tilemap(CCTMXTiledMap)的子对象。