爱上撸代码的感觉:教你怎样让 TypeScript 成为你的Creator代码催化剂(Github示例项目)

这么溜?要考虑换ts了

我测了很多版本,新建的项目,creator.d.ts文件都有编译错误。你的demo里面,creator.d.ts却没有编译错误,是不是自己改过?

是啊,github的README里有说,creator.d.ts我做了一些修改的。自带的creator.d.ts有些函数签名不太对,有些不太好用。我有用到的话就改了。

楼主大才,感谢提供这么好的解决方案。

其实我觉得Typescript挺好的,Cocos2d 那么多api,一个一个查根本记不住,有了提示直接看提示猜功能,省的看文档了,效率第一呀。

如果能让Creator支持自动编译ts代码就更方便了,Creator内部应该也是gradle grunt之类的东西吧?项目文件里面没找到类似的配置文件,可能集成到应用里面了,真希望官方支持Typescript,不过官方现在比较差的就是文档,继承Typescript意味着完善文档,估计短期内不可能了。

不过折腾这些东西确实属于脏活累活,楼主辛苦了

Typescript要是在creator本身就支持就好了 不用搞得那么麻烦

官方目前貌似不打算支持ts,让我们自己做ts插件,哎。。。。

用webstorm写js代码,本来就自带提示,包括函数,参数,注释,全局变量,类成员变量。

请教,我想定义一个保存数据的类,js 的版本如下

export default cc.Class({
  name: "SpineInfo",

  properties: {
    effectName: {
      default: ""
    },
    animationName: {
      default: "animation",
    },
    skeleton: {
      default: null,
      type: sp.SkeletonData,
    }
  },

});

然后在另外一个类里引用他

export default cc.Class({
  extends: cc.Component,

  properties: {
    effects: {
      default: [],
      type: [SpineInfo],
    },
  },

那么在 TypeScript 里应该怎样实现 SpineInfo 这个类呢?

@???   // 这里用什么
export default class SpineInfo {
    @CCProperty(string)
    public effectName: string;

    @CCProperty({default: "animation", type: cc.String})
    public animationName: string;

    @CCProperty({ default: null, type: sp.SkeletonData }
    public skeleton: sp.SkeletonData;
}

我之前没考虑到这种用法,这个数据类请你暂且用原生的cc.Class定义一下。下一版本Creator 1.5会内置支持TS,有@ccclass装饰器,应该可以解决你这个问题。

自己折腾了一个 CCData,发现这样可以

export function CCData(className) {
  return function (constructor) {
    let uuid = getUUID();
    if (defined[uuid]) return definedClass[uuid];
    constructor.$super = cc.Object;
    let cls = define(className, constructor, currentMixins[uuid], void 0, {});
    declareProperties(cls, className, currentProperties[uuid], constructor, void 0);
    currentProperties = {};
    currentMixins = {};
    currentEditor = {};
    defined[uuid] = true;
    definedClass[uuid] = cls;
    return cls;
  }
}

1赞

对,这就是cc.Class不继承cc.Component的情况。

在cocos2d-js 3.9版本的项目里面用class定义场景和layer类,touch事件无法触发,不报错。改回cc.Scene.extend();的方式就没有问题。我只是在新建的HelloWorldScene上改了语法。:joy:

没有看懂你的意思?这是Creator的项目,不能用在cocos2d-js上。

C++ 转过来的,感觉typescript听好用的。 :joy:之前不知道 ctrl+w是干什么的,刚刚试了一下,有效果。

按照官方的话来说,你不要管那么多,只要学就行了,不要问为什么

TypeScript 文件放在 resources 目录下build 时会有 meta uuid 崩溃的现象。v1.6.0 Cocos Creator。这有什么方法吗?

正需要,多谢楼主

感谢楼主做出的技术支持,在楼主的帮助建议下,官方在新版本里面已经提供了 TypeScript 的更全面的支持,本文内容不作为最新教程,仅供存档和参考。如需学习请查阅官方教程:
http://www.cocos.com/docs/creator/scripting/typescript.html

写客户端逻辑,如果要我选择一门语言, 我会选择无类型语言.发明无类型语言的人是位"张三丰"式的人物.