- 最后登录
- 2014-10-23
- 注册时间
- 2011-7-19
- 阅读权限
- 90
- 积分
- 81303
- 纳金币
- -1
- 精华
- 11
|
上一节我们学的是如何实现鼠标事件,这一节我们看看如何实现键盘事件,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广播站 |
|