我在 libgdx 中使用 scene2d 时遇到问题。我找不到任何可以让我检查演员是否被触摸的方法。我只能找到告诉我演员是被触摸还是被释放的方法。在我的游戏中,当演员被按住时,每帧都应该做一些事情,而不仅仅是在我手指上的那一刻。当我松开手指时,我想停止这些事情。
如何在libgdx中按名称获取actor?
我目前有以下ChangeListener:
ChangeListener colorPickerListener = new ChangeListener()
{
public void changed(ChangeEvent event, Actor actor)
{
//Popup Window
toolboxStage.addActor(blockWindow);
//toolboxStage.getRoot().removeActor(blockWindow);
Gdx.app.log("LevelEditorScreen", "Color Picker Selected");
Gdx.app.log("LevelEditorScreen", "HUD Width: " + HUD_WIDTH);
Gdx.input.setInputProcessor(toolboxStage);
}
};
Run Code Online (Sandbox Code Playgroud)
上面的演员是被触摸的演员.一旦触及这个特定的演员,我需要改变另一个演员的颜色.我究竟该如何以名字命名这位演员?
我想交换libGDX表中两个标签的位置.我以为我可以使用swapActors来做到这一点,但它没有做到这一点.
private Stage stage;
private Table table;
public MainScreen() {
stage = new Stage(new FitViewport(800, 480));
table = new Table(SkinManagerImpl.getDefaultSkin());
table.add("A").center();
table.add("B").center();
table.setFillParent(true);
boolean succes=table.swapActor(0, 1);
Gdx.app.log("", "success:"+succes);
table.layout();
stage.addActor(table);
}
@Override
public void render(float delta) {
// TODO Auto-generated method stub
super.render(delta);
stage.draw();
}
Run Code Online (Sandbox Code Playgroud)
成功是真的,但它仍然说"AB"而不是"BA".
是否有另一种简单的方法可以在表格内交换两个单元格或演员(意味着交换位置)?
我不知道这是不是我,但是画画让我很困惑.他们是打算保持给定的尺寸,还是有办法在其中放大图像?我知道他们可以使用ninepatch通过拉伸图像来填充某些区域,但我想缩放它伸展的图像.我使用TextButton
作为我的菜单按钮,但它们太大了,我很想知道如何缩放它们.我正在从一张地图集中检索皮肤,其中有九个图像.这是设置屏幕:
以下是我正在使用的包中的图像:
这是TextureAtlas和Skin的初始化:
buttonAtlas = new TextureAtlas(Gdx.files.internal("buttons/buttons.pack"));
buttonSkin = new Skin(buttonAtlas);
Run Code Online (Sandbox Code Playgroud)
这是菜单按钮的初始化.
TextButtonStyle textButtonStyle = new TextButtonStyle();
textButtonStyle.up = Assets.buttonSkin.getDrawable("bluebutton");
textButtonStyle.down = Assets.buttonSkin.getDrawable("redbutton");
textButtonStyle.font = font;
buttonMenu = new TextButton("Menu", textButtonStyle);
buttonMenu.pad(20.0f);
buttonMenu.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
game.fade.startFadeOut();
super.clicked(event, x, y);
}
});
Run Code Online (Sandbox Code Playgroud)
也许我可以改变我把它放在桌子上的方式,或者我如何把桌子放在舞台上?
table.add(buttonMenu).width(Gdx.graphics.getWidth()/4);
stage.addActor(table);
Run Code Online (Sandbox Code Playgroud)
作为最后的手段,我想我可以尝试创建自己的文本按钮演员,我可以缩放,谢谢你的时间.
我已经制作了我的RPG的alpha版本,现在我想实现一个带有多个标签的菜单.当你在游戏中并按下tab或escape时,我想显示一个用户界面,它将有一个带有3个按钮的条形顶部,如主菜单,技能树和库存.问题是当你切换标签时,我需要停止绘制之前选择的标签并从中禁用演员,这样当您从当前标签中点击某些内容时,它也不会单击未绘制的标签上的按钮但是它就在那里......我如何禁用演员,按钮以便我可以绘制一个新标签而不必担心当前标签与前一个标签重叠?
编辑:我想避免做多个阶段.我想有一个阶段,每个选项卡都定义在其上.
我的问题很简单.
我有一些ClickListeners添加到一个演员.我想以编程方式对它们执行click事件.
喜欢的东西myActor.performClick();
我有一个Stage处理触摸输入的类。
在Screen课堂上,我将其设置stage为InputProcessor:
stageTest = new StageTest(new ScreenViewport());
Gdx.input.setInputProcessor(stageHUD);
Run Code Online (Sandbox Code Playgroud)
但是现在我想向 Box2d 对象添加一个力,总是会发生手势输入。
public class ActSwipe extends Actor {
private int tmpPointer;
private float
tmpX,
tmpY,
deltaX,
deltaY,
rad;
protected float
forceX,
forceY;
public ActSwipe() {
this.setName("SwipeAction");
this.setTouchable(Touchable.enabled);
this.addListener(new InputListener() {
@Override
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
if(tmpPointer == 0) {
tmpPointer = pointer;
tmpX = x;
tmpY = y;
}
return true;
}
@Override
public …Run Code Online (Sandbox Code Playgroud) 我问过4天前的问题.得到了一些帮助,现在我的代码看起来像
ColorAction actionBtG = new ColorAction();
ColorAction actionGtB = new ColorAction();
SequenceAction sequenceAction;
RepeatAction repeatAction = new RepeatAction();
ShapeRenderer shapeRenderer;
Color blue = new Color(Color.BLUE);
@Override
public void create () {
shapeRenderer = new ShapeRenderer();
actionBtG.setColor(blue);
actionBtG.setEndColor(Color.GOLD);
actionBtG.setDuration(5);
actionGtB.setColor(blue);
actionGtB.setEndColor(Color.BLUE);
actionGtB.setDuration(5);
sequenceAction = new sequenceAction(actionBtG,actionGtB);
repeatAction = new RepeatAction():
repeatAction.setAction(sequenceAction);
repeatAction.setCount(RepeatAction.FOREVER);
}
@Override
public void render () {
repeatAction.act(Gdx.graphics.getDeltaTime());
Gdx.gl.glClearColor(1,1,1,1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
shapeRenderer.begin(ShapeRenderer.ShapeType.Filled);
shapeRenderer.setColor(blue);
shapeRenderer.rect(100, 100, 40, 40);
shapeRenderer.end();
}
Run Code Online (Sandbox Code Playgroud)
但它仍然有效.它会动作一次并停止.当我需要循环时.从蓝色到金色,然后从金色到蓝色.我真的很感激任何帮助,因为我只是在学习libGDX.谢谢.
我已经阅读了所有答案并编辑了我的代码,但它仍然无效:
private Actor actionManager = new Actor();
ColorAction actionBtG = …Run Code Online (Sandbox Code Playgroud) 我正在创建一个菜单(就像那个飞扬的小鸟,当你死的时候会弹出播放屏幕).我创建了一个扩展表的类,我想将表的背景设置为白色.有没有办法做到这一点?
我试图使用Action FadeOut消除一个Actor.但是,我发现没有任何动作对我的对象起作用.我的类的层次结构如下:
Actor -> MoveableObject -> Knight
Stage -> KnightGroup (Group) -> Knight
Run Code Online (Sandbox Code Playgroud)
我的骑士演员的动作根本不起作用.但是,我的KnightGroup小组的操作有效.这是我的骑士的代码:
public class Knight extends Players {
public Knight() {
setWidth(96);
setHeight(96);
setPosition(100, 90);
//Doesn't work
AlphaAction action = new AlphaAction();
action.setAlpha(0f);
action.setDuration(1f);
addAction(action);
//Doesn't work
addAction(fadeOut(1f));
addAction(Actions.scaleBy(1f, 1f));
}
@Override
public void act(float delta){
super.act(delta);
}
@Override
public void draw(Batch batch, float parentAlpha) {
batch.setColor(getColor().r, getColor().g, getColor().b, getColor().a);
batch.draw(animation[currentState], getX(), getY(), getWidth(), getHeight());
}
}
Run Code Online (Sandbox Code Playgroud)
我不能为我的生活找出问题所在.在行动MoveableObject(骑士的母公司)也不起作用.我最好的猜测是,在包装的演员Group将render在actions这些演员无效.这KnightGroup是我的代码中非常重要的一部分,我不得不做很多重构才能把它拿出来.别人可以对这个问题有所了解吗?