C++指针小结

  1. 对每个指针变量名,都需要一个*(间接值或解除引用运算符)。
  2. *运算符两边的空格是可以选的。

    • C程序使用格式:

      1
      int *ptr;  //这里强调*ptr是一个int类型的值
    • C++程序使用格式:

      1
      int* ptr;  //这里强调int*是一个类型————指向int的指针

    注意:在C++中,int*是一种复合类型,是指向int的指针。
  3. 一定要在对指针应用解除引用运算符(*)之前,将指针初始化,要不就会成为一个不确定的野指针。

  4. 指针不是整型,指针和整数是两个截然不同的类型,不允许直接像C一样直接赋于没有声明的整数内存地址;

说说Javascript的bind()

我们都知道,对于Javascript的运行时this来说,函数进回调之前一定要保存this,通常的做法如下:

1
var _that = this;	//用一个局部变量保存this的值再进放回调callback

本来通常情况下处理函数都要用一层匿名函数包裹一下,才能维持处理函数本身的this.也可以直接通过.bind(logger)人为的将其执行时的this指向logger对象。

而且有个比较好用说起来又复杂的情况是与函数的闭包一起使用,例子是我用cocosjs写的一段代码,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//闭包嵌套
ccs.armatureDataManager.addArmatureFileInfo(FynnFlashPath + "songli.ExportJson");
var temp = new Array();
this._armature = new ccs.Armature("songli");
this._armature.getAnimation().play("songli",-1,0);
this._armature.x = cc.winSize.width / 2;
this._armature.y = cc.winSize.height / 2;
temp.push(this._armature);
this._armature.getAnimation().setMovementEventCallFunc(function(armature, movementType, movementID) {
if (movementType == ccs.MovementEventType.complete) {
var toBig = cc.scaleTo(0.2,1.2);
var toSmall = cc.scaleTo(0.2, 0);
var toFade = cc.fadeOut(0.2);
var spawn = cc.spawn(toSmall,toFade);
var seqScale = cc.sequence(toBig,spawn,cc.callFunc(function(selectorTarget){
if(temp!=null){
temp[0].removeFromParent(true);
cc.log("动画Release!")
}
}, temp));
temp[0].runAction(seqScale);
}
}.bind(this));

this.addChild(this._armature,200);

cocostudio 1.6 填坑小记

话说cocos官方在过年之际新出了cocos creator测试版,现在什么年代,还cocostudio 1.6?!在此暂不说,说说cocostudio1..6众所周知的锚点不齐bug!

但是,有bug总有解决的方法,我的办法就是取到当前对象的大小,你锚点不正对吧,我自已来!方法如下:

  1. 首先,还是先说一说cocostudio在cocos-js中的加载方式:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ctor: function(){
    this._super();
    this._root = ccs.uiReader.widgetFromJsonFile(FynnJsonPath+"NewFynnLobby.json");//加载json文件,cocostudio导出的UI文件
    this._root.setContentSize(cc.winSize);
    this.addChild(this._root);
    //取子节点下元素方法
    this._bg = ccui.helper.seekWidgetByName(this._root,"bg_all");//BG
    this._doustar = ccui.helper.seekWidgetByName(this._root,"_ico_ledou");//doustar
    this._jinbistar = ccui.helper.seekWidgetByName(this._root,"_ico_jinbi");//_ico_jinbi
    this._star = ccui.helper.seekWidgetByName(this._root,"_btn_enterico_1");//_btn_enterico
    }

cocos2d-js + cocos ide + cocostudio 环境的快速搭建

一说到cocos2dx环境搭建,首先就应立刻想起两个必备语言环境,JDK和Pyhton!

  1. 经典版本JDK 1.7+ ,这里是安装教程与环境变量配置;
  2. 经典Python 2.7+ , 这里是下载地址
  • 这里比较重要的一步是Python环境变量的配置:“环境变量”选项卡中在“系统变量”的“Path”中添加入Python路径!
  • 在cmd控制台下输入python命令,如成功即出现版本号。

Cocos2d-js模块化开发的解决方案

现在的模块化开发在前端来说非常热门,cocos2d-js对于开发HTML5游戏的前端来说,cocos2d-js由于是采用JavaScript脚本,而JS的语法层次缺乏模块化编程支持,在使用cocos2d-js引擎开发中大型游戏项目需要的是一种更有效,更简单的方法进行模块化编程,而不仅仅是让project.json中的jsList中配置的js文件一个一个按顺序执行。如能学习同门语言的node.js的molule机制,构造一个模块开发环境,可在一定程度上解决上面的问题,提高开发效率。
解决方案分为两步:

  1. Cocos2d-js Module 进行模块化编程;
  2. 用Grunt/Gulp/Webpack等对引擎进行模块打包。

这样做有什么好处?利用node.js的工作流,能大大加速cocos2d-js的开发调试速度。cocos2d-js在HTML5游戏方面工具链相比Erget是有先天性不足,我们暂不讨论,先来看看以上这两步具体是怎么做的:

Cocos2d-js 判断平台的两种方法

cocos2d-js 是跨平台引擎,程序要在不同的平台下运行,有时就要动态地判断平台,我暂时总结出两种方法:

1. 利用cc.sys.isNative布尔变量判断是否本地平台

1
2
3
4
5
6
7
8
9
10
11
12
13
14
if(cc.sys.isNative){
cc.log("本地平台");
if(cc.sys.isMobile){
cc.log("本地移动平台");
if(cc.sys.os == cc.sys.OS_ANDROID){
cc.log("本地Android平台");
}
if(cc.sys.os == cc.sys.OS_IOS){
cc.log("本地ios平台");
}
}
}else{
cc.log("Web平台");
}