【问题标题】:Updating variables in the main method?在 main 方法中更新变量?
【发布时间】:2011-06-19 00:33:14
【问题描述】:

我正在用 java 制作汽车游戏。道路的速度是在main方法中设置的,但是我需要更新速度(车越界被草减速)。

这是我想要控制速度的 int 更改的部分。

 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 方法不会更新计时器延迟。 我看过 changelisteners 但我不想要任何按钮或滑块。

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();
            }
        });

汽车 -

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;
            }   


    }

【问题讨论】:

  • 你的缩进到底是怎么回事?你真的缩进 ifs 的 body 少于 ifs 本身吗?
  • 我对缩进进行了规范化,以方便其他人阅读。
  • 但是如果我要重做第二个代码块,我该死的。

标签: java methods timer main updating


【解决方案1】:

Phillip,如果我们能看到你是如何调用那段代码的,那将会很有帮助。事实上,我们看不到 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,而不是成员变量。

因此,如果这没有帮助,您将不得不提供更多提示。

【讨论】:

  • 这是评论,不是答案。这让我很怀疑,因为你应该知道得更多。
  • 好吧,我刚刚得到了一个更冗长的答案,不幸的是,它是用 C 语言编写的。现在我要回过头来用 Java 说出来。就怀疑而言,不要这么愤世嫉俗。
  • 我添加了更多代码,希望对您有所帮助。很抱歉有几个人正在处理这个糟糕的组织,当我复制粘贴时,一些格式被弄乱了。
  • 嗯,这是一个开始。您确定正在调用您的 actionPerformed 函数吗?
  • 如果您指的是在开始时调用它时是的。问题是当汽车经过碰撞点并且更改了道路速度时,它确实会更新道路速度。对我来说,它看起来就像 main 在开始时运行一次,然后再也不会运行。对不起,如果我很难,我对此还是很陌生。
猜你喜欢
  • 2017-03-27
  • 1970-01-01
  • 2016-01-19
  • 1970-01-01
  • 1970-01-01
  • 2016-03-15
  • 2016-12-26
  • 2012-12-27
  • 1970-01-01
相关资源
最近更新 更多