查看: 1896|回复: 0

[WEBGL] GLGE系列教程–第9节:键盘控制前后左右

[复制链接]

5552

主题

2

听众

8万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
11

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

发表于 2012-8-31 15:05:56 |显示全部楼层
上一节我们学的是如何实现鼠标事件,这一节我们看看如何实现键盘事件,glge的api中定义了很多键盘,基本全包括了。我就用常用的WSDA这四个键。 首先需要获得GLGE中的键盘输入事件。…


上一节我们学的是如何实现鼠标事件,这一节我们看看如何实现键盘事件,glge的api中定义了很多键盘,基本全包括了。我就用常用的WSDA这四个键。

首先需要获得GLGE中的键盘输入事件。
JavaScript Code复制内容到剪贴板

var keys=new GLGE.KeyInput();  

创建事件方法:
JavaScript Code复制内容到剪贴板

function checkkeys(){}  

获得场景中的摄像机,并且得到摄像机的坐标位置
JavaScript Code复制内容到剪贴板

var camera=gameScene.camera;  

camerapos=camera.getPosition();  

camerarot=camera.getRotation();  

var mat=camera.getRotMatrix();  

//  var trans=mat.x([0,0,-1]);  

var trans=GLGE.mulMat4Vec4(mat,[0,0,-1,1]);  

var mag=Math.pow(Math.pow(trans[0],2)+Math.pow(trans[1],2),0.5);  

trans[0]=trans[0]/mag;  

trans[1]=trans[1]/mag;  

var yinc=0;  

var xinc=0;  

//判断按键  

if(keys.isKeyPressed(GLGE.KI_M)) {addduck();}  

if(keys.isKeyPressed(GLGE.KI_W)) {yinc=yinc+parseFloat(trans[1]);xinc=xinc+parseFloat(trans[0]);}  

if(keys.isKeyPressed(GLGE.KI_S)) {yinc=yinc-parseFloat(trans[1]);xinc=xinc-parseFloat(trans[0]);}  

if(keys.isKeyPressed(GLGE.KI_A)) {yinc=yinc+parseFloat(trans[0]);xinc=xinc-parseFloat(trans[1]);}  

if(keys.isKeyPressed(GLGE.KI_D)) {yinc=yinc-parseFloat(trans[0]);xinc=xinc+parseFloat(trans[1]);}  

  

//判断按键  

if(keys.isKeyPressed(GLGE.KI_LEFT_ARROW)) {camera.setRotZ(0.5);}  

if(levelmap.getHeightAt(camerapos.x+xinc,camerapos.y)>30) xinc=0;  

if(levelmap.getHeightAt(camerapos.x,camerapos.y+yinc)>30) yinc=0;  

if(levelmap.getHeightAt(camerapos.x+xinc,camerapos.y+yinc)>30){yinc=0;xinc=0;}  

else{  

camera.setLocZ(levelmap.getHeightAt(camerapos.x+xinc,camerapos.y+yinc)+8);  

}  

if(xinc!=0 || yinc!=0){  

camera.setLocY(camerapos.y+yinc*0.05*(now-lasttime));camera.setLocX(camerapos.x+xinc*0.05*(now-lasttime));  

}  

}  

levelmap=new GLGE.HeightMap(“map.jpg”,120,120,-50,50,-50,50,0,50);  

在渲染器中添加按键方法checkkeys();
JavaScript Code复制内容到剪贴板

function render(){  

checkkeys();  

}  

现在运行你的代码就可以响应WSDA的键盘事件了。 来源:WebGL广播站
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-3-29 15:33 , Processed in 0.082445 second(s), 30 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部