2013-03-11 70 views
1

當我使用CCTransitionPageTurn時,如何指定場景背面的顏色?在cocos2d-iphone 1.0,我確實在印跡一些像這樣的改動()在CCGrid.m:Cocos2d-x 2.0中CCTransitionPageTurn的背面顏色

NSInteger n = gridSize_.x * gridSize_.y; 
// Default GL states: GL_TEXTURE_2D, GL_VERTEX_ARRAY, GL_COLOR_ARRAY, GL_TEXTURE_COORD_ARRAY 
    // Needed states: GL_TEXTURE_2D, GL_VERTEX_ARRAY, GL_TEXTURE_COORD_ARRAY 
    // Unneeded states: GL_COLOR_ARRAY 
    //enable culling, the default cull face is back 
    glEnable(GL_CULL_FACE); 
    //now only the front facing polygons are drawn 
    glDisableClientState(GL_COLOR_ARRAY); 
glVertexPointer(3, GL_FLOAT, 0, vertices); 
    glTexCoordPointer(2, GL_FLOAT, 0, texCoordinates); 
    glDrawElements(GL_TRIANGLES, (GLsizei) n*6, GL_UNSIGNED_SHORT, indices); 
// This is very important, otherwise the backside of picture will be random color 
    glDisable(GL_TEXTURE_2D); 
//change the winding of what OpenGl considers front facing 
    //only the back facing polygons will be drawn 
    //this works better then changing the cull face 
    glFrontFace(GL_CW); 
    glDisableClientState(GL_TEXTURE_COORD_ARRAY); 
    glColor4ub(255,255,255,255); 
    glDrawElements(GL_TRIANGLES, (GLsizei) n*6, GL_UNSIGNED_SHORT, indices); 
//restore GL default states 
    glFrontFace(GL_CCW); 
    glDisable(GL_CULL_FACE); 
    glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
    glEnableClientState(GL_COLOR_ARRAY); 

這是cpp的代碼,我想我可以在cocos2d-X使用。但不幸的是,這個代碼不適用於2.0。任何人都可以建議如何將其轉換爲2.0?或者,在CCTransitionPageTurn期間,還有其他方法可以在場景的背面設置顏色嗎?

+0

嘗試glClearColor(..) – LearnCocos2D 2013-03-11 01:13:11

+0

但是如何?你能否提供更詳細的建議?謝謝 – 2013-03-12 01:37:45

回答

1

基礎上的片段和其他的谷歌搜索我已經成功地做到這一點:

void CCGrid3D::blit(void) 
{ 

    CCLOG("CCGrid3D::blit()"); 
    int n = m_sGridSize.width * m_sGridSize.height; 

    ccGLEnableVertexAttribs(kCCVertexAttribFlag_Position | kCCVertexAttribFlag_TexCoords); 
    m_pShaderProgram->use(); 
    m_pShaderProgram->setUniformsForBuiltins();; 

    // 
    // Attributes 
    // 
#ifdef EMSCRIPTEN 
    // Size calculations from calculateVertexPoints(). 
    unsigned int numOfPoints = (m_sGridSize.width+1) * (m_sGridSize.height+1); 

    // position 
    setGLBufferData(m_pVertices, numOfPoints * sizeof(ccVertex3F), 0); 
    glVertexAttribPointer(kCCVertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, 0, 0); 

    // texCoords 
    setGLBufferData(m_pTexCoordinates, numOfPoints * sizeof(ccVertex2F), 1); 
    glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, 0, 0); 

    setGLIndexData(m_pIndices, n * 12, 0); 
    glDrawElements(GL_TRIANGLES, (GLsizei) n*6, GL_UNSIGNED_SHORT, 0); 
#else 

    glEnable(GL_CULL_FACE); 
    glVertexAttribPointer(kCCVertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, 0, m_pVertices); 
    glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, 0, m_pTexCoordinates); 
    glDrawElements(GL_TRIANGLES, (GLsizei)n*6, GL_UNSIGNED_SHORT, m_pIndices); 

    glDisable(GL_TEXTURE_2D); 

    glFrontFace(GL_CW); 
    ccGLEnableVertexAttribs(kCCVertexAttribFlag_Position); 

    glEnable(GL_BLEND); 

    glDrawElements(GL_TRIANGLES, (GLsizei)n*6, GL_UNSIGNED_SHORT, m_pIndices); 

    glFrontFace(GL_CCW); 

    glDisable(GL_BLEND); 
    glDisable(GL_CULL_FACE); 

#endif // EMSCRIPTEN 
    CC_INCREMENT_GL_DRAWS(1); 
} 

它只有一個缺點:它不會讓你指定的背景色,而它得到的顏色左下角的像素並使用它。我希望這對你來說已經足夠了,或者你可以改變它,讓它指定所需的顏色。