System4.0 のアニメーション
アニメーションといっても、用意した複数枚の画像をぱらぱらと高速で切り替えることによるアニメーションです。aviやmpgなどのムービー再生については、System4ひそひそ話に該当するスレッドがあるので、そちらの方を参照してみてください。
なお、ここでは、単純にアニメーションを実行するだけしかできないサンプルを用います。アニメーションしながら位置移動などの高度な処理をする場合は、自分でそのようなコードを組んでください。
まずは、アニメーションを実行するためのクラスです。
class DrawAnimeEasy{ public: int PosX,PosY; bool CanCtrlSkip; void Play(int StartLinkNum,int FrameCount,int FrameWait=17,int SetZ=100); }; void DrawAnimeEasy::Play(int StartLinkNum,int FrameCount,int FrameWait,int SetZ){ int nSp=SP_GET_UNUSE_NUM(); SP_SET_Z(nSp,SetZ); SP_SET_POS(nSp,PosX,PosY); int i; int st=system.GetTime(); for(i=0;i<FrameCount;i++){ SP_SET_CG(nSp,i+StartLinkNum,true); SACT_UPDATE(); if(system.GetTime()-st<FrameWait*(i+1)){ if(CanCtrlSkip && KEY_IS_DOWN(VK_CONTROL)){ //NoSleep st-=FrameWait*(i+1)-(system.GetTime()-st); }else{ system.Sleep(FrameWait*(i+1)-(system.GetTime()-st)); } } } SP_DEL(nSp); } |
さて、連続したアニメーション用のCGを作成します。BMPの連番で出力しそれをAliceCG2でリンクします。ここでは、15000番から34枚分のCGをリンクしたとします。実行方法は以下のようになります。
//アニメーションの実行 DrawAnimeEasy anime; anime.Play(15000,34); //アニメ実行され終わるとここから下が実行されます。 |
これで、この行が実行された時にアニメーションが表示されます。なお、何も指定しなければ、17ミリ秒ごと(58fps)に、Z値が100でアニメーションが行われます。変更したい場合は、Playの引数を追加します。
コントロールキーで早送りしたい場合は、Playの前に、メンバ変数であるCanCtrlSkipをtrueに指定します。左上の座標を指定したい場合は、Playの前に、メンバ変数であるPosX,PosYを指定します。