Up today, I hope to build on last night's progress on adding Physijs to my Three.js avatar island. Last night, I was able to add a Physijs box around my avatar:
It interacts with other Physijs objects (like the ball) as desired, but it breaks the first person controls that I had been using. So tonight I am going to add my own controls tonight.
The easiest way that I can accomplish this is to add a document event listener for keydowns:
document.addEventListener("keydown", function(event) { var code = event.which || event.keyCode; console.log(code); if (code == 0x57) { // w console.log("moveForward"); a_frame.setLinearVelocity({z: -100, y: 0, x: 0 }); } else if (code == 0x41) { // a console.log("moveleft"); a_frame.setLinearVelocity({z: 0, y: 0, x: -100 }); } else if (code == 0x53) { // s console.log("moveBackward"); a_frame.setLinearVelocity({z: 100, y: 0, x: 0 }); } else if (code == 0x44) { // d console.log("moveRight"); a_frame.setLinearVelocity({z: 0, y: 0, x: 100 }); } });And that works pretty much as desired. Except that I run into the same problem that I saw with Box2D.js and Gladius–the avatar keeps moving even after I let go of the movement keys.
So I try the same solution that I used over there. I set the linear damping to zero:
a_frame.setDamping(10);Only that doesn't work at all. My avatar is ejected out into space.
So I am stuck adding a corresponding keydown event listener:
document.addEventListener("keyup", function(event) { var code = event.which || event.keyCode; console.log(code); if (code == 0x57) { // w console.log("stopForward"); a_frame.setLinearVelocity({z: 0, y: 0, x: 0 }); } else if (code == 0x41) { // a console.log("stopleft"); a_frame.setLinearVelocity({z: 0, y: 0, x: 0 }); } else if (code == 0x53) { // s console.log("stopBackward"); a_frame.setLinearVelocity({z: 0, y: 0, x: 0 }); } else if (code == 0x44) { // d console.log("stopRight"); a_frame.setLinearVelocity({z: 0, y: 0, x: 0 }); } });That works, but it is not entirely satisfactory. If I am hold W and A at the same time, then letting go of either will stop the avatar. I can live with that, but I would certainly prefer something a little more robust. Shame the damping seems broken.
I'll sleep on that and hopefully come up with something better tomorrow.
Day #477
No comments:
Post a Comment