【COCOS CREATOR 系列教程之二】脚本开发篇&事件监听、常用函数等示例整合

【Cocos Creator 】(千人群):  432818031

上一篇,介绍了Himi在使用过cc所有组件后的一篇总结,没有具体介绍每个组件的原因在于官方文档很齐全,而且也有视频的介绍。

所以希望童鞋们可以把我这两篇博文当成对组件、脚本两部分开发的整理与总结。

后续的文章,Himi应该主要更新一些官方还未补充或者还没有的教程。避免无用功。

下面直接放出代码,因为不是很难理解。所以不再一一赘述,都是常用的函数、事件监听、动作回调、定时器等开发过程中必接触的。

大致内容如下:

  1. cc 属性介绍
  2. 获取组件的几种形式
  3. 全局变量的访问
  4. 模块之间的访问
  5. 在当前节点下添加一个组件
  6. 复制节点/或者复制 prefab
  7. 销毁节点(销毁节点并不会立刻发生,而是在当前 帧逻辑更新结束后,统一执行)
  8. 事件监听 on 4种形式(包括坐标获取)
  9. 关闭监听
  10. 发射事件(事件手动触发)
  11. 动作示例,类似c2dx api 基本无变化
  12. 计时器 (component)schedule (cc.Node 不包含计时器相关 API)
  13. url raw资源获取

CC版本:0.7.1

源码下载地址:   http://vdisk.weibo.com/s/yZxRoLm4Mnio3

主要两个js源码:

HelloWorld.js

