我正在研究像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類 –