首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过每次单击- LibGDX使这个块来回滑动?

如何通过每次单击- LibGDX使这个块来回滑动?
EN

Stack Overflow用户
提问于 2014-10-23 17:35:38
回答 3查看 226关注 0票数 0

我已经有了这样的代码,当鼠标单击一次时,该代码使块从左向右移动。我想要实现的是,当再次单击鼠标时,块再次向左移动,然后再向右移动,等等。我将包括下面的图片,所以你有一个想法,我正在努力实现。

目前为止的代码:

代码语言:javascript
复制
boolean hasBeenTapped = false;

public void update(float delta){

    velocity.x += speed*delta;

    if (Gdx.input.justTouched()){
        hasBeenTapped = true;
    }

    if (hasBeenTapped && getX() < 864){
        setX(getX() + velocity.x*delta);

    }

    if (getX()>864){
        setX(864);
    }


}

图片:

这就是游戏开始的样子:http://i.imgur.com/wU6ej1J.png

当我点击鼠标一次,结果就是这样的:http://i.imgur.com/i0IpJd4.png

我希望能够多次点击鼠标,并使它在这两点之间滑动。

非常感谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-23 18:34:46

我无法测试以下代码,但它应该适合您,或者至少可以给您一个想法:

代码语言:javascript
复制
boolean control = false;
velocity.x += speed * delta;

if (Gdx.input.justTouched()){
    hasBeenTapped = true;
}

if (hasBeenTapped && getX() < 864 && control == false){
    setX(getX() + velocity.x*delta);            
}

if (getX()>864){
    setX(864);          
    control = true;         
    hasBeenTapped = false;
}

if (hasBeenTapped && getX() == 864 || getX() < 864 && control == true){
    setX(getX() - velocity.x * delta);
}

if (getX()< 0){
    setX(0);    
    control = false;
    hasBeenTapped = false;                      
}
票数 0
EN

Stack Overflow用户

发布于 2014-10-23 18:37:39

如果速度是块的当前速度,您可以简单地在每个点击上反转它,这样块就会向相反的方向移动:

代码语言:javascript
复制
if (Gdx.input.justTouched()){
   hasBeenTapped = true;
   speed = - speed;
}

如果您在到达边界时也想倒转方向:

代码语言:javascript
复制
if (getX()<0 || getX()>864){
   speed = - speed;
}

此外,您还需要左绑定检查:

代码语言:javascript
复制
if (getX()<0) { 
   setX(0);
}

在检查左界或右界时,还应考虑块的宽度,否则,块的一部分将被绑定。

票数 0
EN

Stack Overflow用户

发布于 2014-10-24 12:55:06

为了尽可能地简化这一点,您可以使用线夹函数来确保块始终在您想要的范围内。我将hasBeenTapped更改为shouldMove,因为我认为您可能会对它是否应该移动进行更复杂的测试。

代码语言:javascript
复制
boolean shouldMove = false;

public void update(float delta){

    if (Gdx.input.justTouched()){
        shouldMove = true;
        speed *= -1; //negate the speed to reverse directions
    }

    if (shouldMove)
        setX( Math.clamp(getX() + speed*delta, 0, 864) );
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26533982

复制
相关文章

相似问题

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