cc.Class({
    extends: cc.Component,
 
    properties: {
        label: {
            default: null,
            type: cc.Label
        },
        text: ‘Hello, World!‘,
        
        t_prefab:{
            default:null,
            type:cc.Prefab
        },
        
        t_sprite:{//定义一个cc的类型,并定义上常用属性
            default:null,
            type:cc.SpriteFrame,//类型的定义
            // url:cc.Texture2D, //Raw Asset(cc.Texture2D, cc.Font, cc.AudioClip) 
            visible:true,//属性检查器中是否可见
            displayName:‘himi‘,//属性检查器中属性的名字
            tooltip:"测试脚本",//属性检查器中停留此属性名称显示的提示文字
            readonly:false,//属性检查器中显示(readonly)且不可修改[当前有bug,设定只读也能修改]
            serializable:true,//设置false就是临时变量
            editorOnly:false//导出项目前剔除此属性
        },
        
        t_url:{
            default:null,
            url:cc.Texture2D
        },
        
        t_count_2:200,//基础类型
        
        //可以只定义 get 方法,这样相当于一份 readonly 的属性。[当前有bug,只设定get也能修改]
        t_getSet:{
            default:12, 
            get:function(){return this.t_getSet},//get
            set:function(value){this.t_getSet =value;}//set
        },
            
        
        t_array:{//定义一个数组
            default:[],
            type:[cc.Sprite]
        }
    },
 
    // use this for initialization
    onLoad: function () {
        
        //--->>> 获取组件的几种形式:
        //1. 通过属性检查器被赋值的label组件,直接拿到得到实例
        //2. 通过属性检查器被赋值的label组件所在的node节点,然后通过getComponent获取
        // this.label.string = this.text;
        
        //3. 获取当前this(node)节点上的label组件
        // var _label = this.getComponent(cc.Label);
        
        //4. 先获取目标组件所在的节点,然后通过getComponent获取目标组件
        var _label = cc.find("Canvas/label").getComponent(cc.Label);
        
        //5.也可以如下形式【注意此种方式,目前有BUG,无法正常使用 (0.7.1) 】
        // var _label = cc.find("Canvas/label<cc.Label>");
        
        console.log(_label.string);
        console.log(this.t_getSet);
        
        //--->>>全局变量的访问
        /* 任意脚本中定义如下:【注意不要有var哦】
        
            t_global = {
                tw:100,
                th:200
            };
        
        */
        t_global.th = 2000;
        console.log(t_global.th);
        
        //--->>>模块之间的访问
        /*任意脚本中定义如下 【注意关键字是module.exports】
        
            module.exports= {
                tme_pa1:"100",
                tme_pa2:333221
            };
            
        */
        //--->>>用 require + 文件名(不含路径) 来获取到其他 模块 的对象
        var tModuleData = require("testJs");
        tModuleData.tme_pa2 = 991;
        console.log(tModuleData.tme_pa2); 
        
        
        //--->>>在当前节点下添加一个组件
        var mySprite = new cc.Node().addComponent(cc.Sprite); 
        mySprite.spriteFrame = this.t_sprite;
        mySprite.node.parent = this.node;
        mySprite.node.setPosition(300,200);
        
        
        //--->>>复制节点/或者复制 prefab
        //复制节点
        var lLabel = cc.instantiate(this.label);
        lLabel.node.parent = this.node;
        lLabel.node.setPosition(-200,0);
        //复制prefab
        var tPrefab = cc.instantiate(this.t_prefab);
        tPrefab.parent = this.node;
        tPrefab.setPosition(-210,100);
        
        
        //--->>>  销毁节点(销毁节点并不会立刻发生,而是在当前 帧逻辑更新结束后,统一执行)
        if (cc.isValid(this.label.node) ) {
            console.log("有效存在,进行摧毁");
            this.label.destroy();
        }else{
            console.log("已摧毁");
        }
        
        //--->>> 事件监听 on 4种形式
        //枚举类型注册
        var tFun =function (event){
          console.log("touchend event:"+event.touch.getLocation().x +"|"+event.touch.getLocation().y); 
        };
        this.node.on(cc.Node.EventType.TOUCH_END,tFun,this); 
        
        //事件名注册
        // var tFun =function (event){
        //   console.log("touchend event"); 
        // };
        // this.node.on("touchend",tFun);
        
        // this.node.on("touchend",function (event){
        //   console.log("touchend event"); 
        // });
        
        // this.node.on("touchend",function (event){
        //   console.log("touchend event"); 
        // },this);
        
        // this.node.on("touchend",function (event){
        //   console.log("touchend event"); 
        // }.bind(this));
        
        //--->>> 一次性的事件监听 once
        // this.node.once("touchend",function (event){
        //   console.log("touchend event"); 
        // });
        
        
        //--->>> 关闭监听
        this.node.off("touchend",tFun,this);
        
        
        //--->>> 发射事件(事件手动触发)
        this.node.on("tEmitFun",function (event){ 
            console.log("tEmitFun event:"+event.detail.himi+"|"+event.detail.say); 
            
            //-->>> 事件中断,如下函数阻止事件向当前父级进行事件传递
            // event.stopPropagation();
        });
        this.node.emit("tEmitFun",{himi:27,say:"hello,cc!"});
        
        
        //--->>> 动作,类似c2dx api 基本无变化
        var mTo = cc.moveBy(1,-100, -200);
        var mAction = cc.repeatForever(cc.sequence(cc.moveBy(1,-100, -200),mTo.reverse(),cc.delayTime(0.5),cc.callFunc(function(action,data){
            console.log("action callback:"+data.himi);
        },this,{tx:100,himi:"i‘m action callback and bring data"})));
        mySprite.node.runAction(mAction);
        //暂停动作
        mySprite.node.stopAction(mAction);
        
        
        //--->>> 计时器 (component)schedule (cc.Node 不包含计时器相关 API)
        //参数: call funtion/interval/repeat times/delay time
        //不延迟,永久重复
        this.schedule(function(){
            console.log("schedule log...");
        },1);
        
        //不延迟,有重复次数限定
        // this.schedule(function(){
        //     console.log("schedule log...");
        // },1,2);
        
        //重复2次,重复间隔为1秒,延迟1秒进行
        // this.schedule(function(){
        //     console.log("schedule log...");
        // },1,2,1);
        
        //一次性的计时器
        var mySch =function(){ console.log("schedule Once log..."); }
        this.scheduleOnce(mySch);
        
        //取消定时器
        this.unschedule(mySch);
        
        
        //--->>> url raw资源获取
        var mSf = new cc.Node().addComponent(cc.Sprite);
        mSf.spriteFrame = this.t_sprite;
        mSf.spriteFrame.setTexture(this.t_url);
        mSf.node.setPosition(400,0);
        mSf.node.parent = this.node;
        mSf.node.setScale(0.5);
        
        //获得 Raw Asset 的 url
        var mUrl = cc.textureCache.addImage(cc.url.raw("himi.png"));
        console.log("raw asset url:"+mUrl);
        
      
    },
 
    // called every frame
    update: function (dt) {
        // if (cc.isValid(this.label.node) ) {
        //     console.log("有效存在,进行摧毁");
        // }else{
        //     console.log("已摧毁");
        // }
    },
});

testJs.js

t_global = {
    tw:100,
    th:200
};
 
module.exports= {
    tme_pa1:"100",
    tme_pa2:333221
};

【COCOS CREATOR 系列教程之二】脚本开发篇&事件监听、常用函数等示例整合

时间: 2024-10-01 20:00:45

【COCOS CREATOR 系列教程之二】脚本开发篇&事件监听、常用函数等示例整合的相关文章

【COCOS CREATOR 系列教程之四】基于0.7.1先简单制作一个PAGEVIEW

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/cocos-creator/1999.html 由于当前版本还没有发布1.0,因此还有不少组件没有发布,那么Himi也看到Cocos Creator群里有几个童鞋问起过PageView的问题,那么Himi正好借此练手,基于当前版本制作一个PageView. 本文分为两部分进行讲解: 1. 制作PageView     2. 如何使用 一. 制作

