纳金网

标题: GLGE系列教程–第9节:键盘控制前后左右 [打印本页]

作者: 会飞的鱼    时间: 2012-8-31 15:05
标题: GLGE系列教程–第9节:键盘控制前后左右
上一节我们学的是如何实现鼠标事件,这一节我们看看如何实现键盘事件,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广播站




欢迎光临 纳金网 (http://go.narkii.com/club/) Powered by Discuz! X2.5