91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Cocos2d-x-3.x特性變化

發布時間:2020-06-15 23:17:01 來源:網絡 閱讀:484 作者:libinqi456 欄目:游戲開發
 Cocos2d-x-3.x特性變化
 
目錄
第1章字面替換
1.1 去除CC前綴
1.2 枚舉常量的封裝
1.3 單例對象的獲取
1.4 紋理緩存對象被放置到Director中
1.5 Node類的屬性函數名修改
第2章 c++11新特性
2.1 auto關鍵字
2.1.1 auto特性
2.1.2 建議
2.2 lambda表達式
2.2.1 最簡單的lambda表達式
2.2.2 定義lambda表達式函數變量
2.2.3 lambda表達式概念
2.2.4 捕捉列表
2.2.5 參數列表
2.2.6 返回值
2.2.7 代碼塊
2.3 lambda表達式在cocos2dx中的應用
2.4 std::function和std::bind
 
第1章  字面替換
1.1  去除CC前綴
由于cocos2d-x開發者認為已經有命名空間來避免命名沖突,因此在3.0及其以后的版本里,標識符命名放棄了CC前綴。
比如CCSprite被改成了Sprite,CCDirector被改成了Director
1.2  枚舉常量的封裝
很多枚舉變量都進行了修改,要使用類名::枚舉名來訪問,避免沖突,比如:
glview->setDesignResolutionSize(768,1280, ResolutionPolicy::EXACT_FIT  /*kResolutionExactFit*/);
kResolutionExactFit已經被標記為廢棄,建議使用新的宏ResolutionPolicy::EXACT_FIT,但是kResolutionExactFit依舊能使用,編譯時候會得到一個警告。
1.3  單例對象的獲取
在2.x中,使用sharedXXX靜態函數來獲取單例對象,比如:
CCUserDefault::sharedUserDefault()->seIntergerForKey(...);
在3.x中使用
CCUserDefault::getInstance()來獲取單例對象
1.4  紋理緩存對象被放置到Director中
通過CCDirector::getTextureCache()去獲取紋理緩存
1.5  Node類的屬性函數名修改
virtualvoid setRotationSkewX(float rotationX);
CC_DEPRECATED_ATTRIBUTEvirtualvoid setRotationX(floatrotationX) { return setRotationSkewX(rotationX); }
 
virtualRect getBoundingBox() const;
    /** @deprecated Use getBoundingBox instead */
    CC_DEPRECATED_ATTRIBUTEinlinevirtualRect boundingBox() const { return getBoundingBox(); }
 
virtualvoid setLocalZOrder(int localZOrder);
 
    CC_DEPRECATED_ATTRIBUTEvirtualvoid setZOrder(intlocalZOrder) { setLocalZOrder(localZOrder); }
可憐常用的SetZOrder,boundingbox,全部得改了,老版本也能用,但是會被警告
 
第2章  c++11新特性
2.1  auto關鍵字
2.1.1  auto特性
auto i = 1;
編譯器知道i是個整數類型
auto director =Director::getInstance();
根據getInstance的返回,編譯器知道是Director類型的指針
2.1.2  建議
建議:別濫用auto,實在不行的時候用,平時該咋地還咋地,auto寫起來比int還長一些呢,都是auto以后代碼看起來很痛苦的
2.2  lambda表達式
2.2.1  最簡單的lambda表達式
int i = []{return1;}();
以上結果會返回1,然后賦值給i
2.2.2  定義lambda表達式函數變量
auto func = []{return 1;};
auto value = func();
 