微信程序开发系列教程(二)使用JavaScript给微信用户发送消息

我之前的文章 微信程序开发系列教程(一)开发环境搭建 介绍了微信开发环境的搭建,这篇文章我们就来一步步开发一些具体的功能. 功能需求:当有微信用户关注了您的公众号之后,您用JavaScript发送一个欢迎消息给这个粉丝. 具体实现 我们登陆微信公众号的控制台后,点开发-> 基本配置: 能看到我们配置的微信消息服务器的地址.在我第一篇教程里讲到,我们在本地用nodejs开发一个Web服务器,然后部署到您喜欢的云平台,比如腾讯云,阿里云,百度云等等(我选的是云平台Heroku),然后把部署后应用的u

Java Web基础教程(二)开发基础

Java Web基础教程(二)开发基础 转载:Future魏来 前言 Java web是一种基于B\S(浏览器\服务器)架构的网络应用程序的技术实现.这种结构的Web应用程序被大量的企业级应用所采用.随着Web应用程序的规模不断扩大,传统的Web开发模式无法满足日渐复杂的业务需要,所以出现了更加合理更加先进的MVC开发模式.随之而来的也出现了一系列的基于MVC模式的开发框架,Struts框架.Spring MVC 等. 1. Web 技术的发展 1. 第一阶段 静态网站 Web技术出现伊始,由于

菜鸟窝React Native 系列教程-1.移动端开发趋势与未来

菜鸟窝React Native 系列教程-1.移动端开发趋势与未来 课程持续更新中..... 我是RichardCao,现任新美大酒店旅游事业群的Android Developer.如果你也有兴趣录制RN视频,请加入下面QQ群找我. 下载地址:https://pan.baidu.com/s/1c1XmE56 密码:shhw 首发地址:菜鸟窝-ReactNative学习板块 交流QQ群:576089067 课程目录:菜鸟窝React Native 系列教程

【REACT NATIVE 系列教程之二】创建自定义组件&&导入与使用示例

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/react-native/2219.html 在上一篇  [REACT NATIVE 系列教程之一]触摸事件的两种形式与四种TOUCHABLE组件详解 中的最后介绍了如何使用Touchable的四种组件进行监听触摸事件.  那么紧接着我们利用Touchable来包装一个带图片的Button组件,且设计成可接受很多自定义参数. 一:创建我们自定义

屌炸天实战 MySQL 系列教程(二) 史上最屌、你不知道的数据库操作

此篇写MySQL中最基础,也是最重要的操作! 第一篇:屌炸天实战 MySQL 系列教程(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:屌炸天实战 MySQL 系列教程(二) 史上最屌.你不知道的数据库操作 本章内容: 查看\创建\使用\删除 数据库 用户管理及授权实战 局域网远程连接法 查看\创建\使用\删除\清空\修改 数据库表(是否可空,默认值,主键,自增,外键) 表内容的增删改查 where条件.通配符_%.限制limit.排序desc\asc.连表join.组合union 查

Nginx系列教程(二)| 一文带你读懂Nginx的正向与反向代理

作者:JackTian 微信公众号:杰哥的IT之旅(ID:Jake_Internet) LAMP 系列导读 01. LAMP 系列教程(一)| 详解 Linux 环境下部署 HTTPD 服务 02. LAMP 系列教程(二)| 如何在 Linux 环境下部署 AWStats 分析系统来监控 Web 站点? 03. LAMP 系列教程(三)| 一文读懂 HTTPD 服务的访问控制 04. LAMP 系列教程(四)| MySQL 数据库系统(一) 05. LAMP 系列教程(五)| MySQL 数据

【Cocos Creator 实战教程(1)】——人机对战五子棋

整体思路 在15*15的棋盘上每一个可下棋子的地方都放置一个"隐形的棋子",当要在某个位置下子时就将该位置的棋子显示出来,在判断输赢逻辑里,我们根据这225个"隐形棋子"的状态(黑,白,无)判断输赢 涉及知识点 场景切换 按钮事件监听 节点事件监听 节点数组 循环中闭包的应用 动态更换sprite图片 定时器 关于人机算法 参考了http://blog.csdn.net/onezeros/article/details/5542379 新建工程 在Menu.js里添

WebView使用详解(二)——WebViewClient与常用事件监听

登录|注册     关闭 启舰 当乌龟有了梦想-- 目录视图 摘要视图 订阅 异步赠书:Kotlin领衔10本好书      免费直播:AI时代,机器学习如何入门?      程序员8月书讯      每周荐书:Java Web.Python极客编程(评论送书) WebView使用详解(二)--WebViewClient与常用事件监听 2016-05-28 11:24 20083人阅读 评论(13) 收藏 举报  分类: 5.andriod开发(148)  版权声明:本文为博主原创文章,未经博主