• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            積木

            No sub title

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              140 Posts :: 1 Stories :: 11 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(1)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            #

            轉載:http://blog.csdn.net/bill_man/article/details/7250922

            切換高清

            隨著硬件技術的提高,提供了更好的畫面,我們可以通過如下的方法來切換高清

            CCDirector::sharedDirector()->enableRetinaDisplay(true);

            參數是true,就是開啟高清,為false就是關閉高清,當然目前應該是iphone4itouch4及以上支持這種“視網膜”顯示。當你開啟這個時,你的游戲圖片會自動變為“原圖片名(除后綴名+"-hd."+后綴名),如果文件不存在會繼續使用原圖。

            posted @ 2013-03-05 13:50 Jacc.Kim 閱讀(552) | 評論 (0)編輯 收藏

            轉載自:http://developer.51cto.com/art/201002/182799.htm

             

            C++左值與右值之間共同與不同點解析

            2010-02-03 17:32 佚名 博客園 我要評論(1) 字號:T | T
            一鍵收藏,隨時查看,分享好友!

            C++左值與右值都有哪些不同之處,又有哪些聯系呢?我們將會通過對這篇文章的介紹,為大家詳細講解有關內容,幫助大家理解。

            AD: 2013大數據全球技術峰會低價搶票中

            C++編程語言與C語言相比有很多不同之處,而且這些不同的地方有都體現著非常重要的作用。現在我們將會為大家詳細介紹一下有關C++左值與右值之間的一些聯系,希望能幫助大家對這一語言有一個深刻的認識。

             

            1. C++左值與右值概念

            變量和文字常量都有存儲區,并且有相關的類型,區別在于變量是可尋址的;

            對于每個變量,都有2個值與其相關聯:

            1>數據值,存儲在某個內存地址中,也稱右值(rvalue),右值是被讀取的值(read value),文字常量和變量都可被用于右值。

            2>地址值,即存儲數據值的那塊內存地址,也稱左值(lvalue),文字常量不能被用作左值。

            2 . C++左值與右值的相關問題

            給表達式加上括號: ++a--

            結果 ++(a--)

            這個表達式是非法的,因為前增量操作要求一個可修改的左值,而 "a--" 不是左值(即右值)

            3 . C++左值與右值中前增量和后增量的區別

            早期的c語言教材,for循環語句通常寫成:

            for(int i=0;i<10;i++)

            而現在多為:

            for(int i=0;i<10;++i)

            兩者有區別嗎?

            a++ 即是返回 a的值,然后變量 a 加 1,返回需要產生一個臨時變量類似于

            1. {
            2. int temp = a;
            3. aa=a+1;
            4. return temp; //返回右值
            5. }

             

            ++a 則為:

            1. {
            2. aa=a+1;
            3. return &a; //返回左值
            4. }

             

            顯然,前增量不需要中間變量,效率更高。

            C++左值與右值的含義與誤區

            術語 “L-Values” 和 “R-Values” 是很容易被搞混的,因為它們的歷史淵源也是混淆。他們最初起源是編譯器的設計者,從字面上來理解就是表達式左邊的值和表達式右邊的值。它們的含義一直在演化而名字卻沒變,現在已經“名”不副“實”了。雖然還是稱為left-value 和right-value,但是他們的含義已經大大不同了。

            C++ 03 標準上是這樣寫的: “每一個表達式要么是一個 lvalue,要么就是一個 rvalue。”

            記住,lvalue和rvalue是針對表達式而言的。

            lvalue 是指那些單一表達式結束之后依然存在的持久對象。例如: obj,*ptr, prt[index], ++x 都是 lvalue。

            rvalue 是指那些表達式結束時(在分號處)就不復存在了的臨時對象。例如:1729 , x + y , std::string("meow") , 和 x++ 都是 rvalue。

            ++x 和 x++ 的區別的語義上的區別: 當寫 int i = 10 ; 時, i 是一個 lvalue,它實際代表一個內存里的地址,是持久的。 表達式 ++x 也是一個 lvalue,它修改了 x 的值,但還是代表原來那個持久對象。但是,表達式 i++ 卻是一個 rvalue,它只是拷貝一份i的初值,再修改i的值,最后返回那份臨時的拷貝,那份拷貝是臨時對象。 ++i 和 i++ 都遞增i,但 ++i 返回i本身,而 i++ 返回臨時拷貝。這就是為什么 ++i 之所以是一個 lvalue,而 i++ 是一個 rvalue。

            lvalue 與 rvalue 之分不在于表達式做了什么,而在于表達式代表了什么(持久對象或臨時產物)。 判斷一個表達式是不是 lvalue 的直接方法就是“能不能對表達式取址?”,如果能夠,那就是一個 lvalue;如果不能,那就是一個 rvalue。

            以上就是我們為大家介紹的有關C++左值與右值的相關介紹。

            【責任編輯:曹凱 TEL:(010)68476606】
            posted @ 2013-03-04 23:12 Jacc.Kim 閱讀(316) | 評論 (0)編輯 收藏

            首先,先溫故一下c/c++調用lua的步驟:
            1) 下載lua源碼包(提示:下載后,需要自行編譯,編譯后才會有相應的lib)
            2) 將編譯好的lib鏈入項目
            3) 包含相應的lua頭文件,如下:
            #ifdef __cplusplus
            extern "C" {
            #endif
            #include "lua.h"
            #include "lualib.h"
            #include "lauxlib.h"
            #ifdef __cplusplus
            }
            #endif
            此處頭跟尾處的__cplusplus宏判斷是有必要的。
            4) 創建一個lua解析器:lua_State *L; L = lua_open();
            5) 調用lua庫接口:luaL_openlibs(L);打開lua庫
            6) 至此,就可以使用lua相關的功能了。如:加載lua腳本(luaL_dofileL, luaFileName);等等
            7) 在使用完lua后,一定要關掉lua解析器。luaL_close(L);

            接下來要介紹的是相反的調用工作。即:通過lua調用c/c++相關的功能。在此就需要用到tolua++了。
            在此同樣先介紹一下實現步驟:
            1) 同樣需要先下載tolua++庫
            2) 將相關的tolua++庫鏈入項目
            3) 將需要導給lua腳本使用的c/c++常量、變量、宏、接口、甚至類以及其接口,整理到相應的干凈包中。
            4) 使用tolua++工具(即:.exe文件),解析干凈包。解析成功后,將自動生成相應的c/c++的頭文件及源碼
            5) 包含同 4) 生成的頭文件,同時包含tolua++要關的頭文件
            6) 明確初始化包。具體為:tolua_XXXX_open(L);
            7) 此后就可以在lua腳本中使用c/c++相關的功能了。
            至此c/c++與lua間的相互調用就全部介紹完畢。

            另外,以個人實際游戲框架設計的經驗來看,其實,我們可以定義一個協議接口,將項目與lua的接口連接起來。這樣,我們在c/c++與lua間的調用就可以通過通用的一個或很少的幾個接口來工作。如此整個框架就搭建起來了。
            posted @ 2013-02-22 09:56 Jacc.Kim 閱讀(956) | 評論 (0)編輯 收藏

            今日編譯鏈接一個exe時,提示如下錯誤:
            vs2008 Project : error PRJ0019: A tool returned an error code: "Performing Post-Build Event..."

            經過網上查詢,可使用如下方法解決:

            打開properties屬性頁,找到Build Events選項,選擇Post-build event選項,

            它的command line選項置成空

            /////////

            工程中command line

            內容為

            mkdir ..\..\..\..\發布組件\服務器組件\Release

            copy /y ..\..\..\..\運行\Release\$(TargetFileName) ..\..\..\..\發布組件\服務器組件\Release\$(TargetFileName)



            作用 是生成完了拷貝文件用的。
            posted @ 2013-01-31 11:54 Jacc.Kim 閱讀(1272) | 評論 (0)編輯 收藏

            此篇文章打算介紹兩個,在平時工作中,使用頻繁并且十分有價值的功能。(因為你的項目不用到還好,只要用到,下面這兩個一般是必不可少)
            功能點1:將本地時間轉成格林威治時間,或者是將格林威治時間轉成本地時間。
            功能點2:將時間轉成時間戳,以及如何將時間戳轉成時間。
            有些人可看剛看到上面的功能點概述,可能會覺得這沒什么難的。也的確,事實上,確實不難。但如果你要是沒真正處理過的話,可能一時還真會壁。比如:功能點1,將本地時間轉成格林威治時間。因為我們根本不知道我們當前的本地時間與標準時間的時差到底是多少。所以你要怎么轉??(我們不能單純地認為,我們是中國人,所以時差都是8個小時。那如果你的游戲要是發布到世界其他國家了??那時差就完全不同。甚至就算是中國,你在上海,跟在西藏,那時間也是有差別的。因此,我們需要根據本地時刻值,精確地計算出與標準時間的時差。從而才可以準確轉換成格林威治時間。看下面處理方法:
            a) 將格林威治時間轉成標準時間
             ptime CommonHelper::utcToLocal(ptime utctime)
             {
              return boost::date_time::c_local_adjustor<ptime>::utc_to_local(utctime);
              //說明:c_local_adjustor對象的utc_to_local()接口就是用來處理本地時間跟標準時間的偏差的。
              //此處所謂的本地時間,并不是固定指說北京時間。而是你的計算處在地球的哪條經線上,該經線
              //跟格林威治所處的經線的時差量。(我剛看到這個功能時,實在太讓我驚訝了都!)

              //但是有一點需要注意:boost中,只提供了標準時間轉本地時間的上述接口,卻沒有
              //直接提供將本地時間轉成標準時間的接口。不過,既然有了utc_to_loca()這樣的神兵利器
              //我們同樣可以很方便地處理將本地時間轉成標準時間的問題。見如何:
             }

            b) 將本地時間轉成格林威治時間
            ptime CommonHelper::localToUtc(ptime ltime)
             {
              return ltime - (utcToLocal(epoch) - epoch);
              //說明:(utcToLocal(epoch) - epoch)這部分內容您的計算機的當地時差量(如果是在北京,那就是8小時)
             }

            接下來介紹一下第二部分的功能點。即:功能點2:將時間轉時間戳以及將時間戳轉時間
            c) 將boost中的時間轉成時間戳,其實很簡單。中需要做如下處理即可。(在此就不多說)
             WE::int64 CommonHelper::getUTCTimestamp()
             {  
              return (microsec_clock::universal_time() - epoch).total_milliseconds();
             }

            d) 此處重點介紹一下,如何將時間戳轉成時間。這個確實有點令人頭痛。為什么這么說?因為時間戳,其實只是一個
            數量值。這個數量值記載的信息的意義是指:自:1970-1-1到指定時刻所走過的時間量值。如此,或許有人就會說,
            既然你都說了,是從1970到指定時刻的量值,兩個時間相加不就好了。確實是這樣子的,但有個小問題是:因為我們
            沒法清楚這個量值的單位是什么。如果單位是:毫秒,而你把它當成秒或當成微秒來處理,結果都將是錯的。關于這點,
            其實boost有個時間處理的決策“的開關”,這個似乎還要看自己編譯的boost的lib是使用到哪個精度的級別。關于這塊
            本人暫時還沒深入到這方面,所以也不敢妄言。不過,有個接口,大家可以參考著使用下。time_duration::resolution()
            這個就可以用來識別,當前系統中boost在時間這方面使用到的精度值。(例如本人目前項目中,使用到的是微秒級別的。
            所以返回值為:micro。)
            下面給他幾種實現時間戳轉時間的小例子:(以下假定,時間戳的單位為毫秒)
            e) 通過接口:from_time_t();
            ptime time_5 = from_time_t(timestamp);
            f) 通過time_duration
            milliseconds xx(time_1_stamp);
            ptime xxxxxxxxxxxx = CommonHelper::epoch + xx;
            g) 直接通過手動計算。此方法實現思路很簡單,但操作起來個人感覺易錯。寫的代碼量又多,所以本人還是建議使用上面兩種,特別是第2種
            假如:timestamp是時間戳。則先計算出它的小時,再計算出它的分鐘,計算出它的秒數,最后計算出它的毫秒數。然后與commonhelper::epoch相加即可。
            注意:上面的e) f) g) 其實還是有區別的。用e)跟f)轉出來的精度值方面會不中方法g)。但在項目使用中,前兩者計算出來的精度值,一般
            情況下,是絕對可夠的。這是一個注意點,給大家提醒一下。

            好了,這篇文章暫時就先寫到這吧。。其實關于boost時間,還有非常多的內容可以挖掘,改天有機會再寫吧。希望對大伙有幫助。
            如果有錯誤之處,還請指教。:)
            posted @ 2013-01-02 16:27 Jacc.Kim 閱讀(3012) | 評論 (0)編輯 收藏

            正常情況下,Lua對函數的調用與c/c++是一樣的。
            即:調用函數時,必須加上括號。如:

            聲明:
            function testFunc(x, y)
               // do something...
            end;

            調用:
            testFunc(3, 4);

            但是有一個特殊是:如果函數的參數只有一個。并且這個參數是字符串或者是表結構時,括號可以不寫。如下:
            print "Hello world!";         它等價于: print("Hello world!");
            dofile "a.lua";                  它等價于: dofile("a.lua");
            yourfunction {x = 10, y = 20};   它等價于: yourfunction({x = 10, y = 20});
            type {}                           它等價于: type({});
            posted @ 2012-12-08 14:42 Jacc.Kim 閱讀(226) | 評論 (0)編輯 收藏

             1 
             2 -- 學習一下表結構的語法
             3 function studyTableStruct()
             4 
             5     local testTable = {};   --初始化一個空的(即:該表中沒有任何域)
             6     testTable[2= "是吧";
             7     print(testTable[2]);    --此處正常輸出。說明就算是添加新字段,字段的索引也未必就一定要按順序從1開始。
             8     testTable[1= "ak47";  --添加一個無名字的新字段,而且它的索引值是為1的。([a]記住:只要字段有索引的概念,則它就沒有名字) 。這邊的 [a]與下面的 [b] 說明很關鍵
             9     print(testTable[1]);
            10     testTable.newField = "newfield";--添加一個名字為newField的新字段。([b]記住:只要字段有名字,則它就沒有索引這一概念。)
            11     print(testTable.newField);
            12     testTable["x"= "哇塞,這也行?";
            13     print(testTable["x"]);
            14     
            15     -- 如果理解了上面的 [a] 與 [b] ,則很容易理解下面的例子
            16     local a = {x = 20, y = 0};--這個例子是來自教材上的例子。但是在此本人有做了修改。并親自測試過后,總結了上面的 [a] 與 [b] 點
            17     print(a.x);         --輸出:20
            18     print(a[1]);        --輸出:nil
            19     print(a["x"]);      --輸出:20
            20     --如果將a的結構改成如下:
            21     a = nil;
            22     a = {x = 20"agogo", y = 0"ak47""mytest"};
            23     print(a.x);         --輸出:20
            24     print(a[1]);        --輸出:agogo
            25     print(a[2]);        --輸出:ak47
            26     print(a[3]);        --輸出:mytest
            27     print(a["x"]);      --輸出:20
            28     --pritn(a[x]);        --這樣會蹦。要么像 a[1]那樣訪問。即:中括號呈的內容必須為數字或者使用雙引號括號起來
            29     --[[
            30     總結一下上面的測試例子:
            31     1) 大括號:{} 是用來定義一個表結構的。所謂的定義,其實只不過是給表一個初始化的作用。其實里面的字段域有幾個或怎么初始化,都只是影響到初始化時的狀態。
            32         后面不要時,完全可以隨時將某個字段刪除掉(提示:刪除只需要將該字段賦nil即可。)
            33         也完全可以隨時隨地添加一個新的字段。
            34         正因為如此靈活,所以說 {} 僅僅只是影響表的初始化的結構狀態。
            35     2) 表的字段域的訪問有兩種:YourTable.FieldName以及使用中括號 [] 來訪問。
            36         a) 如果所訪問的字段不存在。則返回nil
            37         b) 使用YourTable.FieldName訪問字段時,則如果表中不存在FieldName這個字段時,返回nil。存在時,返回相應的值。像上面的a表中的x與y就可以用這種方式訪問。
            38             或者上面的testTable表中的newField或者 x字段就可以這樣子訪問
            39         c) 使用中括號 [] 訪問時,如果表中的字段是有名稱的話,則字段必須使用雙引號括號起來。否則訪問不到。并且還會蹦。
            40         d) [] 中的內容,只能是數值索引,或者是使用雙引號括號起來的字段的名稱。
            41     ]]--
            42     
            43 end
            44 
            45 
            posted @ 2012-12-08 14:18 Jacc.Kim 閱讀(353) | 評論 (0)編輯 收藏

            簡述:在 Delphi 中,有 and 與 or
            在 c/c++ 中,有 && 與 ||
            在 Lua 中,有 and 與 or
            它們3者都表示邏輯運算符。但它們是有區別的。
            Delphi中的 and 與 or 不但可以表示邏輯與、邏輯或運算符,還可以表示與運算以及或運算。
            示例:
            procedure test;
            var
               lVar: integer;
               lVar2: integer;
               lVar3: integer;
            begin
               lVar = 20;
               lVar2 = 30;
               if (10 = lVar) and (20 = lVar2) then
               begin
                  // do something here.
               end
               else if (20 = lVar) or (30 = lVar2) then
               begin
                  // do something here.
               end;
               lVar3 = lVar and lVar2;//這個就是相當于c/c++中的 &
               lVar3 = lVar or lVar2;//這個就相當于c/c++中的 |
            end;

            關于 c/c++ 中的 &&、||、&、| 在此,我想就不用多說了吧。
            接下來說說,Lua中的 and 與 or
            在 Lua 中,and 也是邏輯運算符,但它的取值很特別:
            a and b;它的返回值并不是我們所想象的 true 或者 false.而是:如果 a 為假(即:為 false 或者 nil 時),則表達式返回 a。否則就返回 b
            同樣 a or b;它返回的也不是true與false。而是:當 a 為真時,則返回 a 否則返回 b.
            posted @ 2012-12-08 13:29 Jacc.Kim 閱讀(954) | 評論 (0)編輯 收藏

            1) Lua字符串可以使用雙引號括起來。
            2) Lua字符串同樣可以使用單引號括起來。
            3) Lua字符串還可以使用 [[...]] 括起來。(提示:中間的 ... 就是字符串的內容。
            關于這種形式來表達字符串的,有以下說明點:
                  a) [[ 這是字符串起始標志。(就如同:" 一樣)]] 當然就是結束標志了。
                  b) ... 的內容中,就算有轉義字符,則轉義字符的轉義功能失效。它會被按原樣輸出。
                  c) ... 中的任何空格都將被保留,按原樣輸出。(包括行頭的空格)
            因此:
                  local str = [[這只是一個測試。\r\n是不是北京??
                        吃東西吧。(注意:吃東西吧。前面是有空格的)
                        ]];
                  print(str);
            在屏幕上打印出來的結果應該如下:
            這只是一個測試。\r\n是不是北京??
                        吃東西吧。(注意:吃東西吧。前面是有空格的)

            4) .. 可以用來連接兩個字符串。同樣也可以用來連接兩個數值或者數值與字符串,使它們最終成為一個字符串。
            注意:如果連接的前后有數值時,最好在 .. 的前與后都加一個空格。
            示例:
                  a) local str1 = "Hello, " .. "world!"; // 這時的..的前后可以加或不加空格都正確
                  b) local str2 = "Hello, " .. 20;//這時,..的后面最好加上空格
                  c) local str3 = 20 .. "world!";//這時,..的前面必須要加上空格。否則會出錯
                  d) local str3 = 20 .. 30;//這時,..的前面與后面都必須加上空格。否則會出錯。

            5) string.gsub()是用來替換某字符串中的子串的。示例如下:
                  local strOld = "Hello, world!";
                  local strNew = string.gsub(strOld, "Hello,", "Hello ");
                  print(strOld);      // 輸出: Hello, world!
                  print(strNew);      //輸出: Hello world!
            posted @ 2012-12-08 13:12 Jacc.Kim 閱讀(532) | 評論 (0)編輯 收藏

             

             1 
             2 #include "stdafx.h"
             3 
             4 #include <iostream>
             5 using namespace std;
             6 
             7 extern "C"{
             8 #include "lua.h"
             9 #include "lualib.h"
            10 #include "lauxlib.h"
            11 }
            12 
            13 lua_State *L;
            14 
            15 int _tmain(int argc, _TCHAR* argv[])
            16 {
            17     //* 創建一個指向Lua解釋器的指針。
            18     L = lua_open();
            19     //* 函數加載Lua庫
            20     luaL_openlibs(L);
            21     //* 加載Lua腳本
            22     luaL_dofile(L, "../TestException/add.lua");
            23 
            24         int x = 3, y = 8;
            25         //函數名
            26         lua_getglobal(L, "add");
            27         //第一個參數壓棧
            28         lua_pushnumber(L, x);
            29         //第二個參數壓棧
            30         lua_pushnumber(L, y);
            31         //調用函數
            32         lua_call(L, 21);
            33         //得到返回值
            34         int sum = (int)lua_tonumber(L, -1);
            35         lua_pop(L, 1);
            36         cout << sum << endl;
            37 
            38     //* 關閉釋放資源
            39     lua_close(L);
            40 
            41     waitplease;
            42     return 0;
            43 }
            44 
            45 

             

            posted @ 2012-12-08 12:49 Jacc.Kim 閱讀(393) | 評論 (0)編輯 收藏

            僅列出標題
            共14頁: First 2 3 4 5 6 7 8 9 10 Last 
            久久AⅤ人妻少妇嫩草影院| 久久精品国产亚洲AV电影| 精品国产福利久久久| AV色综合久久天堂AV色综合在| 久久亚洲sm情趣捆绑调教| 色99久久久久高潮综合影院| 国产成人精品综合久久久| 色噜噜狠狠先锋影音久久| 国产亚州精品女人久久久久久| 91精品免费久久久久久久久| 精品久久国产一区二区三区香蕉 | 午夜精品久久久久久影视riav| 国产三级精品久久| 亚洲日韩欧美一区久久久久我| 亚洲第一永久AV网站久久精品男人的天堂AV| 久久不见久久见免费影院www日本| 国内精品欧美久久精品| 伊人久久一区二区三区无码| 一本一本久久aa综合精品| 精品久久一区二区| 久久综合精品国产一区二区三区 | 久久99精品久久久久久| 国产午夜福利精品久久| 亚洲人AV永久一区二区三区久久| 伊人久久大香线蕉av不卡| 欧美精品一区二区精品久久| 久久无码国产| 97久久精品无码一区二区天美| 香蕉久久夜色精品国产小说| 日韩十八禁一区二区久久| 久久综合香蕉国产蜜臀AV| 久久精品国产99久久久香蕉| 久久精品国产亚洲AV香蕉| 久久精品国产99国产电影网 | 伊人久久免费视频| 久久亚洲AV成人无码| 狠狠色丁香婷综合久久| 久久人人爽人人爽人人爽| 丰满少妇人妻久久久久久4| 久久久一本精品99久久精品88 | 国产精品久久久福利|