cocos2d-x 2.2 使用CCTextureAtlas绘制图片显示位置、大小不对

主要代码如下:

ccV3F_C4B_T2F_Quad quad;
    CCSize size = CCDirector::sharedDirector()->getWinSize();
    float x = size.width / 2;
    float y = size.height / 2;
    int imgWidth = atlas->getTexture()->getPixelsWide();
    int imgHeight = atlas->getTexture()->getPixelsHigh();
    float x1 = (size.width - imgWidth) /2;
    float x2 = x1 + imgWidth;
    float y1 = (size.height - imgHeight) / 2;
    float y2 = y1 + imgHeight;
    quad.tl.vertices = vertex3(x1, y2, 0);
    quad.tr.vertices = vertex3(x2, y2, 0);
    quad.bl.vertices = vertex3(x1, y1, 0);
    quad.br.vertices = vertex3(x2, y1, 0);
    quad.tl.colors = ccc4(0xff,0xff,0xff,0xff);
    quad.tr.colors = ccc4(0xff,0xff,0xff,0xff);
    quad.bl.colors = ccc4(0xff,0xff,0xff,0xff);
    quad.br.colors = ccc4(0xff,0xff,0xff,0xff);

    float left = 0.0f;
    float right = 1.0f;
    float top = 0.0f;
    float bottom = 1.0f;

    quad.tl.texCoords = tex2(left, top);
    quad.tr.texCoords = tex2(right, top);
    quad.bl.texCoords = tex2(left, bottom);
    quad.br.texCoords = tex2(right, bottom);
    atlas->updateQuad(&quad, 0);
    atlas->drawQuads();

    CCPoint vertices={
        ccp(quad.tl.vertices.x,quad.tl.vertices.y),
        ccp(quad.tr.vertices.x,quad.tr.vertices.y),
        ccp(quad.br.vertices.x,quad.br.vertices.y),
         ccp(quad.bl.vertices.x,quad.bl.vertices.y),
    };
    ccDrawPoly(vertices, 4, true);


```


显示的结果:
  


请问如何才能正常显示? 急!

quad.tl.vertices = vertex3(x1, y1, 0);
quad.tr.vertices = vertex3(x2, y1, 0);
quad.bl.vertices = vertex3(x1, y2, 0);
quad.br.vertices = vertex3(x2, y2, 0);
希望对你有帮助!

不对, 谢谢。

我也遇到这个问题。在CCTexture2D里添加一个函数去实现这个功能,没有错位的问题。这也是没有办法的办法。

能把添加的函数贴出来瞅瞅不

CCTexture2D有一个drawInRect函数,仿照这个写了一个,就没有错位。cocos2d v1.0.1的代码

- (void) drawFromRect:(CGRect)sRect toRect:(CGRect)dRect
{
    CGSize t_size = self.contentSize;
    sRect.origin.x /= t_size.width;
    sRect.size.width /= t_size.width;
    sRect.origin.y /= t_size.height;
    sRect.size.height /= t_size.height;
    GLfloat  coordinates] = {  sRect.origin.x * maxS_, (sRect.origin.y + sRect.size.height) * maxT_,
        (sRect.origin.x + sRect.size.width) * maxS_, (sRect.origin.y + sRect.size.height) * maxT_,
        sRect.origin.x * maxS_, sRect.origin.y * maxT_,
        (sRect.origin.x + sRect.size.width) * maxS_, sRect.origin.y * maxT_};
 GLfloat vertices] = { dRect.origin.x,       dRect.origin.y, 
        dRect.origin.x + dRect.size.width,  dRect.origin.y, 
        dRect.origin.x ,       dRect.origin.y + dRect.size.height, 
        dRect.origin.x + dRect.size.width,  dRect.origin.y + dRect.size.height };
 
 glBindTexture(GL_TEXTURE_2D, name_);
 glVertexPointer(2, GL_FLOAT, 0, vertices);
 glTexCoordPointer(2, GL_FLOAT, 0, coordinates);
 glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
}

```