Creator学习笔记1


1.除了方法, 其他东西都要扔到properties里面了, 并且要给出属性的默认值或者属性的存取的方法

1) 首先呢  是继承自组件 (extends: cc.Component)

2)除了开放的extends接口, properties接口,

还有常用的onLoad接口和update接口

※onLoad会在组件加载的时候调用

※update会在每帧刷新的时候调用, 理论上是一秒执行60次update  得到的参数是与上次刷新的时间间隔

3)我们有了一个想法,我想做一个游戏,很棒的游戏

ok,我们要用CCC做,

那我们究竟怎么做呢

很简单,三步

1.把你所设想的游戏界面都布置好,有几个场景布置几个场景,不想看到的先在属性检查器把active关掉,想动态生成的就扔到资源管理器当prefab

2.编写游戏的逻辑,写什么逻辑呢?两个字,就是监听,各种听,如果是逻辑的入口,就听系统事件,如果不是,就听自定义事件,然后该干嘛干嘛,用到的资源如果在资源管理器就require或者load,在层级管理器的就在properties开接口

3.关联界面和逻辑,在属性检查器把整个监听的逻辑关系网织起来

以下引用Himi

大致内容如下:

cc 属性介绍

获取组件的几种形式

全局变量的访问

模块之间的访问

在当前节点下添加一个组件

复制节点/或者复制 prefab

销毁节点(销毁节点并不会立刻发生,而是在当前 帧逻辑更新结束后,统一执行)

事件监听 on 4种形式(包括坐标获取)

关闭监听

发射事件(事件手动触发)

动作示例,类似c2dx api 基本无变化

计时器 (component)schedule (cc.Node 不包含计时器相关 API)

url raw资源获取


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");

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("已摧毁");

// }

},

});

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,026评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,655评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,726评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,204评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,558评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,731评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,944评论 2 314
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,698评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,438评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,633评论 2 247
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,125评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,444评论 3 255
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,137评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,103评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,888评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,772评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,669评论 2 271

推荐阅读更多精彩内容

  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 2,017评论 1 10
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,622评论 2 17
  • 深入响应式 追踪变化: 把普通js对象传给Vue实例的data选项,Vue将使用Object.defineProp...
    冥冥2017阅读 4,791评论 6 16
  • 每个人对爱情的理解不同,对待感情的态度也不同,有些人薄情,也有些人痴情,薄情不提倡,痴情也不效仿,但总有那么些人对...
    十二星座的解析阅读 115评论 0 0
  • 山围着水 水绕着山 人含着情 情牵着人 似是人间 还是天堂 在天堂和人间回旋 话中有诗 诗中有画 画中有你 你中有...
    晴晴的天空阅读 203评论 0 0