gpt4 book ai didi

java - 避免图像超出屏幕(Android)(libGDX)

转载 作者:行者123 更新时间:2023-12-01 09:46:01 26 4
gpt4 key购买 nike

我想制作一个不能超出屏幕边缘的 Sprite 。我尝试过,但让它从边缘反弹。

my try

但是我需要停止向与图像碰撞的边缘移动。 (无反弹)

例如:你向右下角对角拖动, Sprite 与右边缘碰撞,但仍然向下滑动到角落。

有点像这样:

how it should work

我的代码尝试(结果请参见第一张图片):

public class MyGdxGame extends ApplicationAdapter {
SpriteBatch batch;
Texture img;
Sprite sprite;
float offsetX;
float offsetY;

@Override
public void create() {
batch = new SpriteBatch();
img = new Texture("badlogic.jpg");
sprite = new Sprite(img);

}

@Override
public void render() {
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

batch.begin();
sprite.draw(batch);
batch.end();

/*
Bouncing sprite off the edge.
*/

if(sprite.getX() <= 0){
sprite.setX(1);
} else if( sprite.getX() + sprite.getWidth() >= Gdx.graphics.getWidth() ){
sprite.setX(Gdx.graphics.getWidth() - sprite.getWidth() - 1);
} else if(sprite.getY() <= 0){
sprite.setY(1);
} else if (sprite.getY() + sprite.getHeight() >= Gdx.graphics.getHeight()) {
sprite.setY( Gdx.graphics.getHeight() - sprite.getHeight() - 1);
}

if (Gdx.input.justTouched()) {

offsetX = Gdx.input.getX() - sprite.getX();
offsetY = Gdx.graphics.getHeight() - Gdx.input.getY() - sprite.getY();

}

if (Gdx.input.isTouched()){

sprite.setPosition(Gdx.input.getX() - offsetX, (Gdx.graphics.getHeight() - Gdx.input.getY()) - offsetY);

}

}

}

最佳答案

逻辑是,您允许图像超出您选择的边界并渲染然后计算x位置并得到它回到里面。

显然,您需要计算边界,并基于此,在渲染之前决定新的 X 和 Y 是什么。

您可以创建一个名为calculatePosition的方法,它接受用户的输入(x,y),然后设置 Sprite 位置。

将 isTouched() 编辑为

calculatePosition(Gdx.input.getX() - offsetX, (Gdx.graphics.getHeight() 0 Gdx.input.getY()) - offsetY);

然后将其添加到您的代码中:

private void calculatePosition(float x, float y) {
float minX = 0;
float maxX = Gdx.graphics.getWidth() - sprite.getWidth();
float minY = 0;
float maxY = Gdx.graphics.getHeight() - sprite.getHeight();

float newX = Math.min(maxX, Math.max(x, minX));
float newY = Math.min(maxY, Math.max(y, minY));

sprite.setPosition(newX, newY);
}

关于java - 避免图像超出屏幕(Android)(libGDX),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38030379/

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