gpt4 book ai didi

java - Libgdx 对图像的操作应用于整个 Actor

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

我正在尝试使图像淡出然后淡入,这是有效的,但背景图像也会淡出然后淡入此外,当我应用旋转操作(已注释)时,尽管我将其放在事件 Touchup 上,但它仅旋转图像一次,而淡入和淡出应用于每次触摸,但淡入淡出应用于图像和背景:在这里我在此类中应用操作:

   public class MainButtons {
public Viewport viewport;
public Stage stage;
public boolean centerPressed;

public Image fire;
public Image center;
public Sound flap;

public OrthographicCamera camera;
public static Table table;


//Constructor.
public MainButtons(SpriteBatch spriteBatch) {
camera = new OrthographicCamera();
viewport = new StretchViewport(KidTele.V_WIDTH,KidTele.V_HIEGH,camera);
stage = new Stage(viewport, spriteBatch);
//InputMultiplexer this is why only input handling from controller
flap= Gdx.audio.newSound(Gdx.files.internal("one.mp3"));
Gdx.input.setInputProcessor(stage);

fire= new Image(new Texture("cars/fire.png"));

//buttonone.setSize(10, 5);


menuTable();
defineCenter();

}
public void defineCenter()
{
center=new Image(new Texture(Gdx.files.internal("0.png")));

center.setBounds(viewport.getWorldWidth() / 5f, viewport.getWorldHeight() / 3f, viewport.getWorldWidth() / 1.5f, viewport.getWorldHeight() / 3f);
center.addListener(new InputListener() {
@Override
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
centerPressed = true;
return true;
}

@Override
public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
//center.setOrigin(center.getWidth()/2,center.getHeight()/2);
//center.addAction(Actions.sequence(Actions.rotateTo(360, 2), Actions.fadeIn(1)));
center.addAction(Actions.sequence(Actions.fadeOut(1), Actions.fadeIn(1)));
centerPressed = false;
}
});
//center.setVisible(false);
stage.addActor(center);
}
public void draw() {
stage.draw();
}
public void resize(int width, int height) {
viewport.update(width, height);
}
}

这是屏幕的代码:

public class PlayScreen implements Screen {
private KidTele game;
private OrthographicCamera gamecam;
private Viewport gameport;
private World world;
private Box2DDebugRenderer b2dr;
private MainButtons mainButtons;
private Texture background;
private Sound flap;
public PlayScreen(KidTele game)
{
this.game=game;
gamecam=new OrthographicCamera();
gameport=new StretchViewport(KidTele.V_WIDTH,KidTele.V_HIEGH,gamecam);
//stage=new Stage(gameport,((KidTele) game).batch);
background=new Texture("background2.png");
gamecam.position.set(gameport.getWorldWidth()/2f,gameport.getWorldHeight()/2f,0);
b2dr=new Box2DDebugRenderer();
world=new World(new Vector2(0,0.8f),true);
flap= Gdx.audio.newSound(Gdx.files.internal("one.mp3"));
mainButtons=new MainButtons(game.batch);
}
@Override
public void show() {

}
public void handleinput(float dt)
{

if(Gdx.input.isKeyJustPressed(Input.Keys.BACK)) {
mainButtons.stopMusic();
game.setScreen(new PlayScreen(game));
}

}
public void update(float dt)
{
handleinput(dt);
world.step(1 /60f, 6, 2);
//player.update(dt);

gamecam.update();
}

@Override
public void render(float delta) {

update(delta);
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

b2dr.render(world, gamecam.combined);
game.batch.setProjectionMatrix(gamecam.combined);

game.batch.begin();

game.batch.draw(background, 0, 0, gameport.getWorldWidth(), gameport.getWorldHeight());
game.batch.end();
mainButtons.stage.act();
mainButtons.stage.draw();
mainButtons.draw();
}

@Override
public void resize(int width, int height) {
gameport.update(width, height);
mainButtons.resize(width, height);
}

最佳答案

调用stage.draw()后,SpriteBatch可能会被设置为某种任意颜色。在你的例子中,它设置了一些来自褪色的 Actor 之一的部分阿尔法。要解决此问题,请确保在绘制背景之前调用 batch.setColor(1, 1, 1, 1),这样您就可以保证绘制背景的颜色。

图像仅旋转一次,因为您使用 rotateTo 并每次都给它相同的值。一旦它旋转到 360 度,每次你再次调用 rotateTo 时,它就已经是 360 度了,所以什么也不会发生。在您的情况下,您应该使用 rotateBy 代替。

顺便说一句,当你这样做时,你会绘制两次舞台:

    mainButtons.stage.draw();
mainButtons.draw();

关于java - Libgdx 对图像的操作应用于整个 Actor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38113003/

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