-1
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 的代码,因为我目前正在尝试学习编码。我不明白为什么当我执行程序并控制速度时,他将值改变了不止一个。我想这将是一个简单的问题。是否可以将速度的增加和减少放在一个带有两个字母的按钮上,如 >< 键?我没有在我的情况下工作。

4

1 回答 1

2

发生这种情况是因为act()被快速连续调用。即使您只是按下并释放xact()也会在按键按下时运行几次,因此会多次更新速度。

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

例如,您可以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

    }
于 2017-09-29T22:23:40.183 回答