In the W,S cases I clone the cameraFront and the scale and then add. In your case you are applying the scale directly to the cameraFront and then adding it. I would try cloning it. I think the case in the A, D cases the crossProduct() returns a new vector and you are not picking that up so you are applying the original value.