以下是使用Cocos Creator 2.4.x创建3D场景并控制角色移动的基本示例代码:
```typescript
const {cc, Vec3} = window;
cc.Class({
extends: cc.Component,
properties: {
// 场景中的相机
camera: cc.Camera,
// 角色节点
player: cc.Node,
// 角色移动速度
speed: 100,
},
start() {
// 注册键盘事件
cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN, this.onKeyDown, this);
cc.systemEvent.on(cc.SystemEvent.EventType.KEY_UP, this.onKeyUp, this);
},
onDestroy() {
// 取消键盘事件的注册
cc.systemEvent.off(cc.SystemEvent.EventType.KEY_DOWN, this.onKeyDown, this);
cc.systemEvent.off(cc.SystemEvent.EventType.KEY_UP, this.onKeyUp, this);
},
onKeyDown(event) {
const keyCode = event.keyCode;
switch (keyCode) {
case cc.macro.KEY.w:
// 按下‘w’键,向前移动
this.move(new Vec3(0, 0, -1));
break;
case cc.macro.KEY.s:
// 按下‘s’键,向后移动
this.move(new Vec3(0, 0, 1));
break;
case cc.macro.KEY.a:
// 按下‘a’键,向左移动
this.move(new Vec3(-1, 0, 0));
break;
case cc.macro.KEY.d:
// 按下‘d’键,向右移动
this.move(new Vec3(1, 0, 0));
break;
default:
break;
}
},
onKeyUp(event) {
const keyCode = event.keyCode;
switch (keyCode) {
case cc.macro.KEY.w:
case cc.macro.KEY.s:
case cc.macro.KEY.a:
case cc.macro.KEY.d:
// 松开方向键时,停止移动
this.move(new Vec3(0, 0, 0));
break;
default:
break;
}
},
move(dir) {
// 角色节点移动
const position = this.player.getPosition();
const delta = new Vec3(dir.x * this.speed, 0, dir.z * this.speed);
Vec3.add(position, delta, position);
this.player.setPosition(position);
// 将相机跟随角色节点移动
const cameraPos = this.camera.node.getPosition();
Vec3.add(position, new Vec3(0, 50, -100), cameraPos);
this.camera.node.setPosition(cameraPos);
this.camera.lookAt(position);
}
});
```
在上述示例代码中,我们创建了一个包含场景中相机和角色节点的组件,并监听键盘事件来移动角色节点,同时将相机跟随角色节点移动。