Обновление переменных в основном методе? - PullRequest
0 голосов
/ 01 февраля 2011

Я делаю автомобильную игру в Java. Скорость дороги задается в основном методе, но мне нужно обновить скорость (машина выходит за границы и замедляется из-за травы).

Здесь часть, в которой я хочу контролировать скорость, изменяется.

 if(collision[12] > x)        
 {
    roadSpeed = 150;
    System.out.println("outside");
 }
 else
 {
    System.out.println("inside");
    roadSpeed = 100;
 } 

Вот основной метод до того момента, когда мне нужно обновить.

public static void main(String[] args) 
{
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            final TestRoad road = new TestRoad();
            road.timer.setDelay(roadSpeed);

После изменения типа int метод main не обновляет задержку таймера. Я просматривал списки изменений, но не хочу никаких кнопок или ползунков.

где объявлено int, где оно называется

public Boolean start = true;
    public int i;
    public int x;
    public int y;
    public int z;
    public static int roadSpeed = 100; //<<<<<<<<<<declared here      
    public int lcolPoint = 0;
    public int rcolPoint = 0;
    public int colSlot = 0;
    public int colOffset = 0;
    public int carY;
    public int[] collision;
    public int[] colBuffer;
    private BufferedImage carImg;
    private Boolean right=false;
    private Boolean left=false;
    private Boolean first=true;




    public TestRoad(){

        this.setFocusable(true);  
        addKeyListener(this);                        //THIS IS ADDING THE KEYLISTENER
        Color colors = new Color(51,102,0);            
        setBackground(colors);


        //uses setPreferredSize instead of setSize because parent component utilizes a layout manager.
        setPreferredSize(new Dimension(500, 500));

        collision = new int[500];
        colBuffer = new int[2];

        for(int i=0; i<500; i++){
                collision[i] = 0;   
        }   


        timer = new javax.swing.Timer(25, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                addPoint();
                carMove();    //<<<<< called here
                repaint();
            }
        });

carmove -

public void carMove()
    {
        if(right==true)
            x+=8;

        if(left==true)
            x-=8;

            colBuffer[0] = collision[1];
            collision[1] = lcolPoint;

             collision[colSlot] = lcolPoint;

           for(int z=2; z<21; z++){
            colBuffer[1] = collision[z];
            collision[z] = colBuffer[0];
            colBuffer[0] = colBuffer[1];
           }    

            if(collision[12] > x)        
            {
                roadSpeed = 100;
                System.out.println("outside");
            }
            else
            {
                System.out.println("inside");
                roadSpeed = 50;
            }   


    }

1 Ответ

1 голос
/ 01 февраля 2011

Филипп, было бы очень полезно, если бы мы могли видеть, как вы называете этот кусок кода.На самом деле, мы не можем видеть, где объявлено roadSpeed, и не имеем никакого представления о его сфере действия.

Но, скажем, это было что-то вроде

class Game {
  private int roadSpeed = 200 ; // just an initial value

  public void getSpeed(int collision, int roadSpeed){
    if(collision[12] > x){
      roadSpeed = 150;
      System.out.println("outside");
    } else {
      System.out.println("inside");
      roadSpeed = 100;
    }
    return;
  }

  public static void main(String[] args){
    // do something that sets collision
    getSpeed(collision, roadSpeed);
    // and on with your code

В этомкод, например, вы думаете вы устанавливаете roadSpeed, но это внутренний roadSpeed, а не переменная-член.

Так что, если это не такне поможет, вам придется включить дополнительные подсказки.

...