83 lines
2.3 KiB
TypeScript
83 lines
2.3 KiB
TypeScript
|
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);
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|