如果把func替換成lambda表達式,就變成2.2.1中的樣子了。
2.2.3  lambda表達式概念
lambda表達式是一個匿名函數,格式如下:
[捕捉列表](參數列表)->返回類型{代碼塊;}
其中返回類型和參數列表可以省略,所以有了以上最簡單的lambda表達式了。
2.2.4  捕捉列表
1.傳值捕獲
捕捉列表使得lambda表達式能訪問外部變量。
int func()
{
       intb = 1;
       intc = [=b]{ b++; return b; };
}
以上lambda表達式里,捕獲列表將b捕獲到表達式中,使得表達式可以使用變量名b。但是使用=b捕獲,是傳值捕獲,lambda中的b++不會影響fanc中的b。
在gcc中,b++的操作會報錯,應為b在lambda中,屬于常量,但是vc比較坑爹,沒有報錯。
2.傳址捕獲
int func()
{
       intb = 1;
       intc = [&b]{ b++; return b; };
}
使用&表示傳址捕獲,lambda表達式中的b++會使得func中的b增加1
3.捕獲多項變量
int func()
{
       intb = 1;
       intd=1;
       intc = [&b,=d]{ return ++b+d; };
}
需要捕獲多項時候,用逗號隔開
4.全捕獲
intfunc()
{
    int b = 1;
    int d = 1;
    int c = [&]{b++; d++; return b+d;}
}
全部變量都被引用方式捕獲
intfunc()
{
    int b = 1;
    int d = 1;
    int c = [=]{b++; d++; return b+d;}
}
以上例子,全部變量被拷貝方式捕獲,b++和d++不影響外面的變量
捕獲列表也能捕獲全局變量。
2.2.5  參數列表
參數列表和普通函數的參數列表一樣,我就不嘮叨了
2.2.6  返回值
返回值,我一般都省略了,沒啥用啊,編譯器會自動推導的。但是在某種情況下有點用,比如:
autoi = []->int{return 0.5f}();
如果沒有->int標記返回值,那么i的類型將會是float。
2.2.7  代碼塊
跟普通函數的代碼塊沒啥區別。
2.3  lambda表達式在cocos2dx中的應用
很多回調函數都可以使用lambda來表示了,這樣可以省去很多麻煩,用之前的selector也還可以,但是會獲得一個警告。
 
MenuItem*item = MenuItemFont::create("Close Program", []{
    Director::getInstance()->end();
});
以上代碼示例了,如果創建一個菜單項,當點擊這個菜單時,調用了一個lambda表達式,去停止程序。
2.4  std::function和std::bind
#include<cstdio>
#include<cstdlib>
#include<functional>
 
int f(inti, charc, doubled)
{
         printf("int is %d, char is%c, dobule is %g\n", i, c, d);
         returni;
}
 
classF
{
public:
         virtualvoid func()  
         {
                   printf("F::func\n");
         }
};
classC : publicF
{
public:
         void func() overridefinal  
         {
                   printf("C::func\n");
         }
};
 
int main()
{
         // 作為函數的包裝
         std::function<int(int, char, double)> ff;
         ff = f;
         ff(1, 'c', 4);
 
         ff = std::bind(f,std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
         ff(2, 'c', 5);
 
         std::function<int(int)> ff1;
         ff1 = std::bind(f,std::placeholders::_1, 'c', 8);
         ff1(2);
 
         std::function<int(double, char, int)> ffr;
         ffr = std::bind(f,std::placeholders::_3, std::placeholders::_2, std::placeholders::_1);
         ffr(10.0, 'c', 1);
 
         C c;
         std::function<void()> mFunc;
         mFunc = std::bind(&F::func, &c);
         mFunc();
 
         // lambda 和function,給匿名函數命名,尼瑪的,真能折騰。。。直接給個名字好不好
         std::function<int(int, int)> lFunc = [](inta, intb){returna + b; };
         int a = lFunc(3, 4);
         printf("result is %d\n", a);
 
         // lambda和bind和function
         lFunc = std::bind([](inta, intb){returna + b; },std::placeholders::_1, std::placeholders::_2);
         a = lFunc(100, 1000);
         printf("result is %d\n", a);
 
         system("pause");
}
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临沧市| 辉南县| 神农架林区| 景泰县| 洛阳市| 莱州市| 灌云县| 哈密市| 姚安县| 郸城县| 盖州市| 磴口县| 甘肃省| 荥经县| 甘南县| 桂阳县| 萨迦县| 大化| 乾安县| 永寿县| 遂昌县| 涪陵区| 佛坪县| 虎林市| 芜湖市| 南乐县| 衢州市| 邢台市| 惠安县| 多伦县| 内丘县| 道孚县| 廉江市| 如东县| 游戏| 丘北县| 宁阳县| 锡林浩特市| 宁晋县| 井研县| 启东市|