0

这是一个游戏的冲刺功能,如果玩家剩余的弹力大于 0% 则可以冲刺,如果为 0% 则玩家不能冲刺。如果玩家没有冲刺,那么冲刺百分比将开始重新生成。

问题:当玩家达到 0% 冲刺时,玩家仍然可以冲刺。

public class User extends Characters
{
    private int walk = 3;
    private int run = 10;
    private int speed = walk;

    private boolean isRunning = false;
    private int runDuration = 100;
    private int baseRunDuration = 100;
    private int runCoolDown = 300;


    public void act() 
    {
        playerMove();
    }

    //Contains movement inputs as well as run imputs
    void playerMove(){
        getWorld().showText("Run Duration: " + runDuration, 100, 100);

         if(Greenfoot.isKeyDown("w") ){
            setLocation(getX(), getY()-speed);
        }
        if(Greenfoot.isKeyDown("a")){
            move(-speed);
        }
        if(Greenfoot.isKeyDown("s")){
            setLocation(getX(), getY()+speed);
        }
        if(Greenfoot.isKeyDown("d")){
            move(+speed);
        }

        if(Greenfoot.isKeyDown("shift") && runDuration > 0){

            if(runDuration > 0){
                isRunning = true;
                speed = run;
                runDuration--;


            }
        }
       else{
                speed = walk;
                isRunning = false;
        }

        if(isRunning == false){
            if(runDuration < baseRunDuration){
                runDuration++;
            }
        }
    }
}
4

1 回答 1

1

Obicere 是正确的,您要么在冲刺,要么在交替冲刺而不是冲刺,给予半速冲刺。有多种方法可以解决此问题。我建议仅在您不移动时为冲刺充电。您可以使用布尔值来跟踪您是否移动了此框架,或者只需使用 else-if 将中间代码块更改为:

    if(Greenfoot.isKeyDown("w") ){
        setLocation(getX(), getY()-speed);
    }
    else if(Greenfoot.isKeyDown("a")){
        move(-speed);
    }
    else if(Greenfoot.isKeyDown("s")){
        setLocation(getX(), getY()+speed);
    }
    else if(Greenfoot.isKeyDown("d")){
        move(+speed);
    }
    else if(runDuration < baseRunDuration){
         runDuration++;
    }

注意新的 else 和最后从代码底部向上移动的最后一个子句。

于 2017-04-30T10:02:43.837 回答