1、默认例子中的text定义为hello(与helloworld.fire文件中一致),修改之后没有更新,变量改名之后正常更新,暂不清楚原因
@property
text: string = 'hello';
2、如何创建一个粒子动效
① 使用particle2dx创建一个效果并导出.plist文件
② 编辑器=>层级管理器中创建渲染节点=>粒子,particleSystem的file选项选择我们自己创建好的效果(拖过去就行)
③ 将上一步创建好的编辑器=>层级管理器的渲染节点拖动到资源文件夹中(resources/xxx)生成prefab预制资源
④ 在代码中引用prefab资源创建节点
// resUrl的路径是相对于resources的,例如assets/resources/prefab/xxx.prefab,则resUrl = 'prefab/xxx',不需要带后缀 cc.loader.loadRes(resUrl, cc.Prefab, (err: Error, prefab: cc.Prefab) => { if (err) { return; } newNode = cc.instantiate(prefab); this.setClickNode(newNode, tag, position); });
3、关于对象池:
重复利用缓存对象时,回收时需要将一些component中状态清空,避免再次使用时延续了上一次的状态,比如tween动画、碰撞检测框等
// 停止所有动作,否则再次从对象池中取出会继续未完成动作 node.stopAllActions() // 碰撞组件需要移除,避免一次碰撞触发了多次(只在新建节点时创建一次不生效)) node.removeComponent(cc.BoxCollider)
4、关于碰撞检测:
① 先开启碰撞检测开关(全局的)
// // 开启碰撞检测 const manager = cc.director.getCollisionManager() manager.enabled = true; manager.enabledDebugDraw = true;
② 两个需要碰撞的节点添加对应的collider组件,并在主动碰撞方添加回调函数
// 被碰撞方 const collider = finishLine.addComponent(cc.BoxCollider) collider.name = "finishLineCollider" collider.size = cc.size(finishLine.width, 2) // 主动碰撞方 const collider = node.addComponent(cc.BoxCollider) collider.name = `dropItemCollider` collider.size = cc.size(node.width, node.height) // 这里可能提示collider没有onCollisionEnter的方法,添加到类型定义或者node预先定义的类型为null而不是cc.Node(避免被ts检查器类型追踪) collider.onCollisionEnter = (...args) => { console.log('peng', args) // xxx }
5、发布到微信小游戏
①:cocos编辑器内项目=>构建,需要设置输出目录(默认build)、微信开发工具路径等信息
②:build目录的代码可以直接放在微信工具里运行,目录结构如下