⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cameracontroller.java

📁 monkeymahjongg,一个JME3D游戏的源代码
💻 JAVA
字号:
package jmetest.monkeymahjongg.game;
 
 import com.jme.input.controls.GameControl;
 import com.jme.input.controls.GameControlManager;
 import com.jme.input.controls.binding.KeyboardBinding;
 import com.jme.scene.Controller;
 
 import static com.jme.input.KeyInput.*;
 import static com.jme.math.FastMath.clamp;
 import static jmetest.monkeymahjongg.game.CameraController.Direction.*;
 
 /**
 * 
 * @author Pirx
 */
 class CameraController extends Controller {
 
 private static final long serialVersionUID = 1L;
 
 enum Direction {LEFT, RIGHT, UP, DOWN, FORWARD, BACK};
 
 private final static float MIN_ANGLE = 1.2f;
 private final static float MIN_DISTANCE = 35f;
 private final static float MAX_DISTANCE = 150f;
 private final static float SPEED = 2f;
 private final GameControlManager manager = new GameControlManager();
 private final CameraGameState gameState;
 
 private float vAngle = 0;
 private float hAngle = 0;
 private float distance = 100;
 
 public CameraController(CameraGameState gameState) {
 this.gameState = gameState;
 
 bind(LEFT, KEY_LEFT);
 bind(RIGHT, KEY_RIGHT);
 bind(UP, KEY_UP);
 bind(DOWN, KEY_DOWN);
 bind(FORWARD, KEY_PGUP, KEY_ADD);
 bind(BACK, KEY_PGDN, KEY_SUBTRACT);
 }
 
 private void bind(Direction direction, int... keys) {
 final GameControl control = manager.addControl(direction.name());
 for (int key : keys) {
 control.addBinding(new KeyboardBinding(key));
 }
 }
 
 private float value(Direction direction) {
 return manager.getControl(direction.name()).getValue();
 }
 
 public void update(float time) {
 final float way = SPEED * time;
 hAngle = clamp(hAngle + way * (value(RIGHT) - value(LEFT)), -MIN_ANGLE, MIN_ANGLE);
 vAngle = clamp(vAngle + way * (value(DOWN) - value(UP)), -MIN_ANGLE, MIN_ANGLE);
 gameState.getCameraRotationNode().getLocalRotation().fromAngles(vAngle, hAngle, 0f);
 distance = clamp(distance + 20 * way * (value(BACK) - value(FORWARD)),
 MIN_DISTANCE, MAX_DISTANCE);
 gameState.getCameraDistanceNode().setLocalTranslation(0, 0, distance);
 }
 }
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -