我开始使用jMonekyEngine,这是与Swing GUI交互的简便方法。 按照他们的教程http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:swing_canvas
一切正常,我把所有东西都加载了,但是我在修改东西时遇到了麻烦。
根据他们的教程,不断更新并发生在这里:
public void simpleUpdate(float tpf) {
geom.rotate(0, 2 * tpf, 0);
}
(这是旋转对象教程中的一个例子)。 我正在尝试做的只是增加和减少旋转速度(通过在Swing gui中的ActionListener内部获得更新的变量更改2或tpf。
然而,因为在他们的教程中他们声明要在main方法中创建swing gui,我必须创建一个静态的变量以便更改它。
static float rotate = 0.0f;
它在main方法中被修改,但是当尝试使用它时:
public void simpleUpdate(float tpf) {
geom.rotate(0, rotate * tpf, 0);
}
它与初始值保持不变。 我尝试创建一个GUI类来构建gui(扩展JPanel)并使用getter和setter,但仍然没有... 任何帮助,将不胜感激! 谢谢!
编辑: 以下是我更改旋转值的方法:
JButton faster = new JButton("Faster");
faster.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
rotate +=0.1f;
}
});
在main方法中。 rotate是一个静态字段。
答案 0 :(得分:1)
这对我有用
http://test.jmonkeyengine.org/wiki/doku.php/jme3:beginner:hello_main_event_loop http://test.jmonkeyengine.org/wiki/doku.php/jme3:beginner:hello_input_system?s [] =输入
您的动作监听器是否真的在点击时触发了该事件?也许你有问题而不是旋转变量。请注意,我在这个例子中没有使用swing。
import com.jme3.app.SimpleApplication;
import com.jme3.input.KeyInput;
import com.jme3.input.controls.ActionListener;
import com.jme3.input.controls.KeyTrigger;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Vector3f;
import com.jme3.scene.Geometry;
import com.jme3.scene.shape.Box;
/** Sample 4 - how to trigger repeating actions from the main update loop.
* In this example, we make the player character rotate. */
public class HelloLoop extends SimpleApplication {
public static void main(String[] args){
HelloLoop app = new HelloLoop();
app.start();
}
protected Geometry player;
@Override
public void simpleInitApp() {
Box b = new Box(Vector3f.ZERO, 1, 1, 1);
player = new Geometry("blue cube", b);
Material mat = new Material(assetManager,
"Common/MatDefs/Misc/Unshaded.j3md");
mat.setColor("Color", ColorRGBA.Blue);
player.setMaterial(mat);
rootNode.attachChild(player);
initKeys();
}
/* This is the update loop */
@Override
public void simpleUpdate(float tpf) {
// make the player rotate
player.rotate(0, val*tpf, 0);
}
float val = 2f;
private void initKeys() {
// Adds the "u" key to the command "coordsUp"
inputManager.addMapping("sum", new KeyTrigger(KeyInput.KEY_ADD));
inputManager.addMapping("rest", new KeyTrigger(KeyInput.KEY_SUBTRACT));
inputManager.addListener(al, new String[]{"sum", "rest"});
}
private ActionListener al = new ActionListener() {
public void onAction(String name, boolean keyPressed, float tpf) {
if (name.equals("sum") ) {
val++;
}else if (name.equals("rest")){
val--;
}
}
};
}