首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Greenfoot isKeyDown()似乎持有它的价值

Greenfoot isKeyDown()似乎持有它的价值
EN

Stack Overflow用户
提问于 2017-04-30 01:28:40
回答 1查看 92关注 0票数 0

这是一个游戏的冲刺功能,如果玩家的弹跳力大于0%,那么他可以冲刺,如果是0%,玩家就不能冲刺。如果玩家没有冲刺,那么sprint %将开始再生。

问题是:当玩家达到0%的冲刺时,玩家仍然能够冲刺。

代码语言:javascript
复制
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++;
            }
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-30 10:02:43

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

代码语言:javascript
复制
    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++;
    }

注意新的elses,以及末尾的最后一个子句,从代码的底部向上移动。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43702039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档