我正在研究像Candy Crush这样的游戏,并且我一直在面对用户级别升高时弹出的问题。我最近发布了一个问题,以显示在字体中弹出,并得到它解决: Unable to Draw Sprite after Camera.Update in LibGDX无法在使用吐温的Libgdx中动画精灵
但现在我想动画,使用吐温引擎弹出,它不工作的原因。我在游戏的其他部分使用了吐温引擎来使硬币反弹并消失,这与以下代码一起工作正常。
衰落动画:
plusTen = new Sprite(ten);
plusTen.setSize(1, 1);
plusTen.setPosition(object.getX(), object.getY());
Tween.set(plusTen, SpriteAccessor.ALPHA).target(1).start(game.tweenManager);
to(plusTen, SpriteAccessor.ALPHA, 0.7f).target(0).delay(0.7f).start(game.tweenManager);
弹跳动画:
sprite.setSize(1, 1);
sprite.setPosition(columnIndex, this.MAX_ROWS + 5);
sprite.setPosition(columnIndex, this.MAX_ROWS + 5);
Tween.to(sprite, Accessor.POSITION_Y, 0.8f)
.target(sprite.getY() - moveBy - 5)
.ease(Bounce.OUT)
.start(game.tweenManager);
以上两者都在工作。但是对于我在上面提到的链接中提到的弹出窗口,我想要创建像弹性(变大 - 变小 - 变小)和动画不工作的动画。
我使用下面的代码合并与链接所示的代码: Unable to Draw Sprite after Camera.Update in LibGDX
private void initLevelUpAnimation() {
Log.d("Runnable", "animation method called");
levelUp = new Sprite(levelUpBG);
levelUp.setSize(265, 180);
levelUp.setPosition(gamePlayBG.getWidth()/2 - levelUp.getWidth()/2,
gamePlayBG.getHeight()/2 - levelUp.getHeight()/2);
Tween.to(levelUp, Accessor.POSITION_XY, 3.0f)
.ease(Elastic.INOUT)
.target(50,50)
.start(game.tweenManager);
stopGameObjects = true;
}
这里是我的渲染代码()方法:
public void render(float delta) {
// TODO Auto-generated method stub
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
game.batch.begin();
game.batch.setProjectionMatrix(camera2.combined);
game.batch.draw(gamePlayBG, 0, 0);
if (gameOver != true) {
//Log.d("render------------", "render: "+ delta);
camera.update();
game.batch.setProjectionMatrix(camera.combined);
if (lineHud.size > 1) {
for (Sprite sprite : this.lineHud) {
sprite.draw(game.batch);
}
}
for (int i = 0; i < gameObjects.size; i++) {
gameObjects.get(i).draw(game.batch);
}
for (Sprite sprite : this.scoreHud) {
sprite.draw(game.batch);
}
if (stopGameObjects) {
game.batch.setProjectionMatrix(camera2.combined);
levelUp.draw(game.batch);
game.levelUpFont.drawMultiLine(game.batch, "LEVEL " + (baseLevel + 1),
(gamePlayBG.getWidth()/2) - 55,
(gamePlayBG.getHeight()/2) + 35);
game.levelUpFont.drawMultiLine(game.batch, "KEEP GOING",
(gamePlayBG.getWidth()/2) - 90,
gamePlayBG.getHeight()/2);
}
game.tweenManager.update(delta);
game.batch.end();
update(delta);
game.batch.setProjectionMatrix(camera2.combined);
}
这是我SpriteAccessor等级:
public class SpriteAccessor implements TweenAccessor<Sprite> {
public static final int ALPHA = 0;
@Override
public int getValues(Sprite target, int tweenType, float[] returnValues) {
switch (tweenType){
case ALPHA:
returnValues[0] = target.getColor().a;
return 1;
default:
assert false;
return -1;
}
}
@Override
public void setValues(Sprite target, int tweenType, float[] newValues) {
switch (tweenType){
case ALPHA:
target.setColor(target.getColor().r, target.getColor().g, target.getColor().b, newValues[0]);
break;
default:
assert false;
}
}
}
请给我你做的错误的建议。
显示你的'SpriteAccessor'类 – Aryan
Hie,@Abhishek Aryan我上面已经更新并添加了SpriteAccessor类 –