android遊戲開發架構libgdx的使用(六)–演員和演出

來源:互聯網
上載者:User

本文使用的libgdx是0.92版本,和現在的最新版可能有一些不一樣的地方。全文內容僅供參考。

上一篇說到UI,然後之前說到舞台,現在我們可以很輕鬆的構建一齣戲了。

因為actor類在繪製是以x,y值為基準,所以我們可以通過控制x,y值變化演員的位置,但是演員的其他效果需要配合Action類進行操作。

Action類是一個抽象類別,所有的具體實現都在com.badlogic.gdx.scenes.scene2d.actions包中。

而包中的類依功能而言可以分為兩類:

  1. 控制Action
  2. 表現Action

控制Action沒有直接表現效果,它操作的對象是表現Action。

比如Delay。

表現Action就是直接的表現效果,繼承自AnimationAction,操作對象是Actor。

比如MoveTo。

現在挨著說吧:

控制類:

Delay $ (Action action, float duration)

  

延遲duration秒執行action。

Forever $ (Action action)

  

一直執行action。

Parallel $ (Action... actions)

  

並行(同時)執行actions。

Repeat $ (Action action, int times)

  

重複action times次。

Sequence $ (Action... actions)

  

按順序執行actions。

Remove $ ()

刪除所有Action。

表現類:

FadeIn $ (float duration)FadeOut $ (float duration)

  

淡入淡出效果

FadeTo $ (float alpha, float duration)

  

duration秒改變至alpha。

MoveTo $ (float x, float y, float duration)MoveBy $ (float x, float y, float duration)

  

用duration移動到x,y處。

RotateBy $ (float rotation, float duration)RotateTo $ (float rotation, float duration)

  

用duration秒旋轉rotation度。

ScaleTo $ (float scaleX, float scaleY, float duration)

縮放x到scaleX,y到scaleY,用時duration秒。

一個個寫例子太麻煩了,而且實際運用中也多是多個組合運用,下面來看一個綜合性的樣本:

我們的主角是

通過action的組合實現閃爍,飛動,旋轉等效果。

代碼如下:

package com.cnblogs.htynkn.listener;import com.badlogic.gdx.ApplicationListener; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.GL10; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.Texture.TextureFilter; import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.scenes.scene2d.Action; import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.actions.FadeIn; import com.badlogic.gdx.scenes.scene2d.actions.FadeOut; import com.badlogic.gdx.scenes.scene2d.actions.MoveBy; import com.badlogic.gdx.scenes.scene2d.actions.MoveTo; import com.badlogic.gdx.scenes.scene2d.actions.Parallel; import com.badlogic.gdx.scenes.scene2d.actions.Repeat; import com.badlogic.gdx.scenes.scene2d.actions.RotateTo; import com.badlogic.gdx.scenes.scene2d.actions.Sequence; import com.badlogic.gdx.scenes.scene2d.actors.Image;public class FirstGame implements ApplicationListener {    private Stage stage;     private Texture texture;    @Override     public void create() {         stage = new Stage(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(),                 true);         texture = new Texture(Gdx.files.internal("star.png"));         texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);         float duration = 4f;         int maxwidth = Gdx.graphics.getWidth() - texture.getWidth();         int maxheight = Gdx.graphics.getHeight() - texture.getHeight();        for (int i = 0; i < 20; i++) {             Image image = new Image("star" + i, texture);             image.x = MathUtils.random(0, maxwidth);             image.y = MathUtils.random(0, Gdx.graphics.getHeight()); //隨機出現             Action moveAction = Sequence.$(MoveTo.$(MathUtils.random(0,                     maxwidth), MathUtils.random(0, maxheight), duration / 2),                     MoveBy.$(MathUtils.random(0, maxwidth), MathUtils.random(0,                             maxheight), duration / 2)); //移動方向和地點隨機             Action rotateAction = RotateTo.$(360, duration); //旋轉             Action fadeAction = Repeat.$(Sequence.$(FadeOut.$(duration / 20),                     FadeIn.$(duration / 20)), 10); //閃爍,重複10次             image.action(Parallel.$(moveAction, rotateAction, fadeAction)); //所有action並行             stage.addActor(image);         }         Gdx.input.setInputProcessor(stage);     }    @Override     public void dispose() {         texture.dispose();         stage.dispose();     }    @Override     public void pause() {         // TODO Auto-generated method stub    }    @Override     public void render() {         Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);         stage.act(Gdx.graphics.getDeltaTime());         stage.draw();     }    @Override     public void resize(int width, int height) {         // TODO Auto-generated method stub    }    @Override     public void resume() {         // TODO Auto-generated method stub    }}

效果(圖片有點大...多等等):

其實每個action的用法都很簡單,主要問題是怎麼組合排列來顯示一種符合需求的效果。

我發現libgdx的更新不是一般快,每天都有幾個版本的。那個通過檔案配置UI樣式讓我覺得非常有意思,但是具體操作中有諸多問題。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.