cc.Component

来源:https://www.cnblogs.com/he-bo/archive/2018/09/30/9726482.html
-Advertisement-
Play Games

組件入口函數1: onLoad: 組件載入的時候調用, 保證了你可以獲取到場景中的其他節點,以及節點關聯的資源數據;2: start: 也就是第一次執行 update 之前觸發;3: update(dt):組件每次刷新的時候調用,距離上一次刷新的時間(會在所有畫面更新前執行);4: lateUpda ...


組件入口函數
1: onLoad: 組件載入的時候調用, 保證了你可以獲取到場景中的其他節點,以及節點關聯的資源數據;
2: start: 也就是第一次執行 update 之前觸發;
3: update(dt):組件每次刷新的時候調用,距離上一次刷新的時間(會在所有畫面更新前執行);
4: lateUpdate(dt) 刷新完後調用(會在所有畫面更新後執行);
5: onEnable: 啟用這個組件的時候調用;
6: onDisable: 禁用這個組件的時候調用;
7: onDestroy: 組件實例銷毀的時候調用;

cc.Component屬性
1: 組件類: 所有組件的基類;
2: node: 指向這個組件實例所掛載的這個節點(cc.Node);
3: name: 這個組件實例所掛載的節點的名字<組件的名字>;
4: properties: {} 屬性列表;
(1) name: value, 數,bool, 字元串;
(2) 位置,顏色, 大小: cc.p(0, 0), cc.color(0, 0), cc.size(100, 100)
(3) 組件: {
type: 組件類型, 系統類型,也可以require自己編寫的組件類型
default: null or []
}
(4)其他: 打開cocos creator源碼,找到參考,然後移動到你的代碼裡面;

組件添加查找刪除
1: addComponent(組件的類型): 向節點上添加一個組件實例, 返回添加好的組件實例;
2: getComponent(組件類型): 查找一個為指定類型的組件實例(如果有多個,第一個匹配);
3: getComponents(組件類型): 查找這個節點上所有這個類型的組件實例;
[inst1, inst2, inst3, ...]
4: getComponentInChildren(組件類型): 在自己與孩子節點裡面查找;
5: getComponentsInChildren (組件類型): 在自己與孩子節點裡面查找;
6: destroy(): 從節點中刪除這個組件的實例;

