我正在使用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"代码到目前为止一直在正常工作。