gpt4 book ai didi

java - 将 Sprite 绘制到 map 上而不是屏幕上

转载 作者:行者123 更新时间:2023-12-02 08:44:35 24 4
gpt4 key购买 nike

我正在使用 libgdx,并且我有一个平铺 map ,我想在上面绘制 Sprite 。然而, Sprite 被绘制到实际的窗口上,因此当我移动相机时, Sprite 会保持在同一位置。 ?我想让 Sprite 在 map 上移动。

这就是我目前渲染对象的方式

    @Override
public void render(float delta) {
translateCamera();

Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

camera.update();

renderer.setView(camera);

renderer.render(bgLayers);
batch.begin();

batch.draw(splayerSprite, Gdx.graphics.getWidth() / 2,
Gdx.graphics.getHeight() / 2);

batch.end();
renderer.render(fgLayers);

}

它总是最终位于屏幕中间,但是我希望能够单独移动它们,例如使用(W,A,S,D)移动相机并使用方向键移动我的播放器。然后,如果我希望相机锁定播放器,但其他方面它是免费的。

我是 libgdx 的新手,所以请耐心等待,谢谢

最佳答案

问题是SpriteBatch投影矩阵未设置为 Camera投影矩阵。这意味着 Sprite 没有相对于 Camera 进行渲染。这就是为什么相机在移动,但 Sprite 却没有;未使用正确的矩阵。

此外, Sprite 始终以屏幕宽度的一半和屏幕高度的一半进行渲染。要解决此问题,请调用 sprite.draw 。这将使用 Sprite 的内部位置。

通过 batch.setProjectionMatrix(camera.combined) 设置 SpriteBatch 投影矩阵。这将导致 Sprite 相对于相机进行渲染。

@Override
public void render(float delta) {
translateCamera();

Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

camera.update();

renderer.setView(camera);

renderer.render(bgLayers);

//here's the line that was missing.
batch.setProjectionMatrix(camera.combined);
batch.begin();

//be sure to call this instead of specifying position yourself!
splayerSprite.draw(batch);
batch.end();
renderer.render(fgLayers);

}

每当按下 WASD 时,您仍然需要将相机的位置捕捉​​到 Sprite 的位置,但这很简单。

//snap the camera to the sprite's center.
if(wasd_isDown){
float centerX = sprite.getX()+sprite.getWidth()/2;
float centerY = sprite.getY()+sprite.getHeight()/2;
camera.position.set(x,y, 0);
}

如果按下方向键,只需通过 Vector3.add 平移相机的位置 vector 像这样:

if(!wasd_isDown){
float deltaX = 0;
float deltaY = 0;
float MOVE_DIST = 10;//or whatever you need.

if(leftPressed) deltaX = -MOVE_DIST;
else if(rightPressed) deltaX = MOVE_DIST;

if(upPressed)deltaY = MOVE_DIST;
else if(downPressed)deltaY = -MOVE_DIST;

camera.position.add(deltaX, deltaY, 0);
}

这将允许相机仅在玩家使用方向键时独立移动,并允许 Sprite 根据相机的方向进行渲染。当按下 WASD 时,它还会立即将相机捕捉回 Sprite 。

关于java - 将 Sprite 绘制到 map 上而不是屏幕上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18039721/

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