演员的位置不正确--Libgdx

时间:2014-11-12 10:35:37

标签: position libgdx imagebutton scene2d

请帮助我,我把头发拉出来。

我有一个名为" HudBarView"它扩展了Group类(scene2d)。它负责在屏幕顶部绘制HUD栏(暂停按钮,分数等)。

我的另一个课程是" HUDManager"它负责游戏中的所有HUD工作,包括HUD Bar。

这两个课程非常简短且自我解释。没有什么复杂的。

现在,我目前在我的HUD栏中只有一个暂停按钮(ImageButton),但问题是 - 只有在我调整大小或暂停然后恢复屏幕后才能看到它。

这是一个描述我的问题的gif: http://i.gyazo.com/6140c4ac1ea0778e4e1afce161ea3dc0.gif

我试着用代码玩一点,我发现演员的定位是错误的。例如,如果我用这些值定义按钮的位置:

Vector2 position = new Vector2(Values.SCREEN_WIDTH-Values.Pause_Width*2,Values.SCREEN_HEIGHT-Values.Pause_Height*2);

而不是:

Vector2 position = new Vector2(Values.SCREEN_WIDTH-Values.Pause_Width,Values.SCREEN_HEIGHT-Values.Pause_Height);

它确实显示在屏幕上但位置错误,暂停/恢复后显示在正确的位置。

这是我的HudBarView类:

    package views.hud.views;

import views.renderers.HUDManager;

import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.badlogic.gdx.scenes.scene2d.Group;
import com.badlogic.gdx.scenes.scene2d.ui.ImageButton;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;

import engine.helpers.AssetsManager;
import engine.helpers.Values;

public class HUDBarView extends Group{

    private ImageButton pause;
    private HUDManager hud_manager;
    private Skin skin;
    public HUDBarView(HUDManager hud_manager) {
        this.hud_manager = hud_manager;
        initiate();
    }
    private void initiate() {
        skin = new Skin(AssetsManager.getAsset(Values.BUTTONS_PACK, TextureAtlas.class));
        pause = new ImageButton(skin.getDrawable("pause"));
        pause.setSize(Values.Pause_Width, Values.Pause_Height);
        pause.setPosition(Values.SCREEN_WIDTH - pause.getWidth(), Values.SCREEN_HEIGHT- pause.getHeight());
        addActor(pause);
    }
}

HUDManager类:

package views.renderers;

import views.hud.ParticleEffectsActor;
import views.hud.views.HUDBarView;
import aurelienribon.tweenengine.TweenManager;

import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.scenes.scene2d.Group;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Image;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;

import engine.helpers.AssetsManager;
import engine.helpers.UIHelper;
import engine.helpers.Values;

public class HUDManager extends Group {

    private Stage stage;
    private Skin skin;
    private Image text;
    private HUDBarView hudView;

    public HUDManager(Stage stage) {
        this.stage = stage;
        initiate();
        addActor(hudView);
        addActor(particles);
    }

    public void initiate() {
        skin = AssetsManager.getAsset(Values.GAME_SKIN_PACK, Skin.class);
        hudView = new HUDBarView(this);
        particles = new ParticleEffectsActor();
    }

    public Stage getStage() {
        return stage;
    }
}

这是我的游戏画面问题:

package views.screens;

import views.renderers.GameRenderer;
import views.renderers.HUDManager;
import engine.GameInputHandler;
import engine.GameWorld;
import engine.Values;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.InputMultiplexer;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.utils.viewport.StretchViewport;

/* Created by David Lasry : 10/25/14 */
public class GameScreen extends ScreenWrapper {

    private GameWorld world;
    private HUDManager hudManager;
    private GameRenderer renderer;
    private Stage stage;

    public GameScreen() {
        super();
        ScreenHandler.getInstance().getGame().getAssetsManager()
                .loadAsstes(2, this);
        world = new GameWorld();
        stage = new Stage(new StretchViewport(Values.SCREEN_WIDTH,
                Values.SCREEN_HEIGHT));
        camera = (OrthographicCamera) stage.getCamera();
        InputMultiplexer inputs = new InputMultiplexer();
        inputs.addProcessor(stage);
        inputs.addProcessor(new GameInputHandler(world.getMonkeyManager(),
                camera));
        Gdx.input.setInputProcessor(inputs);
    }

    @Override
    public void render(float delta) {
        switch (state) {
        case RUN:
            stage.act(delta);
            stage.draw();
            world.update(delta);
            break;
        case PAUSE:
            break;
        }
    }

    // Callback method that is called when the assets are loaded
    @Override
    public void assetsLoaded() {
        super.assetsLoaded();
        renderer = new GameRenderer(world);
        hudManager = new HUDManager();
        stage.addActor(renderer);
        stage.addActor(hudManager);
    }

    public HUDManager getHudManager() {
        return hudManager;
    }

    @Override
    public void dispose() {
        stage.dispose();
        ScreenHandler.getInstance().getGame().getAssetsManager().unload(2);
    }
}

我在这个问题上挣扎了近3天,我不知道是什么导致了这个问题。 我甚至打开了一个新项目,重复了相关的课程,并试图将按钮放在屏幕的右上角,这样就可以了!那么为什么它在我的实际游戏中不起作用呢?

请帮忙!

0 个答案:

没有答案