弱聯網開發技術: java
libcurlnode
添加lib文件:libcurl_imp.lib pthreadVCE2.libandroid
添加頭文件:#include"curl/curl.h"ios
curl_global_init(CURL_GLOBAL_ALL);//初始化c++
curl_global_cleanup();//結束執行編程
簡單接口:easy interface 單線程會引發阻塞json
//設定請求的網絡地址windows
//向服務器讀數據數組
CURL *easy_handle=curl_easy_init();
curl_easy_setopt(easy_handle,CURLOPT_URL,"http:://www.baidu.com");
curl_easy_setopt(easy_handle,CURLOPT_WRITEFUNCTION,write_data);//回調函數,請求的數據都會被放到write_data函數裏面
//curl_easy_setopt(easy_handle,CURLOPT_WRITEDATA,&internal_struct);
CURLcode success =curl_easy_perform(easy_handle);//返回0執行成功緩存
curl_easy_cleanup(easy_handle1);
//高級2
//指定上傳
//指定上傳大小
//easy handle回到原生狀態
curl_easy_setopt(easy_handle,CURLOPT_HTTPGET,1L);
多接口:muti interface 多線程不會引發阻塞
封裝成Http請求:
CCHttpRequest *request=new CCHttpRequest();
request->setUrl("http://www.baidu.com");
request->setRequestType(CCHttpRequest::kHttpGet);
request->setResponseCallback(this,callfuncND_selector(HelloWorld::onHttpRequestCompleted));
request->setTag("GET test1");
CCHttpClient::getInstance()->send(request);
request->release();
多線程開發技術: pthread跨平臺庫 視頻5
static void *thread_1(void *data)
{
CURL *easy_handle=curl_easy_init();
curl_easy_setopt(easy_handle,CURLOPT_URL,"http://www.baidu.com");
curl_easy_setopt(easy_handle,CURLOPT_WRITEFUNCTION,write_data);//call back
FILE *file;
curl_easy_setopt(easy_handle,CURLOPT_WRITEDATA,&file);
CURLcode success =curl_easy_perform(easy_handle);
if (success==CURLE_OK)
{
}
return ((void *)1);
}
互斥量:pthread_mutex_t count_lock;
死鎖:
條件變量:pthread_cond_t count_nonzero;
pthread_create(&tid,NULL,thread_1,NULL);
void * returnVoid;
pthread_join(tid,&returnVoid);//wait thread end 等待線程結束,未結束以前下面的代碼不執行
線程屬性:pthread_attr_t:是否綁定,是否分離,堆棧地址,堆棧大小,優先級,
//PTHREAD_SCOPE_SYSTEM 綁定, PTHREAD_SCOPE_PROCESS非綁定
線程屬性初始化:pthread_attr_setscope(&atr,PTHREAD_SCOPE_SYSTEM);
爲精靈添加事件:
通知事件:
A發送通知,B修改狀態
輸入框:
CCTextFieldTTF
CCTMEDelegate 針對輸入法的操做
CCTextFieldDelegate 操做TextField外觀和動畫的
cocos2d-x幾何圖形繪製: 關鍵函數draw()
程序進入到一個節點的時候,會執行節點的onEnter()函數
cocos2d-x 動做行爲:
動做與動做執行函數:CCAction * runAction(CCAction *action);
動做類型:瞬時動做
CCActionInstant
CCPlace 讓節點到一個位置
CCHide/CCShow 隱藏和顯示
CCToggleVisiility 也是顯示和隱藏,只是相對的修改當前的狀態
CCFlipX/CCFlipY 翻轉 對XY軸鏡像
延時動做
CCActionInterval
CCMoveTo/CCMoveBy to->移動到,By->根據當前位置移動多少的距離
CCJumpto/CCJumpBy 跳躍
CCBezierTo/CCBezierBy 貝塞爾曲線
CCScaleTo/CCScaleBy 縮放
CCRotateTo/CCRotateBy 旋轉
CCBlink 閃爍
CCTintTo/CCTintBy 色調變化
CCFadeTo 變暗到
CCFadeIn 淡出(慢慢顯示)
CCFadeOut 漸隱(慢慢隱藏掉)
組合動做
CCSequence 序列
CCSpawn 同步
CCRepeat 重複有限次數
Reverse 反動做
CCRepeatForever 無限重複
CCAnimate 建立幀動畫
速度變化
CCEaseIn 由慢變快(速度線性變化)
CCEaseOut 由快至慢
CCEaseInOut 由慢至快再由快至慢
CCEaseSineIn 由慢至快
CCEaseSineInOut 由慢至快再由快至慢
CCEaseExponentialIn 由慢至極快
CCEaseExponentialIn 由極快至慢
CCEaseExponentialInOut 由慢至極快再
CCSpeed 人工設定速度,經過setSpeed不斷調整
擴展動做
延時:CCDelayTime
函數調用 //動畫執行完調用一個函數接着執行下一個動畫
CCCallFunc(無參數函數)
CCCallFuncN(當前對象CCNode)
ActionManager 動做管理器 管理全部的Action
畫一個導圖:展現全部動做類的類圖。
緩存機制:
紋理緩存:
精靈幀緩存:
動畫緩存:
TexturePacker圖片拼合
CCSprite存儲圖片-》 CCTexture2D-》CCTextureCache(圖片緩存)
實時聯網遊戲開發技術:更新太快,因此後面再講
Socket通訊技術
數據儲存:文件目錄管理(CCFileUtils)和文件存取:(CCUserDefaault:輕量級數據)
(FILE)
CCFileUtils:文件管理工具
unsigned char * getFileData(const char * pszFileName,const char *PszMode,unsigned long *pSize)
getFileDataFromZip(...)
fullPathFromRelativePath(...)
fullPathFromRelativeFile(...)
setResourceDirectory(...)
getResourceDirectory()
getWriteablePath()
文件讀取:
CCUserDefault(易於存儲配置信息,存儲在XML文件當中)
CCUserDefault::sharedUserDefault()->setStringForKey("string", "value1"); CCUserDefault::sharedUserDefault()->setIntegerForKey("我老婆", 小珊珊);
string ret = CCUserDefault::sharedUserDefault()->getStringForKey("string");
string ret = CCUserDefault::sharedUserDefault()->getStringForKey("我老婆");
File
File *fopen(char *path,char *mode);
mode 類型,打開的方式: r,r+,rb+,rw+,w,w+,a,a+,
//從文件讀取一個字符。出錯或文件尾返回EOF
int fgetc(FILE *stream)
//寫入
int fputc(int c,FILE *stram);
fspritf
fclosef
網絡數據處理:
xml數據處理的不一樣方式:
cocos2d-x自帶的libxml2
具體代碼操做在視頻11
ICONV處理中文:
int code_convert(char * from_cahrset,char * to_charset,char *inbuf,char *outbuf,int inlen,int outlen)
{
iconv_t cd;
char **pin=&inbuf;
char **pout=&outbuf;
cd=iconv_open(to_charset,from_charset);
if(cd==0)
return -1;
memset(outbuf,0,outlen);
if(iconv(const char**)pin,(unsigned int *)&inlen,pout,(unsigned int *)&outlen)==-1)
return -1;
iconv_close(cd);
return 0;
}
CCSAXParser 使用:專門用來解析xml文件(陸續讀取數據,適合數據量比較大的狀況) 邊讀取邊解析
CCSAXParser
static void startElement(void *ctx, const CC_XML_CHAR *name, const CC_XML_CHAR **atts);
static void endElement(void *ctx, const CC_XML_CHAR *name);
static void textHandler(void *ctx, const CC_XML_CHAR *name, int len);
第三方庫:tinyxml(網上下載),視頻13,將文件添加到項目中
TiXmlDocument *myDocument=new TiXmlDocument();
myDocument->LinkEndChild(...);
myDocument->SaveFile(filePath);
json數據處理的不一樣方式: 輕量級
http://json.org
[
{"name":"more-top","age":17},
{"name":"android","age":5}
]
第三方庫:
JsonCpp http://sourceforge.net/projects/jsoncpp/
//讀Json
char *file=(char*) CCFileUtils::sharedFileUtils()->getFileData("testjson.json","r",&size);
Json::Reader reader;
Json::Value root;
if(!reader.parse(std::string(file),root,false))//解析函數
{
return;
}
//Json中一個元素
std::string name=root["name"].asString();
int age=root["age"].asInt();
//Json中多個元素
size =root.size();
for(int i=0;i<size,++i)
{
name=root[i]["name"].asString();
age=root[i]["age"].asInt();
CCLOG("name=%s,age=%d",name.c_str(),age);//輸出
}
//寫Json
Json::Value root;
Json::FastWriter writer;
Json::Value person;
person["name"]="hello world";
person["age"]=100;
root.append[person];
std::string json_file=writer::write(root);
char filePath[1024]={'\0'};
...
File *file=fopen(filePath,"w+");
fwrite(json_file.c_str(),json_file.size(),1,file);
fclose(file);
libJson 視頻14
先下載,再配置
編譯時默認是Release版本,因此要改爲Debug版本。
方法:找到頭文件:JSONOptions.h
#defile JSON_DEBUG //必須打開。若是要發佈則關閉
#define JSON_LIBRARY //必須關閉(使用C++版)不然C版
//讀取:
char *str=(char*) CCFileUtils::sharedFileUtils()->getFileData("testjson.json","r",&size);
if(libjson::is_valid(str)==false)//判斷是否有效的JSon
{
delete str;
str=NULL;
//容錯處理
}
JSONNNode rn=libjson::parse(str);
delete str;
int tmp=rn.size();
CCLOG("%d",tmp);
for(int i=0;i<rn[1].size();i++)
{
JSONNode temp=rn[1][i];
for(int j=0;j<temp.size();j++)
{
CCLOG("%s:%s",temp[j].name().c_str(),temp[j].as_string().c_str());
}
}
//寫入
JSONNode n(JSON_NODE);
n.push_back(JSONNode(JSONNode("RootA","Value in parent node"));
JSONNode c1(JSON_ARRAY);
加密技術:
何時須要加密 防盜版 ,防做弊
那些地方須要加密:資源加密,網絡傳輸,數據存儲加密
常見加密方案 MD5(網絡請求)(只能加密不能解密) ,BASE64, SHA1(只能加密不能解密)
CCCrypto.h 加密頭文件
加密視頻17
差別化與本地化的處理方式和遊戲的優化技巧
多分辨率的適配方案:
按照分辨率存放資源文件:
CCFileUtils::shareFileUtils()->setResourceDirectory("hd");
//指定縮放因子 等比縮放
pDirector->setContentScaleFactor(resourceSize.heigth/designSize.height);
//非等比縮放
kResolutionNoBorder:超出屏幕部分會被裁剪,兩側沒有黑邊,圖片不變形
kResolutionShowAll:會按原始比例進行縮放,圖片不變形
kResolutionExactFit:圖片可能會進行拉伸或者壓縮處理,鋪滿屏幕,圖片會變形
設計分辨率:DesignResolutionSize
CCEGLView::shareOpenGLView()->setDesignResolutionSize(designSize.width,designSize.height,kResolutionNoBorder);
顯示範圍:
getVisibleSize:表示可視區域的大小
getVisibleOrigin:表示可視區域的座標起點
相對位置:在遊戲中使用相對位置座標的好處是顯而易見的,這樣就不須要爲每一個分辨率都定義一套座標了。
首先得定義一些參考點。引擎的TestCpp例子就是提供了一種方法,以屏幕上但是區域的9個點做爲參考點,至關於在該矩形內寫一個米字,這9個點分別是:左上,左,左下,下,右下,右,右上,上,中心。
針對不一樣的分辨率加載不一樣的資源文件
本地化語言方案:
ccLanguageTypes currentLanguageType=CCApplication::shareApplication()->getCurrentLanguage();
typedef enum LanguageType
{
kLanguage
}
資源文件適配
CCFileUtils::shareFileUtils()->setResourceDirectory("hd_zh");//指定資源路徑
CCFileUtils::shareFileUtils()->setResourceDirectory("hd_en");
字符串資源適配:
遊戲優化技巧:
什麼樣的內容會影響效率和內存等
cocos2d-x能夠進行哪些優化
引擎底層優化:
紋理優化:
二的冪次方(拼圖) 480*320->512*512
色深優化 (格式轉換)
A8R8G8B8(32bit) A1R5G5B5(16bit) ARGB4444 (透明圖片須要R通道)
RGB888 RGB565 (非可透明圖片)
紋理壓縮格式
IOS設備用的是PowerVR顯示芯片,而PVR格式(A1R5G5B5(16bit))能夠被顯示芯片直接讀取,有硬件設備解碼支持,效率更高,可是不適合Android
骨骼動畫
Cocos2d-x2.0.3版本已經支持骨骼動畫系統。cocosbuilder2.1版本工具也能夠進行相應的骨骼動畫編輯。這對於優化內存是一個很好的方案。 (身體和腳是拆分的,身體一幀,腳不少幀)
紋理尺寸限制(拼圖最好儘可能限制在1024)
渲染優化:
批次處理CCSpriteBatchNode
資源緩存:
CCSpriteFrameCache
CCTextureCache
內存優化:
資源佔用的內存
內存池方案
內存計算: 圖片的寬度*高度*色深(32位的話,一個像 素點佔用4個字節)
Cocos2D-x高級UI系統
高級UI控件:
CCSacle9Sprite(按照9宮格方式去縮放一張圖片)
CCRect rect=CCRectMake(0,0,76,63);//圖片區域
CCRect capInsets=CCRectMake(10,10,40,40);//中間那塊區域
CCSize winRect=CCSizeMake(size.width/2,size.height/2);//窗口尺寸
CCScale9Sprite *m_pNextBG=CCScale9Sprite::create("extensions/orange.png",rect,capInsets);//後面兩個參數不帶的話,則就會平均分配
m_pNextBG->setPreferredSize(winRect);
m_pNextBG->setPositon(...);
this->addChild(m_pNextBG,5);
控制按鈕CCControlButton://TestCpp裏面的ExtensionTest/CCControlButtonTest
控制事件CCControlEvent
virtual void sendActionsForContrilEvents(CCControlEvent controlEvents);
標籤+按鍵組合
controlButton->addTageWithActionForControlEvents(this,
cccontrol_select(CCControlButtonTest_Event::touchDownAction,CCControlEventTouchDown);
拖動條CCControlSlider
CCControlSlider *slider = CCControlSlider::create("extensions/sliderTrack.png","extensions/sliderProgress.png" ,"extensions/sliderThumb.png"); slider->setAnchorPoint(ccp(0.5f, 1.0f));
slider->setMinimumValue(0.0f); // Sets the min value of range
slider->setMaximumValue(5.0f); // Sets the max value of range
slider->setPosition(ccp(screenSize.width / 2.0f, screenSize.height / 2.0f + 16));
slider->setTag(1);
restrictSlider->addTargetWithActionForControlEvents(this, cccontrol_selector(CCControlSliderTest::valueChanged), CCControlEventValueChanged);
顏色選取器CCControlColourPicker
CCControlColourPicker *colourPicker = CCControlColourPicker::create(); colourPicker->setColor(ccc3(37, 46, 252));
colourPicker->setPosition(ccp (colourPicker->getContentSize().width / 2, 0));
// Add it to the layer
layer->addChild(colourPicker);
// Add the target-action pair
colourPicker->addTargetWithActionForControlEvents(this, cccontrol_selector(CCControlColourPickerTest::colourValueChanged), CCControlEventValueChanged);
layer_width += colourPicker->getContentSize().width;
開關控件CCControlSwitch
CCControlSwitch *switchControl = CCControlSwitch::create
(
CCSprite::create("extensions/switch-mask.png"),
CCSprite::create("extensions/switch-on.png"),
CCSprite::create("extensions/switch-off.png"),
CCSprite::create("extensions/switch-thumb.png"), CCLabelTTF::create("On", "Arial-BoldMT", 16),
CCLabelTTF::create("Off", "Arial-BoldMT", 16)
);
switchControl->setPosition(ccp (layer_width + 10 + switchControl->getContentSize().width / 2, 0));
layer->addChild(switchControl);
switchControl->addTargetWithActionForControlEvents(this, cccontrol_selector(CCControlSwitchTest::valueChanged), CCControlEventValueChanged);
壓力計CCControlPotentionmeter
CCControlPotentiometer *potentiometer = CCControlPotentiometer::create("extensions/potentiometerTrack.png" ,"extensions/potentiometerProgress.png" ,"extensions/potentiometerButton.png");
potentiometer->setPosition(ccp (layer_width + 10 + potentiometer->getContentSize().width / 2, 0));
分段控件CCControlStepper
CCControlStepper *stepper = this->makeControlStepper();
stepper->setPosition(ccp (layer_width + 10 + stepper->getContentSize().width / 2, 0));
stepper->addTargetWithActionForControlEvents(this, cccontrol_selector(CCControlStepperTest::valueChanged), CCControlEventValueChanged);
layer->addChild(stepper);
滾動視圖CCScrollView 視頻25
virtual void scrollViewDidScroll(CCScrollView *view)=0;//滾動結束以後觸發
virtual void scrollViewDidZoom(CCScrollView * view)=0;//縮放結束以後觸發
列表視圖CCTableView
class CCCTableViewDelegate:public CCScrollViewDelegate
CCTableViewDataSorce
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
CCTableView* tableView = CCTableView::create(this, CCSizeMake(250, 60));
tableView->setDirection(kCCScrollViewDirectionHorizontal);
tableView->setPosition(ccp(20,winSize.height/2-30));
tableView->setDelegate(this);
this->addChild(tableView);
tableView->reloadData();
Cocos2D-x集成SDK控件:
集成IOS平臺控件: 直接替換掉項目中class和Resource兩個文件夾再進行編譯就好了。
集成Android平臺控件:
開發環境搭建
Java/c/c++互相調用
Android view
Android NDK 開發
1NDK開發環境搭建 Native Development Kit(原生代碼)
2安裝cygwin(windows)
3Android SDK開發環境
4安裝CDT插件(在eclipse 下編寫C++代碼)
5下載並解壓NDK
6設置NDK環境變量
安裝Sequoyah插件(http://www.eclipse.org/sequoyah/downloads/)
配置NDK路徑:在「window->preferences->Android->本機開發」中添加NDK的路徑。
hello-jni 實例:
//java 文件
public native String stringFromJNI();//這個函數會調用C++函數
//c++文件
#include<string.h>
#include<jin.h>
jstring java_com_example_helljni_HelloJni_stringFromJNI(JNIEnv* env,jobject thiz)
{
return (*env)->NewStringUTF(env,"Hello,from JNI !");
}
編譯hello-jni
LOCAL_PATH:=$(call my-dir) //定義本地路徑
include $(CLEAE_VARS) //清除以前全部內容
LOCAL_MODLE:=hell-jni
LOCAL_SRC_FILES:=hello-jni.c //全部文件
include$(BUILD_SHARED_LIBRARY) //編譯成so文件(IOS)
JNI概述:
Jni全部接口都在#inclu"jni.h"
JavaType Native Type(c++type)
int jint
string jstring
Java 調用C方法流程:
在java層使用native關鍵字定義函數
public native String stringFromJNI(int x,int y);//這個函數會調用C++函數
在c中實現native函數
jstring java_com_example_helljni_HelloJni_stringFromJNI(JNIEnv* env,jobject thiz,int x,int y)
{
return (*env)->NewStringUTF(env,"Hello,from JNI !");
}
C調用java靜態方法 視頻27 (跳看)
開發環境:mac平臺 Xcode
C/c++與Object-C混編 .mm 文件 直接相互調用
關鍵文件:main.m->AppController.mm
開源可視化開發工具:
CocosBuilder遊戲設計:http://cocosbuilder.com 視頻29
CocosBuilder的場景 只能在mac上使用
加載一個cocosBuilder 編輯好的場景:
在scene()函數下:
scene()
{
CCScene *scene=CCScene::create();
CCNodeLoaderLibrary * lib=CCNodeLoaderLibrary::newDefaultCCNodeLoaderLibrary();
CCBReader *reader=new CCBReader(lib);
CCNode *node=reader->readNodeGraphFromFile("MainScene.ccbi",scene);
reader->release();
if(node!=NULL)
{
scene->addChild(node);
}
return scene;
}
cocosbuilder 場景製做 視頻2九、視頻30 (未詳細看)
Cocos2D-x底層實現
引擎實現基礎:OPenGL是2D/3D圖形編程的低級API。針對顯卡的編程(效率較高,硬件加速)。 都是基於OpenGL實現
OpenGL基礎
OpenGL
OpenGL ES2.0:針對可編程管線硬件(programmable pipeline),則須要手動編寫shader程序來完成對顯卡的操做。
OpenGL渲染基礎:
OpenGL使用流程:
1)準備view //顯示圖片渲染
2)建立OpenGL context
3)建立render buffer(渲染緩衝去)
OpenGL的一個對象,用於存放渲染過的圖像。屏幕大的二維數組,用於存放渲染後的圖片
4)建立frame buffer(幀緩衝區)
OpenGL的對象,它包含了前面提到的render buffer,以及其它後面會講到的諸如:depth buffer、stencil buffer和accumulation buffer。
OpenGL渲染流程
編寫着色器shaders程序(由顯卡執行)
要在OpenGL場景彙總渲染物體,都須要建立兩個着色器程序。
Vertex shaders (頂點着色器)
attribute vec4 Position;//位置信息,須要傳入的數據
attribute vec4 SourceClolr;//顏色信息,須要傳入的顏色(須要傳入則標示爲attribute)
varying vec4 DestinationColor;//傳出的顏色
void main(void)
{
DestinationColor=SourceColor;//不會處理顏色,直接傳出給片斷着色器接收
gl_Positon=Positon;//內置變量,保存頂點數據
}
Fragment shaders (片斷着色器)//負責計算顏色
varying lowp vec4 DestinationColor;//highp 精度標示
void main(void)
{
gl_FragColor=DestinationColor;
}
編譯Vertex shader 和Fragment shader//運行時才進行編譯,很是好的支持跨平臺
glCreateShader//建立shader對象,安裝類型區分(GL_VERTEX_SHADER、GL_FRAGMENT_SHADER)
glShaderSource//獲取shader源碼
glCompileShader//編譯shader
glGetShaderiv、glGetShaserInfoLog//檢查編譯是否成功,獲得錯誤信息
glCreateProgram//建立渲染Program
glAttachShader//綁定兩個shader到Program
glLinkProgram //將兩個shader連接成一個完整的Program
glGetProgramiv、lglGetProgramInfoLog//檢測是否連接成功、打印錯誤信息
glUseProgram//讓OpenGL執行Program
glGetAttribLocation//獲取shader中傳入變量,後期將傳遞值到shader中計算
glEnableVertexAttribArray//啓用數據
頂點數據:
建立Vertex Buffer對象
glGenBuffers//建立一個Vertex Buffer對象
glBindBuffer//告訴OpenGL vertexBuffer是指GL_ARRAY_BUFFER
glBufferData//綁定數據到Vertex Buffer
渲染圖形
glVertexAttribPointer//像shader提供輸入參數值
glDrawElements//繪製圖形,在每一個頂點調用定點vertex shader,在每一個像素調用fragment shader
投影矩陣:
uniform mat4 Projection;//矩陣變量
gl_Positon=Projection * Position;
glGetUniformLocation//獲取在vertex shader 中的Projection輸入變量
glUniformMatrix4fv//爲shader提供傳入變量的值
模型視圖矩陣
uniform mat4 Modelview;
gl_Position =Projection *Modelview * Position;//矩陣相乘的順序不能改變
紋理數據:把圖片數據映射到前面定義好的四邊形中
attribute vec2 TexCoordIn;//輸入紋理座標
varying vec2=TexCoordOut; //輸出紋理座標
TexCoorOut=TexCoordIn;
varying lowp vec2 TexCoordOut;
uniform sampler2D Texture;//紋理採樣
gl_FragColor=DestinationColor*texture2D(Texture,TexCoordOut); //後面函數返回對應紋理點的顏色值
glGenTextures//建立紋理
glBindTexture//綁定紋理
glTexParemeteri//設置紋理過濾,相似於設置桌面壁紙方案
glTexImage2D//設置紋理數據->把圖像數據映射到紋理上面來
glActiveTexture//激活紋理
glBindTexture//綁定紋理
glUniformli//向fragment shader傳遞紋理數據
遊戲引擎實現:(剖析引擎實現)
cocos2d-x引擎結構:
程序入口main()->初始化窗口、初始化OpenGL/DX->遊戲主程序:1更新遊戲、2顯示遊戲
引擎結構剖析:視頻37(win32), 視頻38(ios) 視頻39(java),《未細看,拖着看的》
Cocos結構分析:
幾何圖形:渲染步—驟視頻43 ,熟悉OpGL的時候再溫習一下
Shader
-> CCShaderCache ->CCDrawingPrimitives-> init/free 、draw...
CCGLProgram GLStateCache
CCNOde系統:圖片展現:
CCNode要點:
1.節點樹
2.visit
3....
座標與尺寸:
locationView //轉化爲相對於UI(view)的點
convertToGL //轉化爲相對於GL世界座標的點
//將GL世界座標的點轉化爲相對節點空間的點
convertToNodeSpace(const CCPoint & worldPoint);
convertToWorldpace(const CCPoint & nodePoint);
//須要考慮到錨點
convertToNodeSpaceAR(const CCPoint & worldPoint);
convertToNodeSpaceAR(const CCPoint & nodePoint);
尺寸和多分辨率適配:
contentScalseFactor=RH/DH=640/320=2.0f
OPGL 視口
列表視圖裁剪:CCEGVLiew::sharedOpenGLView()->setScissorInPoints(100,100,100,100);
glEnable(GL_SCISSOR_TEST); //要打開
內存管理機制:視頻48
事件處理機制:
CCTouch
視頻49-視頻55誤刪了
Action分析:(動畫)視頻56
Animation分析:
CCSpriteFrame(精靈幀,也就是一張圖片)數據儲存中轉站
CCAnimationFrame(動畫幀)
CCAnimation(連續的圖片展現) CCAnimationCache
CCAnimate須要根據CCAnimation來構建動畫。
粒子系統分析:粒子(particle)、粒子發射器(給定一些屬性,啓動每個粒子)
CCTextureAtlas(文理渲染)
->CCParticleBatchNode(紋理集合批次管理)
->CCParticleSystem
-> CCparticleSystemPoint
CCparticleSystemQuad->CCparticleFire、CCParticleSun、CCParticleFlower
地圖系統分析:
CCTMXXMLParser:
CCTMXXTilesetInfo
CCTMXMapInfo CCTileMapAtlas
CCTMXtiledMap CCParallaxNode
CCTMXLayer
CCParallaxNode
物理引擎分析:
scheduleUpdate();CCLayer::update(float dt)
-> CCPhysicsDebugNode->CCDrawNode
CCPhysicsSprite
網絡模塊:
CCHttpClient:(Http客戶端) CCHttpRequest
多線程 CCHttpResponse
請求隊列
響應隊列
數據儲存和音樂音效
CCUserDefault 在目錄:support/user_defaultSimpleAudioEngine