/** draws a texture at a given point */
void drawatpoint(const ccpoint& point);
/** draws a texture inside a rect */
void drawinrect(const ccrect& rect);
這節之所以單獨來講,是因為這是整個2d引擎中最核心的所在——繪製一張。如果你是用原生的opengl來做到這一步,那是相當的繁瑣。但是現在cocos2d-x把那些髒活累活都做完了,顯示一張就變得很簡單了。我們使用cctexture來講的繪製,是為了以後講ccsprite做鋪墊。知道如何顯示,是了解如何顯示更複雜內容的基礎。先來看看**:
void cctexture2d::drawatpoint(const ccpoint& point);
glfloat width = (glfloat)m_upixelswide * m_fmaxs,
height = (glfloat)m_upixelshigh * m_fmaxt;
glfloat vertices = ;
ccglenablevertexattribs( kccvertexattribflag_position | kccvertexattribflag_texcoords );
m_pshaderprogram->use();
m_pshaderprogram->setuniformsforbuiltins();
ccglbindtexture2d( m_uname );
#ifdef emscripten
setglbufferdata(vertices, 8 * sizeof(glfloat), 0);
glvertexattribpointer(kccvertexattrib_position, 2, gl_float, gl_false, 0, 0);
setglbufferdata(coordinates, 8 * sizeof(glfloat), 1);
glvertexattribpointer(kccvertexattrib_texcoords, 2, gl_float, gl_false, 0, 0);
#else
glvertexattribpointer(kccvertexattrib_position, 2, gl_float, gl_false, 0, vertices);
glvertexattribpointer(kccvertexattrib_texcoords, 2, gl_float, gl_false, 0, coordinates);
#endif // emscripten
gldrawarrays(gl_********_strip, 0, 4);
}
簡單的繪製乙個就是這個流程,如果沒有cocos2d-x的幫助,想要自己寫一套還真要費不少事情。當然這個api要到opengl的上下文中才能執行。而cocos2d-x的opengl上下文只有在node的draw中才有,所以我們寫乙個簡單的demo來看看效果,為了省事我直接拿hellocpp來改了,相關的函式如下:
bool helloworld::init()
void helloworld::draw()
同樣沒做錯誤處理,希望大家不要介意,下面是顯示效果: cocos2d x 原始碼剖析(2)
上次講到cocos2d x的main loop是下面這句 我們來看看這個函式的內部實現 return0 看看,我沒有欺騙大家吧。這個函式在設計的時候想要參照main函式返回乙個int值來表示執行結果,但是你知道的外部呼叫中完全沒有進行處理,略坑爹。來深入這個函式的內部 void startmainl...
cocos2d x 原始碼剖析(1)
原文出處 我認為在看這些文章的時候,最好有一些cocos2d x的經驗。起碼能新建乙個cocos2d x的hello world工程。而且這些文章並不是用來入門和教你如何使用cocos2d x的,我的目標是看完這些文章之後,寫乙個完整的2d引擎將沒有問題。而且能夠為cocos2d x查漏補缺,看看那...
cocos2d x 原始碼剖析(8)
寫到第7節的時候,突然覺得cocos2d x還沒有我想的那麼大啊,或許在50節以內就要了結了。這節繼續看看ccnode這個節點,主要部分是action。雖然ccnode有不少的action相關的函式,起作用的實際上是actionmanager。這節雖說是從ccnode開始,但是真正的內容在actio...