跟我來玩IGFrame(四) GAnimator精靈動畫
各位轉載請註明出處,謝謝合作~作者:ioozhuangzi
精靈動畫,就是精靈動畫……org.ioo.igframe.sprite.GAnimator類擴充套件自GSprite類,也就是說它擁有精靈的所有屬性和方法。但它重寫了渲染方式和更新方式以實現如下圖這樣的動畫播放效果。
示例程式碼 org.ioo.igframe.samples.sample03.AnimatorTest2
這張圖是一個爆炸的效果,6x5一共30幀,圖片寬度為768x640,那麼每一幀的寬高是128x128,一共6列(行數就無所謂了,1行的也是可以的,實際播放多少跟設定的總幀數有關)。
好了,需要的引數資訊已經收集齊了。
我們來看示例程式碼的onLoad裡的如下程式碼
g = new GAnimator("/res/images/explosion.png", 6, 128, 128, 30 , 2);
最後的2代表的是每2幀播放一幀動畫。
剩下的就是呼叫render和update方法了~示例程式碼裡使用的是SpriteManager託管,為什麼可以用?說過了因為GAnimator繼承了GSprite。手工呼叫也寫了,只是註釋掉了而已。
記得別忘了要在main方法裡呼叫gFrame.autoRender(true);才能使用SpriteManager。
GAnimator的構造方法也有很多,但基本都是默認了某些引數而已:
所有的引數名稱描述如下:
// filePath圖片的路徑;columns動畫列數;
//frameWidth每一幀寬度;frameHeight每一幀高度
// totalFrames動畫總幀數;frameDelay延遲的幀數
// bufferedImage 圖片;gAnimator已存在的GAnimator
public GAnimator()//什麼都沒做,自己手工配置,後邊會將配置相關的方法
public GAnimator(String filePath, int columns, int frameWidth, int frameHeight, int totalFrames)
public GAnimator(String filePath, int columns, int frameWidth, int frameHeight, int totalFrames, int frameDelay)
public GAnimator(BufferedImage bufferedImage, int columns, int frameWidth, int frameHeight, int totalFrames)
public GAnimator(BufferedImage bufferedImage, int columns, int frameWidth, int frameHeight, int totalFrames, int frameDelay)
public GAnimator(GAnimator gAnimator, int columns, int frameWidth, int frameHeight, int totalFrames)
public GAnimator(GAnimator gAnimator)
public GAnimator(GAnimator gAnimator, int columns, int frameWidth, int frameHeight, int totalFrames, int frameDelay)
現在說說手工配置動畫相關引數的相關方法:
//init方法的引數跟構造方法幾乎一樣,就不不用多說了吧
public void init(int columns, int frameWidth, int frameHeight, int totalFrames, int frameDelay)
//以下都是單獨設定引數的方法,引數名都一樣,應該能看明白吧
public void setStartFrame(int startFrame) / public int getStartFrame()
public void setTotalFrames(int totalFrames) / public int getTotalFrames()
public void setFrameWidth(int frameWidth) / public int getFrameWidth()
public void setFrameHeight(int frameHeight) / public int getFrameHeight()
public void setColumns(int columns) / public int getColumns()
public void setFrameDelay(int frameDelay) / public int getFrameDelay()
//這個需要單獨說一下,用來設定幀幅。預設為1,就是一幀一幀的播放。
//如果設為2,就會是1,3,5,7……以加2的方式遞增要播放的幀
//實際播放的總幀數變成了原來的一半了,也就是15幀。其它的以此類推
public void setFrameDirection(int frameDirection) / public int getFrameDirection()
再來看上邊的圖片,雖然是30幀,但我們不一定完全播放所有的幀,也可以只播放其中的連續子集幀動畫,比如只播放前6幀或者從第8幀播放到第15幀。這時可以用到下面的方法來設定子動畫:
// startFrame起始幀,從0開始;totalFrames要播放的幀數
public void setChildAnimate(int startFrame, int totalFrames)
//下面這個方法有點特殊,它是用來設定某一行為一個子動畫,從0開始。
//當然也可以寫出起始幀和總幀數的方式
public void setChildAnimate(int rowIndex)
最後在說一點,預設動畫是無限迴圈播放的,如果想指定播放次數可以使用一下方法:
public void setLoop(int loop)//設定動畫播放的次數,0為無限迴圈播放
其它的可以參考GSprite相關的內容。再次說明以下,GAnimator擴充套件自GSprite類,你完全可以像GSprite一樣使用它。
GAnimator就先說到這裡,具體的使用方法您可以瞧瞧我提供的org.ioo.igframe.samples.sample03包下的示例程式碼,從中您會得到更多的GAnimator的相關用法。
本人文筆水平實在有限,看的不明白的地方還請您留言提問或者加Q群210816248~驗證:IGFrame。
補充:
org.ioo.igframe.image.ImageLoader類,
該類使用來載入圖片的工具類。提供了一些載入圖片的靜態方法。
public static BufferedImage loadBufferedImage(String filePath)
public static BufferedImage loadBufferedImage(URL url)
public static BufferedImage loadBufferedImage(InputStream inputStream)
public static BufferedImage loadBufferedImage(File file)