Posts Tagged ‘CS5.5’
flashでローディング処理
苦労してローディングのコード書いてみたのにローディング画面が一瞬しか見えないです。泣けます。
ロード完了後も50フレーム見えるように変更しました。
外部のswfファイルを読み込んで処理しているのですがなぜか読み込めないswfファイルが多々あります。
その辺調べないとダメですね。
読み込んでいるのは自作のエフェクトライブラリで作った処理です。
今作ってるアプリなんかで使ってます。徐々にライブラリのエフェクトを増やしていきたいですね。
This movie requires Flash Player 9
package src{
import flash.events.*;
import flash.display.*;
import flash.utils.*;
import fl.events.*;
import flash.geom.*;
import flash.net.*;
import flash.text.TextField;
import monochromebit.LocusTrain;
public class MainClass extends Sprite {
public var percentTxt:TextField;
private var _disp:Sprite = new Sprite();
private var _snake:LocusTrain;
private var _snake2:LocusTrain;
private var _pos:Point = new Point(0,0);
private var _pos2:Point = new Point(0,0);
private var _degree:uint = 0;
private var _degree2:uint = 0;
private var _loader:Loader = new Loader();
private var _playBtm:PlayBtn = new PlayBtn();
/**コンストラクタ**/
public function MainClass() {
if(stage) initialize();
else addEventListener(Event.ADDED_TO_STAGE, initialize);
_playBtm.x = CENTER_X - (_playBtm.width/2) , _playBtm.y = CENTER_Y - (_playBtm.height/2);
stage.addChild(_playBtm);
_playBtm.addEventListener(MouseEvent.CLICK, onMouseClick);
_disp.visible = false;
_disp.addChild(_snake.runFrame(_pos));
_disp.addChild(_snake2.runFrame(_pos));
}//コンストラクタ END
private function initialize(e:Event=null) {
//フレーム毎イベント
this.addEventListener(Event.ENTER_FRAME, onFrameFunc);
//ローディング画像
_snake = new LocusTrain(snakeBox);
_snake2 = new LocusTrain(snakeBox);
stage.addChild(_disp);
}//initialize END
private function onMouseClick(e:Event):void{
//swfロード開始
_loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
_loader.load(new URLRequest("http://monochromebit.com/knovlog/loaded.swf"));
//ローディングアニメ表示オン
_disp.visible = true;
//ボタン画像消去
_playBtm.visible = false;
}//onMouseClick END
private function onFrameFunc(e:Event):void{
//一つ目回転位置計算
_degree += 15;
if(_degree >= 360) _degree=0;
var angle:Number = _degree*Math.PI/180;
_pos = Point.polar(LEN,angle);
//二つ目回転位置計算
_degree2 = _degree+180;
if(_degree2 <= 0) _degree2=360;
angle = _degree2*Math.PI/180;
_pos2 = Point.polar(LEN,angle);
//座標適用
_pos.offset(CENTER_X,CENTER_Y);
_pos2.offset(CENTER_X,CENTER_Y);
_snake.runFrame(_pos);//引数が座標
_snake2.runFrame(_pos2);//引数が座標
}//onFrameFunc END
private function onProgress(event:ProgressEvent):void {
var ratio:Number = event.bytesLoaded / event.bytesTotal;
percentTxt.x = CENTER_X - 75 , percentTxt.y = CENTER_Y + 2;
percentTxt.text = (ratio*100 |0)+"%";
//ロード完了
if(ratio == 1) {
stage.addChild(_loader);
//スイープ処理
removeChild(percentTxt);
stage.removeChild(_disp);
stage.removeChild(_playBtm);
removeEventListener(Event.ENTER_FRAME, onFrameFunc);
removeEventListener(ProgressEvent.PROGRESS, onProgress);
removeEventListener(MouseEvent.CLICK, onMouseClick);
}//if END
}//onProgress END
include "../resource/snakedata.as"//LocusTrainデータインクルード
const LEN:Number = 30;
const CENTER_X:uint = stage.stageWidth / 2;
const CENTER_Y:uint = stage.stageHeight / 2;
}//classEND
}//packageEND
Live2D SDK for Flashでラスタライズするライブラリをつくってみた
This movie requires Flash Player 9
以前つくったflashに修正を加えてみました。今回紹介するライブラリを使ってます。
・クリックでモデルチェンジ
・ドラッグすると傾きます
上のflashは気にしないでください。
さて今回は前に言ったとおりLive2Dのモデルをビットマップ出力する自作ライブラリの紹介です。
Live2D SDK for Flashはベクターデータしか出力できないのですがこのライブラリを使用するとラスターデータ出力が可能になります。
以前つくったLive2Dモデルをswfに埋め込むライブラリにビットマップ出力機能を追加したものになってます。
スプライトとして受け取ったベクターデータをビットマップ化してから表示させているため通常のスプライト描画より負荷がかかるという難点があります。
//タイムラインに記述しています。 import jp.live2d.model.Live2DModel; import monochromebit.L2dUtilCls;//今回つくったクラス //自作クラスのインスタンス化 var l2dUtilCls:L2dUtilCls = new L2dUtilCls(); //モデルの入れ物 var l2dAndMod:Live2DModel; //モデルを入れるビットマップ var scrBmp:Bitmap = new Bitmap(); //MOB_LIST[xx]のインデックス番号のモデルをセット l2dAndMod = l2dUtilCls.getModel(1); //ビットマップ化したLive2Dモデルをセット //二つ目の引数は拡大縮小 0.5だと1/2 2だと2倍 scrBmp.bitmapData = l2dUtilCls.getBitmapModel(l2dAndMod , 1.5); //ビットマップを登録 stage.addChild(scrBmp);
こんだけです。とっても簡単です。
今回つくったクラスの中身
//mobファイルをバイナリとして組み込んでロード
package monochromebit
{
import jp.live2d.model.Live2DModel;
import flash.utils.*
import flash.display.*;
import flash.geom.*;//マトリックス用
/**
* @author knov
* 多量のMOB埋め込み活用
* ビットマップ出力
*
*/
public class L2dUtilCls{
public var l2dMod:Live2DModel;
/**コンストラクタ**/
public function L2dUtilCls(){}
//スプライトをビットマップデータ化して返す
//BitmapData型で返す必要がある
public function getBitmapModel(l2dMod:Live2DModel,reSize:Number):BitmapData{
var tmpRect:Rectangle = l2dMod.getCanvasBounds();
// 透明なBitmapDataを用意。背景を塗りつぶすため
var modBmd:BitmapData = new BitmapData(tmpRect.width*reSize ,tmpRect.height*reSize,true ,0x00000000);//関数内で作成する必要がある
//スプライト取得
var tmpSpt:Sprite = l2dMod.getSprite();
var mtxElem:Matrix = new Matrix();
mtxElem.scale(reSize ,reSize);//拡大縮小
mtxElem.translate(0 ,0); // 描画位置
modBmd.draw(tmpSpt,mtxElem,null,null,null,true); //spriteをラスタライズ
return modBmd;
}//getBitmapModelEND
//モデルを生成して返す
public function getModel(element:int):Live2DModel{
//MOD_LISTからモデルロード
l2dMod = loadBinMod(element);//○番めのmob読み込み
return l2dMod;
}//getModelEND
//バイナリからモデルロード
private function loadBinMod(element:int):Live2DModel{
var byteArray:ByteArray = new MOB_LIST[element] as ByteArray;
return Live2DModel.loadFromByteArray(byteArray);
}//loadBinModEND
include "../moblist.as"//mob登録リスト
}//classEND
}/**packageEND**/
今回もCS5でflaファイルにメインコードを記述しましたがクラス自体はflex環境でも使用可能です。
実行にはLive2D SDK for Flash 1.0が必要です。
▽ダウンロードはこちら
zipでやる