• <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>

            f(sixleaves) = sixleaves

            重劍無鋒 大巧不工

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              95 隨筆 :: 0 文章 :: 7 評論 :: 0 Trackbacks

            #

                 摘要: 1.總結了繼承的概念、作用、編程思想、使用注意、缺點。  閱讀全文
            posted @ 2015-04-30 16:01 swp 閱讀(133) | 評論 (0)編輯 收藏

                 摘要: 1.掌握繼承的概念  閱讀全文
            posted @ 2015-04-30 15:59 swp 閱讀(122) | 評論 (0)編輯 收藏

             1 #import <Foundation/Foundation.h>
             2 
             3 @interface Person : NSObject
             4 {
             5     int _age;
             6     @private
             7     int _fuck;
             8 }
             9 + (void)test;
            10 + (void)test1;
            11 - (void)test1;
            12 - (void)test;
            13 - (void)modify;
            14 - (int)age;
            15 @end
            16 
            17 @implementation Person
            18 + (void)test
            19 {
            20     [self test1];
            21 }
            22 + (void)test1
            23 {
            24     NSLog(@"Called Class Method test1");
            25 }
            26 - (void)test1
            27 {
            28     NSLog(@"Called Instance Method test1");
            29 }
            30 - (void)test
            31 {
            32     [self test1];
            33 }
            34 
            35 - (void)modify
            36 {
            37     self->_age = 10;
            38     self->_fuck = 20;
            39 }
            40 
            41 // error 編譯階段就會出錯。
            42 //+ (void)modify
            43 //{
            44 //    self->_age = 10;
            45 //}
            46 
            47 - (int)age
            48 {
            49     return _age;
            50 }
            51 
            52 - (int)fuck
            53 {
            54     return _fuck;
            55 }
            56 @end
            57 
            58 int main() {
            59     
            60     Person *p = [Person new];
            61     [p test]; // 輸出 Called Instance Method test1
            62     [Person test]; // Called Class Method test1.由以上兩句可知,self指向,其所在方法的調用對象(類也是個對象)。
            63     [p modify];
            64     
            65     int a = p.age;
            66     int f = p.fuck;
            67     NSLog(@"a = %d,f = %d", a, f);
            68     
            69     //[Person modify]; //錯誤,因為self指向的是類對象,而類對象本身并不存在_age這個成員變量。
            70     
            71     
            72     return 0;
            73 }
            74 
            75 /*總結:
                 self的作用:
            76  1.self指針能在對象方法中訪問對象的成員變量。(無論該成員變量的權限是private、protected、public都可以) 
                  2.self指針能調用類方法或對象方法,具體看self指向類對象還是實例對象。
                 self的編程思想:
                  1.在方法中想調用其他方法時候。
                  2.當成員變量與set方法的形參同名時候,如果不想改變成員變量名字。可以用self把成員變量和形參分開。

            77  self的使用注意:.self指針指向的是調用當前方法的對象。(類也是對象,叫做類對象)
            78  */
            posted @ 2015-04-30 14:47 swp 閱讀(159) | 評論 (0)編輯 收藏

             1 
             2 #import <Foundation/Foundation.h>
             3 
             4 @interface Person : NSObject
             5 
             6 @end
             7 
             8 
             9 @implementation Person
            10 
            11 @end
            12 
            13 @interface Person1 : NSObject
            14 - (void)test;
            15 @end
            16 
            17 
            18 @implementation Person1
            19 
            20 @end
            21 
            22 @interface Person2 : NSObject
            23 
            24 @end
            25 
            26 
            27 @implementation Person2
            28 - (void)test
            29 {
            30     NSLog(@"哈哈哈哈哈哈哈");
            31 }
            32 @end
            33 
            34 
            35 
            36 int main()
            37 {
            38 
            39     // Person *p = [Person new];
            40     // [p test]; // 編譯 warning: 'Person' may not respond to 'test'
            41      //              // 鏈接 warning: 'Person' may not respond to 'test'
            42     //           // 運行  unrecognized selector sent to instance 0x7fe619c0fd30
            43     //           // 總結: 給對象發(fā)送不存在的消息,會導致程序異常退出。在移動終端上就是閃退
            44 
            45 
            46 
            47 
            48     Person1 *p1 = [Person1 new];    
            49     [p1 test];    // 編譯鏈接不出錯。運行時候出錯。
            50                 // 總結:OC是弱語法,在程序運行過程中,才會檢查對象有沒有實現(xiàn)相應的方法。
            51 
            52 
            53     Person2 *p2 = [Person2 new];
            54     [p2 test]; // 編譯鏈接不出錯。也能正常運行
            55                // 總結:OC可以不寫方法的聲明。但是一般不會不寫方法的聲明。
            56 
            57     return 0;
            58 
            59 }
            60 
            posted @ 2015-04-30 14:43 swp 閱讀(106) | 評論 (0)編輯 收藏

            類方法的優(yōu)點就是。你不用創(chuàng)建對象,就能通過類名引用,從而提高了程序的效率。
            類方法的使用場景:當一個實例方法不會改變對象的成員變量,也就是對對象的狀態(tài)無影響。則可以將其聲明為類方法。
            工具類:所有方法都是類方法,幾乎不存在成員變量的類稱為工具類。
             1 #import <Foundation/Foundation.h>
             2 
             3 @interface Calc : NSObject
             4 
             5 + (int)sumWithNum1:(int)num1 andNum2:(int)num2;
             6 + (int)pingFang:(int)num;
             7 
             8 @end
             9 
            10 
            11 @implementation Calc
            12 
            13 + (int)sumWithNum1:(int)num1 andNum2:(int)num2
            14 {
            15     return num1 + num2;
            16 }
            17 
            18 + (int)pingFang:(int)num
            19 {
            20     return num * num;
            21 }
            22 
            23 @end
            24 
            25 int main() {
            26 
            27     int a = [Calc sumWithNum1:10 andNum2:20];
            28     int b = [Calc pingFang: 20];
            29     NSLog(@"\n10+20 = %d\n20*20 = %d", a,b);
            30     return 0;
            31 }
            32 
            33 //
            34 /*總結
            35  1.寫一個方法的時候我們要先問自己這個方法會改變對象的成員變量么?如果不會最好將其聲明為類方法。
            36  
            37  */
            posted @ 2015-04-30 14:41 swp 閱讀(151) | 評論 (0)編輯 收藏

             1 #import <Foundation/Foundation.h>
             2 
             3 @interface Person : NSObject
             4 + (void)test;
             5 - (void)test;
             6 @end
             7 
             8 @implementation Person
             9 + (void)test
            10 {
            11     NSLog(@"Class Method test");
            12 }
            13 - (void)test
            14 {
            15     NSLog(@"Instance Method test");
            16 }
            17 
            18 - (void)fuck
            19 {
            20     NSLog(@"Instance Method fuck");
            21 }
            22 @end
            23 
            24 int main() {
            25     
            26     Person *p = [Person new];
            27     //[p test];  unrecognized selector sent to instance 0x7f9c11c10600
            28     [Person test];
            29     
            30     // [Person fuck];  unrecognized selector sent to class 0x10a1f71c0
            31     [p fuck];
            32     return 0;
            33 }
            34 
            35 // 總結OC中類方法與對象方法的區(qū)別
            36 /*
            37  1.對象方法一減號開頭。類方法以加號開頭
            38  2.對象方法只能有對象調用。類方法只能由類調用,否則運行時候程序會異常退出。
            39  3.類方法不依賴于對象,所以其不能訪問成員變量。
            40  Tips:對象方法與類方法能同名存在。
            41  */
            posted @ 2015-04-29 23:55 swp 閱讀(110) | 評論 (0)編輯 收藏

            鏈表的思想很簡單,要做到活用也不難。一般我是這樣做得,從實際問題出發(fā),先高度的概括符不符合鏈表的特點。能不能用鏈表簡單解決。接著,就是編碼。
            鏈表編碼要理清細節(jié)性思路,最好是簡單的畫下圖,正如改題的鏈表,本質上是循環(huán)鏈表。last指向最后一個節(jié)點。其next指針一定指向頭節(jié)點。我們把s[0]當做頭節(jié)點。
             1 
             2 #include <cstdio>
             3 #include <cstring>
             4 const int maxn = 100000 + 5;
             5 int last, cur, next[maxn];
             6 char s[maxn];
             7 int main() {
             8     
             9     while ( scanf("%s", s + 1) == 1) {
            10         
            11         int n = strlen(s + 1);
            12         last = cur = 0;
            13         next[0] = 0; // 頭結點初始化指向自身
            14         
            15         for (int i = 1; i <=n; i++) {
            16             
            17             char ch = s[i];
            18             if ('[' == ch ) cur = 0;
            19             else if (']' == ch) cur = last;
            20             else {
            21                 
            22                 next[i] = next[cur];  // next[cur]為當前光標的前一個字符,而next[i]就是當前光標要輸入的字符,接著,光標還要跳到下個字符。所以我們要把當前字符next指向光標輸入的字符。也就是next[cur] = i;但要先保存其next指針給輸入字符。其next指針其實就是真相頭結點。
            23                 next[cur] = i;
            24                 if (cur == last) last = i;
            25                 cur = i; // 指向下一個節(jié)點
            26             }
            27             
            28         }
            29         
            30         for (int i = next[0];i != 0; i = next[i]) {
            31             printf("%c", s[i]);
            32         }
            33         puts("");
            34     }
            35     
            36     return 0;
            37 }

            2015/4/12上午12:10:12
            posted @ 2015-04-12 00:10 swp 閱讀(625) | 評論 (0)編輯 收藏

             1 #include <cstdio>
             2 #include <iostream>
             3 #include <string>
             4 #include <stack>
             5 
             6 using namespace std;
             7 
             8 struct Matrix {
             9     int r,c;
            10     Matrix(int a = 0, int b = 0) : r(a), c(b) {};
            11 }m[26];
            12 
            13 stack<Matrix> s;
            14 
            15 int main()
            16 {
            17     
            18     int n;
            19     cin >> n;
            20     for (int i = 0; i < n; i++) {
            21         string name;
            22         cin >> name;
            23         int k = name[0] - 'A';
            24         cin >> m[k].r >> m[k].c;
            25         
            26     }
            27     
            28     string expr;
            29     while (cin >> expr) {
            30         
            31         int len = expr.size(); // 獲取字符串的大小,因為這整個字符串都沒有空格
            32         bool error = false;
            33         int ans = 0;
            34         for (int i = 0; i < len; i++) { // 循環(huán)整個表達式、思路是遇到右括號就出棧兩個Matrix進行計算,算完在壓回。
            35             // 其實你可以發(fā)現(xiàn)帶括號的表達式十分符合棧,而不僅僅是該題目,首先左括號越深
            36             // 其計算的有先級別越高,而右括號又和左括號配對,如果我們從左到右讀取一個表達式
            37             // 每次一遇到右括號,其前面到左括號的部分肯定就是這個表達式最優(yōu)先的部分。
            38             if (isalpha(expr[i])) { s.push(m[expr[i] - 'A']); }
            39             else if (')' == expr[i]) {
            40                 Matrix m2 = s.top(); s.pop();
            41                 Matrix m1 = s.top(); s.pop();
            42                 if (m1.c != m2.r) { error = truebreak; }
            43                 ans += m1.r * m1.c * m2.c;
            44                 s.push(Matrix(m1.r, m2.c));
            45             }
            46             
            47         }
            48         
            49         if (error) printf("error\n"); else printf("%d\n", ans);
            50         
            51     }
            52     
            53     return 0;
            54 }
            55 

            2015/4/10下午6:32:37
            By sixleaves
            posted @ 2015-04-11 02:33 swp 閱讀(108) | 評論 (0)編輯 收藏

                 摘要: cocos2dx坐標系與笛卡爾坐標系簡而言之,cocos2dx的2d中的坐標系與我們初中所學的笛卡爾坐標系一樣。也就是向右為X正軸,向上為Y正軸。在屏幕中,其原點位于屏幕的左下方。屏幕坐標系屏幕坐標系的Y正軸是向下,X正軸不變。原點位于左上方。World Coordinate與Node LocalWorld Coordinate == > 世界坐標系、絕對坐標系Node Local == &...  閱讀全文
            posted @ 2015-04-06 01:53 swp 閱讀(3015) | 評論 (0)編輯 收藏

            inherent
            cocos2dx調度器的類圖路上所示,調度器繼承自Ref類,該類實現(xiàn)了內存的自動管理機制。
            我們先看一下官方文檔的介紹,一下是引用官方文檔,到-----線為止。

            原理介紹

            Cocos2d-x調度器為游戲提供定時事件和定時調用服務。所有Node對象都知道如何調度和取消調度事件,使用調度器有幾個好處:

            1. 每當Node不再可見或已從場景中移除時,調度器會停止。
            2. Cocos2d-x暫停時,調度器也會停止。當Cocos2d-x重新開始時,調度器也會自動繼續(xù)啟動。
            3. Cocos2d-x封裝了一個供各種不同平臺使用的調度器,使用此調度器你不用關心和跟蹤你所設定的定時對象的銷毀和停止,以及崩潰的風險。

            基礎用法

            使用場景:游戲中我們經常會隨時間的變化而做一些邏輯判斷,如碰撞檢測。為了解決以上問題,我們引入了調度器,這使得游戲能夠更好的處理動態(tài)事件。Cocos2d-x提供了多種調度機制,在開發(fā)中我們通常會用到3種調度器:

            1. 默認調度器:schedulerUpdate()
            2. 自定義調度器:schedule(SEL_SCHEDULE selector, float interval, unsigned int repeat, float delay)
            3. 單次調度器:scheduleOnce(SEL_SCHEDULE selector, float delay)

            以下我們來對這3種調度器做簡單的介紹。

            -------------------------------------------------------------------------------------------------------------------------------------------------------------------
            我的理解:
            我們知道schedulerUpdate()也就是默認調度器的實現(xiàn)是基于update方法,該方法是虛方法定義在Node類中,在cocos2dx框架中。會在每次繪制一幀之前調用update方法,但是默認情況下,這個方法是不啟用的。
            也許你也有這個疑問,為什么update方法可以實現(xiàn)調度。可以實現(xiàn)游戲邏輯的判斷。這就需要對游戲有一個認識,游戲都是由一幀一幀繪制而成,在一定范圍內的不同時刻,對應的會是不同的游戲畫面。回想一下,你學過的微積分
            ,如果我們把游戲的看成是微積分,那么這每一幀就是微分。所以幀率越高,游戲越逼真,越流程,體驗度越高。我們也可以借助這一思想來理解,為什官方框架中會對update做出下面這句解釋。
            該調度器是使用Node的刷新事件update方法,該方法在每幀繪制之前都會被調用一次。由于每幀之間時間間隔較短,所以每幀刷新一次已足夠完成大部分游戲過程中需要的邏輯判斷。綠色這句話是引用自官方,可能你會不理解
            為什么說每幀之間間隔較短,所以每一幀刷新以此足夠完成部分游戲邏輯的判斷。
            由官方文檔我們知道一下代碼的執(zhí)行順序,下面用偽代碼表示
            {
                   1:
                     update();執(zhí)行update方法
                     drawOneFrame();繪制一幀
                    go 1;
            }
            由上面的偽代碼我們知道其想表達的意思是說,由于幀率比較高,能模擬出更真實的效果。而update方法敲好是在兩幀之間調用,所以update的執(zhí)行時間一般來說是和幀率相互掛鉤。
            也就是說update里面的所有變量其實是無限趨近于drawOneFrame()的。所以我們可以再update中書寫一些游戲邏輯。簡而言之,在update里面可以做的事等效于給每一幀里面各個對象的做邏輯判斷。


            接下來分析下自定義調度器,先看官方文檔解說。

            自定義調度器(scheduler)

            游戲開發(fā)中,在某些情況下我們可能不需要頻繁的進行邏輯檢測,這樣可以提高游戲性能。所以Cocos2d-x還提供了自定義調度器,可以實現(xiàn)以一定的時間間隔連續(xù)調用某個函數(shù)。

            由于引擎的調度機制,自定義時間間隔必須大于兩幀的間隔,否則兩幀內的多次調用會被合并成一次調用。所以自定義時間間隔應在0.1秒以上。

            同樣,取消該調度器可以用unschedule(SEL_SCHEDULE selector, float delay)。
            我的理解:
            其實讀完這個解說你應該更清楚了我前面理論的正確性,如果你定義的間隔時間比兩幀短,也就是說,將在同一幀類不斷的重復回調selector指向的方法。但這是不需要的所以官方會說將
            兩幀內的多次調用會被合并成一次調用。
            自定義時間應該在0.1秒以上,幀率就是10.也就是你定義的定時器的頻率應該小于10,或者說間隔時間應該大于0.1。


            當然cocos2dx框架還提供單次調度器具體看官方文檔,這個就很好理解了,不解釋和分析。
            2015/4/6上午1:03:59

            posted @ 2015-04-06 00:57 swp 閱讀(2521) | 評論 (0)編輯 收藏

            僅列出標題
            共10頁: 1 2 3 4 5 6 7 8 9 Last 
            久久99精品久久只有精品 | 久久久亚洲AV波多野结衣| 国产精品久久网| 色婷婷狠狠久久综合五月| 久久精品国产只有精品2020| 亚洲精品无码久久久久| 久久夜色精品国产噜噜亚洲a| 国产免费久久精品丫丫| 精品久久久久久久无码| 久久久久亚洲精品无码蜜桃| 综合久久国产九一剧情麻豆| 久久国产色av免费看| 99久久综合国产精品免费| 中文字幕无码久久人妻| 亚洲欧美成人久久综合中文网 | 久久久久99精品成人片| 大香网伊人久久综合网2020| 亚洲成人精品久久| 99久久99久久精品国产| 国产精品日韩深夜福利久久 | 久久精品国产一区二区| 久久无码精品一区二区三区| 亚洲精品国产综合久久一线| 伊人久久精品影院| 伊人久久综合无码成人网| 亚洲精品tv久久久久久久久| 久久人人爽人人爽人人AV东京热| 亚洲va久久久噜噜噜久久男同| 亚洲AV无码久久精品色欲| 国产亚洲欧美精品久久久 | 久久九九有精品国产23百花影院| 欧美久久综合性欧美| 久久精品成人免费观看97| 久久中文字幕人妻熟av女| 欧洲精品久久久av无码电影| 亚洲国产精品一区二区久久| 日本精品久久久久久久久免费| 99久久夜色精品国产网站| 久久精品www| 亚洲精品tv久久久久| 国产产无码乱码精品久久鸭|