| COCOS开发指南(参考)
| 向量和标量
控制移动是改变x和z
标量:只有大小的量
向量:有大小有方向
向量的模:即向量的大小
向量运算
加法
(x1,y1) + (x2,y2) = (x1 + x2, y1 + y2)
减法
(x1,y1) - (x2,y2) = (x1 - x2, y1 - y2)
乘法
(x1,y1) * 2 = (2x1,2y1)
会获得一个向前的一个效果
点乘:获得两个向量的夹角
(x1,y1) + (x2,y2) = x1x2 + y1y2 = n = cos角度
| 脚本解析
脚本基础指南
docs.cocos.com/creator/man…
| 属性
@property属性用于显示在编辑器上
不是js基本类型的话需要声明一下
// 基本类型不用声明
@property text: string = 'hello';
// 非基本类型要加括号声明
@property(cc.label) label: cc.label = null;
| 生命周期函数
目前提供给开发者的生命周期回调函数主要有(按生命周期触发先后排列):
- onLoad 可以获取到场景中的其他节点,以及节点关联的资源数据, 初始化调用
- onEnable
- start 初始化调用,比onload慢一步
- update(dt) 每一帧都调用,参数:每帧间隔时间
- lateUpdate update后的收尾工作
- onDisable
- onDestroy 销毁调用
| 获取结点属性
每个结点指的是当前绑定脚本的结点
结点包含这些属性
及其组件
子结点操作
// 创建
new cc.Node('结点名称')
// 获取子结点
this.node.children[n] this.node.getChildByName("结点名称")
// 移除子结点
this.node.removeAllChildren())
// 获取其他目录的结点
// 比如要获取Canvas下的Main Camera
cc.find("Canvas/Main Camera")
父结点操作
// 获取
this.node.getParent()
// 设置
this.node.setParent(某个结点)
// 移除父结点
this.node.removeFromParent();
结点属性操作
// 位置访问
this.node.x this.node.y this.node.z
// 位置设置
this.node.setPosition(x, y, z);
this.node.setPosition(cc.V3(x,y,z)) // V3指三维向量, V2指二维
// 旋转
this.node.rotation
// 缩放
this.node.scale
// 锚点
this.node.anchorX
// 关闭结点
this.node.active = false
更多结点操作参考官方文档 docs.cocos.com/creator/3.5…
获取结点内其他组件
// 单个
this.getComponent(cc.MeshRenderer)
// 多个
this.getComponents(cc.MeshRenderer) // []
// 获取组件的子组件
this.getComponentInChildren(cc.MeshRenderer)
| 预设体
可以理解为把设置好的东西设置为模板
Prefab的用途:为了重复利用
- 多人开发应该尽量使用动态加载复制预制体来减少冲突
- 如何动态拿到预制体
onClickLoadLogin() {
// 预制体存放位置:resources/test_assets/login
resources.load("test_assets/login", Prefab, (err, prefab) => {
const newNode = instantiate(prefab);
this.node.addChild(newNode);
});
}
| 资源动态加载
docs.cocos.com/creator/man…
在assets中创建resources文件夹
在脚本中加载资源
| 旋转欧拉角
| WebSocket
webScoket h5 通信
socket.io插件 对scoket进一步封装实现更多功能
1.安装scoket.ico
npm i -g socket.io
2.如何发起websocket
服务端代码(node)
const app = require('express')();
const http = require('http').Server(app);
const io = require('socket.io')(http, {
cors: {
origin: 'http://localhost:7456',
credentials: true
},
allowEIO3: true
});
global.count = 0
// 监听是否连接
http.listen(3000, function () {
console.log('服务监听3000端口');
console.log('global.count', global.count)
});
// 监听客户端连接
io.on('connection', function (socket) {
console.warn('有客户端连接了');
socket.on('message', function (data) {
console.log(`客户端发来信息:${global.count}` + data);
});
socket.on('GameInfo', function (data) {
socket.emit('GameInfoRes', data);
console.log('global.count', global.count)
global.count++;
});
// 回应客户端信息
// socket.emit('response', '你好呀,客户端');
});
执行node 服务端.js
启动服务器
客户端
1.引入socket源码
socket.io
2.声明socket
socket.io.d.ts
declare var io : {
connect(url: string): Socket;
};
interface Socket {
on(event: string, callback: (data: any) => void );
emit(event: string, data: any);
}
3.cocos创建一个ts脚本,并挂载到某一个组件
SocketTest.ts
import { _decorator, Component, Node } from 'cc';
const { ccclass, property } = _decorator;
@ccclass('SocketTest')
export class SocketTest extends Component {
public static socket: Socket = null;
start() {
console.log('socket 连接...');
SocketTest.socket = io.connect('ws://localhost:3000');
SocketTest.socket.on('connect', data => {
console.log('连接成功回调', data, SocketTest.socket);
// 给服务端发送信息
SocketTest.socket?.emit('message', '我是客户端发来的信息');
SocketTest.socket.on('response', data => {
console.log('服务器回应response:', data);
});
});
}
update(deltaTime: number) {}
}
目录结构
Tips:
注册事件on
触发事件emit
服务器可以通过on注册事件来获取客户端emit的数据
同理,客户端也可以通过注册事件来获取服务器emit的数据
socket.emit/on : 当前用户事件触发
广播事件
blog.csdn.net/fd214333890…