import { _decorator, Component, EventKeyboard, EventMouse, Input, input, KeyCode, Node, v2, v3 } from 'cc';
const { ccclass, property } = _decorator;
@ccclass('pc2')
export class pc2 extends Component {
hu3:boolean = false
hu4:boolean = false
hu5:boolean = false
hu6:boolean = false
start() {
input.on(Input.EventType.MOUSE_MOVE,this.onMouseMove,this)
input.on(Input.EventType.KEY_DOWN,this.onKeyDown,this)
input.on(Input.EventType.KEY_UP,this.onKeyUp,this)
}
onMouseMove(event:EventMouse){
if(event.getButton() == 2){
//获取本地坐标系下的旋转,用欧拉角表示
let fe1 = this.node.eulerAngles.x
let fe2 = this.node.eulerAngles.y
//鼠标在UI坐标系下的移动距离
let x1 = event.movementX
let y1 = event.movementY
//用欧拉角设置世界坐标系下的旋转
this.node.setWorldRotationFromEuler(fe1+=y1*-1,fe2+=x1*-1,0)
}
}
onKeyDown(event:EventKeyboard){
if(event.keyCode == KeyCode.KEY_W){
this.hu3 = true
}
if(event.keyCode == KeyCode.KEY_A){
this.hu4 = true
}
if(event.keyCode == KeyCode.KEY_S){
this.hu5 = true
}
if(event.keyCode == KeyCode.KEY_D){
this.hu6 = true
}
}
onKeyUp(event:EventKeyboard){
if(event.keyCode == KeyCode.KEY_W){
this.hu3 = false
}
if(event.keyCode == KeyCode.KEY_A){
this.hu4 = false
}
if(event.keyCode == KeyCode.KEY_S){
this.hu5 = false
}
if(event.keyCode == KeyCode.KEY_D){
this.hu6 = false
}
}
update(deltaTime: number) {
//旋转角度转化为弧度
let ag = this.node.eulerAngles.y * 2/360 * Math.PI
//计算基于z轴的方向向量
let j = v3( Math.sin(ag), 0, Math.cos(ag) )
//计算基于x轴的方向向量
let o = v3(Math.cos(ag),0,Math.sin(ag))
//方向向量进行单位化
j.normalize()
//根据方向向量移动位置
let h1 = this.node.position.x
let h2 = this.node.position.y
let h3 = this.node.position.z
if(this.hu3){
this.node.setPosition
( h1 += deltaTime * j.x * 5 * -1, h2 += deltaTime * j.y * 5 * -1, h3 += deltaTime * j.z * 5 * -1 )
}
if(this.hu4){
this.node.setPosition
( h1 += deltaTime * o.x * 2 * -1, h2 += deltaTime * o.y * 2 * -1, h3 += deltaTime * -o.z * 2 * -1 )
}
if(this.hu5){
this.node.setPosition
( h1 += deltaTime * j.x * 2 * 1, h2 += deltaTime * j.y * 2 * 1, h3 += deltaTime * j.z * 2 * 1 )
}
if(this.hu6){
this.node.setPosition
( h1 += deltaTime * o.x * 2 * 1, h2 += deltaTime * o.y * 2 * 1, h3 += deltaTime * -o.z * 2 * 1 )
}
}
}