射击游戏滑动鼠标旋转镜头

3 篇文章 0 订阅
2 篇文章 0 订阅

当我们做桌面端射击游戏时,只使用鼠标MOVE事件旋转镜头时,这里使用的Laya引擎发布的游戏

这是就会使用的h5 的requestPointerLock方法锁定屏幕,然后使用鼠标移动差值进行计算旋转,如下代码

onEnable(): void { 
	var element = document.body;
	element.requestPointerLock = element.requestPointerLock || element["mozRequestPointerLock"] || element["webkitRequestPointerLock"];
	// element.requestPointerLock();

	document.addEventListener('pointerlockchange', this.pointerlockchange.bind(this), false);
	document.addEventListener('mozpointerlockchange', this.pointerlockchange.bind(this), false);
	document.addEventListener('webkitpointerlockchange', this.pointerlockchange.bind(this), false); 
}

private pointerlockchange(event: any): void {

	Laya.stage.off(Laya.Event.MOUSE_MOVE, this, this.onMouseMove);
	var element = document.body;
	if (document.pointerLockElement === element || document["mozPointerLockElement"] === element || document["webkitPointerLockElement"] === element) {

		// controls.enabled = true;
		this.rotateEnabled = true;
		Laya.stage.on(Laya.Event.MOUSE_MOVE, this, this.onMouseMove);

	} else {
		this.rotateEnabled = false;
	}
}

onDisable(): void { 
	document.removeEventListener('mousemove', this.onMouseMove2.bind(this), false);

	document.removeEventListener('pointerlockchange', this.pointerlockchange.bind(this), false);
	document.removeEventListener('mozpointerlockchange', this.pointerlockchange.bind(this), false);
	document.removeEventListener('webkitpointerlockchange', this.pointerlockchange.bind(this), false);
}

onStageDown(): void { 

	this.rotateEnabled = !this.rotateEnabled;
	var element = document.body;
	if (this.rotateEnabled) {
		Laya.stage.off(Laya.Event.MOUSE_MOVE, this, this.onMouseMove);
		element.requestPointerLock();
		document.addEventListener('mousemove', this.onMouseMove2.bind(this), false);
	} else {
		// element.requestFullscreen();
		document.removeEventListener('mousemove', this.onMouseMove2.bind(this), false);
	}
}

private onMouseMove2(e: any): void {

	if (!this.rotateEnabled) {
		return;
	}

	let movementX = e.movementX || e.mozMovementX || e.webkitMovementX || 0;
	let movementY = e.movementY || e.mozMovementY || e.webkitMovementY || 0;

	console.log("onMouseMove2 ======> " + movementX + "_" + movementY);

	this.mouseMovement(-movementX, movementY);
}

private mouseMovement(movementX: number, movementY): void {

	let lerpx = movementX * 0.002;
	let lerpy = movementY * 0.002;

	this.eyeYawPitchRoll.x -= lerpy;//* Math.PI / 180;
	this.eyeYawPitchRoll.x = Math.max(-Math.PI / 2, Math.min(Math.PI / 2, this.eyeYawPitchRoll.x));

	if (this.role) {
		this.role.transform.rotate(new Laya.Vector3(0, lerpx, 0), false, true);
		// this.role.transform.localRotationEulerY -= lerpx * 180 / Math.PI;
		this.CameraCont.transform.localRotationEulerX = -this.eyeYawPitchRoll.x * 180 / Math.PI;
	}
}

然后就实现了射击游戏鼠标移动角色旋转的方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值