CCSprite子类的Draw方法中的坐标

时间:2014-06-04 02:00:19

标签: cocos2d-iphone coordinates subclass ccsprite

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

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

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

由于它以这种方式移动,我认为这与点与像素有关,因此我将点的位置乘以.5。这使得点更接近,但行为仍在继续。然后我尝试使用convertToNodeSpace和convertToWorldSpace函数,但没有一个工作。但也许这些方法的某些组合可行。谁知道。

在覆盖CCNode子类化对象的draw方法时,我从来不必担心坐标,但对于CCSprite,它不起作用。这可能是因为CCNode的绘制方法是空的。

可能有一个简单的解决方案,可能与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);
}

" adjustPosition"代码到目前为止一直在正常工作。

0 个答案:

没有答案