2012-05-06 4 views
0

Я начал использовать jMonekyEngine, и это простой способ взаимодействия с графическим интерфейсом Swing. Следуя их учебнику здесь http://jmonkeyengine.org/wiki/doku.php/jme3:advanced:swing_canvasстатическая переменная не изменяется

Все работает, и я все загрузил, однако у меня проблемы с изменением.

Согласно их учебник, постоянное обновление и здесь происходит:

public void simpleUpdate(float tpf) { 
    geom.rotate(0, 2 * tpf, 0); 
} 

(это пример из учебника вращающихся объектов). то, что я пытаюсь сделать, это просто увеличить и уменьшить скорость вращения (изменив значение 2 или tpf с переменной, которая обновляется внутри ActionListener в Swing gui.

Однако, поскольку в своем учебном пособии они заявили что качели графический интерфейс должен быть создан внутри основного метода, я должен создать переменную, которая является статическим, чтобы изменить его.

static float rotate = 0.0f; 

он модифицируется внутри основного метода, но при попытке использовать его как так:

public void simpleUpdate(float tpf) { 
    geom.rotate(0, rotate * tpf, 0); 
} 

остается неизменным до начального значения. Я попытался создать класс GUI для создания gui (расширяет JPanel) и использовать геттеры и сеттеры, но все равно не поеду. Любая помощь будет оценена! Спасибо!

EDIT: Вот как изменить значение поворота:

JButton faster = new JButton("Faster"); 
faster.addActionListener(new ActionListener() { 

    @Override 
    public void actionPerformed(ActionEvent arg0) { 
     rotate +=0.1f; 
    } 
}); 

внутри основного метода. rotate - статическое поле.

+1

Я не вижу, где вы назначаете новое значение ... Необходимо иметь 'rotate = (something)', чтобы фактически изменить значение – Jared

+0

Конечно, это происходит внутри кнопки addActionListener внутри gui. отредактировал мой вопрос, чтобы показать это –

+0

Я бы опубликовал этот код. – Jared

ответ

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[]=input

Является ли ваше действие слушателя действительно инициирует событие при нажатии? возможно, у вас есть проблема, а не в переменной rotate. Обратите внимание, что в этом примере я не использую 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--; 
      } 
     } 
     }; 
} 
Смежные вопросы