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

官方目前貌似不打算支持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

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

1.5以后Creator就自带TypeScript支持了,直接在资源管理器中新建TypeScript脚本即可,现在这个帖子仅作参考。

问下,这样的MVC风格,如果我多个model,或者controllers间数据怎么交互?

这种情况我习惯用全局事件传递数据。

socket方面的呢?
我尝试把socket.io.js一丢进项目里面就报错了。

楼主,github上的项目两年没有更新了,可以更新一下吗?cocos creator 1.9.1 跑不起来了

Creator 1.5开始就内置了,不需要使用github上的项目了。