为什么它在我的速度控制中增加了1个以上?

时间:2017-09-29 22:14:13

标签: java greenfoot

import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)


public class Turtle extends Actor
{
    /**
     * Act - do whatever the Turtle wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    int laufmenge;

    public void act() 
    {



        if(Greenfoot.isKeyDown("left")){
            move(-speed);
        }

        if(Greenfoot.isKeyDown("right")){
            move(speed);
        }

        if(Greenfoot.isKeyDown("up")){
            setLocation(getX() ,getY() -speed);
        }

        if(Greenfoot.isKeyDown("down")){
            setLocation(getX() ,getY() +speed);
        }        

        if(Greenfoot.isKeyDown("x")){

         if(speed<10) speed++;
        }

        if(Greenfoot.isKeyDown("y")){

           if(speed>0) speed--;
        }

        System.out.println(speed);
    }    

    private int speed=1;
}

这是来自Greenfoot的代码,因为我目前正在尝试学习编码。我无法理解为什么当我执行程序并控制速度时,他将值改变多于一个。我想这将是一个简单的问题。 并且可以将速度的增加和减少放在一个按钮上,其中包含两个字母,如&gt;&lt;键?我没有在我的情况下工作。

1 个答案:

答案 0 :(得分:2)

这是因为快速连续调用act()。即使您只是按下并释放 x ,当键按下时,act()也会运行几次,因此会多次更新速度。

为避免这种情况,您可以跟踪自从您第一次注意到按钮被按下以来是否已经调整了速度。

例如,您可以在班级中拥有private bool adjustedSpeed = false;,然后执行:

    if(Greenfoot.isKeyDown("x")){

      if(speed<10 && !adjustedSpeed) speed++;
      adjustedSpeed = true;

    } else if(Greenfoot.isKeyDown("y")){

      if(speed>0 && !adjustedSpeed) speed--;
      adjustedSpeed = true;

    } else {

      adjustedSpeed = false

    }