gpt4 book ai didi

java - libgdx 上的 touchDragged 问题

转载 作者:行者123 更新时间:2023-11-30 03:54:15 27 4
gpt4 key购买 nike

下面是我尝试添加 touchDragged 的​​代码,我尝试使用拖动方法通过 touchDragged 功能使对象左右移动。

问题是,当我在屏幕右侧滑动时,无论是向左还是向右滑动,对象仅向右移动。当我向左或向右滑动时,对象仅向左移动。

我有什么遗漏吗?

输入类及其下方的对象类。

倾斜 Action 也与此相同还是有所不同?如果能解释一下就好了。

输入类如下

public class Input implements InputProcessor
{
private Kame myKame;

public Input(Kame kame) {

myKame = kame;
}

@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
myKame.onClick();
return true; // Return true to say we handled the touch.
}

@Override
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
myKame.onClick();
return false;
}

@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
myKame.onSwipe(screenX, screenY, pointer);
return true;
}

@Override
public boolean mouseMoved(int screenX, int screenY) {
return false;
}

@Override
public boolean scrolled(int amount) {
return false;
}
}

Kame 类如下:

    public class Kame 
{
private Vector2 position;
private Vector2 velocity;
private Vector2 acceleration;

private int width;
private int height;
public float x;

public Kame(float x, float y, int width, int height) {
this.width = width;
this.height = height;
position = new Vector2(x, y);
velocity = new Vector2(0, 0);
acceleration = new Vector2(0, 460);
}

public void update(float delta) {

}

public boolean onSwipe(int velocityX, int velocityY, int delta) {

position.add(position.cpy().scl(delta));

// if (Math.abs(velocityX) < Math.abs(velocityY)) {
if (velocityX > 136) {
position.x += 3;//x cordinate
velocity.y += 10;
} else if (velocityX < 136) {
position.x -= 3;
velocity.y += 10;
} else {
// Do nothing.
}
// } else {
// Ignore the input, because we don't care about up/down swipes.
// }
return true;
}

public float getX() {
return position.x;
}

public float getY() {
return position.y;
}

public float getWidth() {
return width;
}

public float getHeight() {
return height;
}
}

最佳答案

此调用 onSwipe :

@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
myKame.onSwipe(screenX, screenY, pointer);
return true;
}

似乎与 onSwipe 的实现不匹配:

public boolean onSwipe(int velocityX, int velocityY, int delta) {

这里有几个问题。

  1. 传递给screenXscreenYtouchDragged参数是屏幕坐标。它们的范围介于 0 和屏幕的宽度(或高度)之间。 onSwipe 表示它需要一个“速度”(尽管内部的算法似乎并没有这样对待它)。

  2. pointer 签名中的 touchDragged 是光标的 ID 号(想象一下在触摸板上使用 4 个手指,“指针”标识哪个手指是哪个手指)。您将 is 用作“增量”。

您可以将 screenXpos.x 进行比较,然后根据 pos.x 是否小于或大于 screenX ,在 pos.x 中加或减 3。

计算实际速度需要跟踪位置的变化(这意味着跟踪先前的触摸位置),然后按帧速率进行缩放(将 delta 传递给 render )。

关于java - libgdx 上的 touchDragged 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23663509/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com