import { constant } from './framework/constant'; import { GameManager } from './gameManager'; import { _decorator, Component, Node, Vec2, Vec3, Quat, clamp, Touch, ColliderComponent, EventTouch, Camera, input, Input } from 'cc'; const { ccclass, property } = _decorator; @ccclass('PlayerController') export class PlayerController extends Component { protected _stateX: number = 0; // 1 positive, 0 static, -1 negative protected _stateZ: number = 0; protected _speed: number = 0.009; ontouch :boolean = false; private _oldX: number = 0; @property(Camera) public Camera: Camera = null!; onLoad() { // 监听触摸事件 input.on(Input.EventType.TOUCH_START, this.touchStart, this); input.on(Input.EventType.TOUCH_MOVE, this.touchMove, this); input.on(Input.EventType.TOUCH_END, this.touchEnd, this); input.on(Input.EventType.TOUCH_CANCEL, this.touchCancel, this); } onDestroy() { input.off(Input.EventType.TOUCH_START); input.off(Input.EventType.TOUCH_MOVE); input.off(Input.EventType.TOUCH_END); input.off(Input.EventType.TOUCH_CANCEL); } public touchStart(touch: EventTouch) { this._stateX = 0; this.ontouch = true; } public touchMove(touch: EventTouch) { this._stateX = touch.getUIDelta().x; //前后移动间距为3才视为移动,避免太灵敏 if (Math.abs(this._stateX - this._oldX) <= 3) { this._stateX = 0; this._oldX = 0; } else { this._oldX = this._stateX; } } public touchEnd(touch: EventTouch) { this._stateX = 0; this.ontouch = false; } public touchCancel(touch: EventTouch) { this._stateX = 0; this.ontouch = false; } private _updateCharacter(dt: number) { this.node.position = new Vec3(this.node.position.x + this._stateX/6000 * dt, this.node.position.y, this.node.position.z - this._speed * dt); this.Camera.node.position = new Vec3(this.Camera.node.position.x, this.Camera.node.position.y, this.Camera.node.position.z - this._speed * dt); } update(dtS: number) { if(this.ontouch) { const dt = 1000 / constant.GAME_FRAME; this._updateCharacter(dt); } } }