Shedule定時器操作
1: sheduleOnce(函數, time): time秒後啟動一次定時器;
2: schedule(函數, time, 次數, 多長時間後開始); 執行的次數為(次數 + 1), cc.macro.REPEAT_FOREVER;
3: unschedule(函數); // 取消這個定時器操作;
5: unscheduleAllCallbacks 取消所有的定時器操作;
註意,如果節點或組件沒有激活是不會調用的; 

    properties: {

        // 基本數據類型, 數,bool, 字元串, color, pos, size
        speed: 100,
        is_debug: false,
        url_str: "",
        color: cc.color(0, 0, 0, 255),
        pos: cc.p(0, 0),
        size: cc.size(100, 100),
        // end 

        // 系統的組件, cc.Sprite, cc.Button, cc.Label, ..
        sprite_item: {
            type: cc.Sprite,
            default: null, // null/[]
        },

        sprite_array: {
            type: cc.Sprite,
            default: [],
        },
        // end 

        // 組件的代碼組件
        custom_comp: {
            type: my_item,
            default: null, // null /[]
        },
        // end 
    },
    // end 

    // use this for initialization
    // 組件在載入的時候運行
    // 你可以在onLoad裡面訪問場景的節點和數據,這個時候場景的節點和數據都已經準備好了
    // 不會發生在調用onLoad的時候,還會出現場景節點沒有出來的情況
    onLoad: function() {
        console.log("onLoad");
        // this:指的是當前的組件實例
        // this.node --> cc.Node, 這個組件所掛的節點對象
        // 組件實例找對應的節點   組件.node來獲取;
        console.log('this.node:', this.node);
        // Canvas<game_scene> Canvas
        console.log('name:%s,node.name:', this.name, this.node.name); // 組件實例所掛載的節點的名稱<組件名稱>, 節點.name 直接為名稱;
    },

    // 組件在第一次update調用之前調用
    start: function() {
        console.log("start");
        // 添加組件,系統組件cc.Sprite, cc.Label等, "組件代碼的名字"
        // 返回,返回掛上的組件實例
        var com_inst = this.addComponent("my_item");
        console.log('自定義組件:', com_inst.name);
        com_inst = this.node.addComponent("my_item");
    
        // 查找組件實例
        com_inst = this.node.getComponent("my_item");
        com_inst = this.getComponent("my_item"); // 返回的是第一個找到的組件
        var com_array = this.getComponents("my_item"); // 返回的是組件數組[實例1,實例2, 實例3]
        console.log(com_inst, com_array);
 
        // 刪除組件
         this.destroy(); // 刪除當前的組件實例,觸發onDisable, onDestroy的調用
        // end 

        // 啟動定時器, 節點或組件必須是激活狀態,  例如被隱藏的節點,都是無法啟動定時器的;
        // 這裡只會觸發一次調用
        this.scheduleOnce(function() {
                console.log("scheduleOnce called");
            }.bind(this),
            5);

        // schedule(函數, 多長時間掉一次, 次數(永遠), 隔多少秒以後開始執行shedule)
        // 5秒鐘以後,每隔1秒,我們調用6 + 1次函數(重覆6次);
        this.schedule(function() {
                console.log("schedule called");
            }.bind(this),1,6,5); // 次數 6 + 1 = 7;
        // end 

        this.schedule(function() {
                console.log("schedule forerver called");
            }.bind(this),
            1,
            cc.macro.REPEAT_FOREVER,
            5); //5秒之後執行;每秒1次;  cc.macro.REPEAT_FOREVER 永遠 


        // 取消所有的shedule
        this.scheduleOnce(function() {
                console.log("cancel all schedules");
                this.unscheduleAllCallbacks();
            }.bind(this),
            30);


        // 只取消一個, unschedule(函數對象)
        var callback = function() {
            console.log("======================");
        }.bind(this);
        this.schedule(callback, 0.5); // 預設值為永遠執行,馬上開始

        this.scheduleOnce(function() {
                // 取消了一個定時器
                this.unschedule(callback);
            }.bind(this),5);
    },

    // called every frame, uncomment this function to activate update callback
    // 每次游戲刷新的時候調用, dt距離閃一次刷新的時間
    update: function(dt) {
        console.log("update called", dt);
    },

    // 不是特別常用
    lateUpdate: function(dt) {
        console.log("lateUpdate",dt);
    },

    // 組件被激活的時候調用
    onEnable: function() {
        console.log("onEnable");
    },

    // 組件被禁用的時候調用
    onDisable: function() {
        console.log("onDisable");
    },

    // 組件實例銷毀的時候調用
    onDestroy: function() {
        console.log("onDestroy");
    },

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 用Koala實現less的實時編譯 1、下載Koala(Koala可以實現實時編譯) 2、把CSS文件夾(如index.css,index.less)拖到Koala中 3、點擊到需要編譯的index.css,如: 4、點擊Compile即可實現實時編譯。Koala會在底部最小化運行。 less的語法 ...
  • 進來的小伙伴可以先自己思考一下 對於還屬於小白的我來說掃了一眼這些代碼的反應是:“這都是啥?” 但是我也比較喜歡鑽研~ 仔細看了第二眼的反應是:“這回調函數也太回調了吧!” 又看了第三眼差不多也理解了一星半點,寫出解題邏輯的同時也讓自己理解的更深刻一點 答案輸出:1 3 5 6 4 2; 1. 2. ...
  • 涉及知識點:(1)原型的引入(2)構造函數、原型對象和實例對象之間的關係(3)__proto__和prototype的理解 直接舉例:在自定義構造函數創建對象時,因為創建的對象使用的不是同一個方法,所以創建對象越多,就會開闢大量空間造成記憶體浪費。 驗證:在<script>標簽中寫如下代碼,瀏覽器中打 ...
  • 前端工程化 背景 前端工程化的概念近兩年來被廣泛的提及,究其原因,是前端工程師所負責的客戶端功能邏輯在不斷複雜化。PC網站、手機應用、桌面應用、微信小程式,前端開發的應用領域越來越廣,前端工程師這個職位也不再是幾年前被戲稱的“切圖仔”,在這種背景下,前端工程化應運而生。 聊到前端工程化,必然會有一些 ...
  • jQuery DataTable 刪除數據後重新載入 問題描述: 利用jQuery Datatable和artTemplate組合來做的表格。但是當刪除數據時,需要重新載入table里的數據。但是問題是datatable並沒有直接的重新渲染,反而給數據累加上了。 解決辦法: 經過查看高人的blog, ...
  • iframe這個標簽之前瞭解過這個東西,知道它可以引入外來的網頁,但是實際開發中沒有用到過。這一次有一個需求是說準備要在網頁中嵌套另外一個網站,用iframe這個標簽,讓我測試一下這個可不可以在自己的網頁中對引入進來的iframe框架進行操作,操作dom和css的一些東西。讓我做出一個小案例看看可不 ...
  • 一、準備工作 1安裝vue-cli npm install vue-cli -g 2檢查是否安裝成功 vue -V(大寫V) 3初始化一個新的項目 vue init webpack vue-demo 進入項目目錄 npm install npm run dev 二、配置路由 1我們可以看到生成的ro ...
  • 向上遍歷 DOM 樹(祖先) 這些 jQuery 方法很有用,它們用於向上遍歷 DOM 樹: parent() 方法返回被選元素的直接父元素。親自試一試 parents() 方法返回被選元素的所有祖先元素,它一路向上直到文檔的根元素 親自試一試 您也可以使用可選參數來過濾對祖先元素的搜索。 親自試一 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...