タイトル募集中3.0

しがないITソルジャーの雑記。

なんとなくそれっぽく見せる

今はそうじゃないんだけど,ニコニコのマイリストから動画削除するとき,シューン!って消えていくアニメーションが使われてたんだよね,昔.で,どうやって作るのかなあと思っててずっとほったらかしにしてたけど,ちょうどそれっぽいものを作る機会がきたので作ってみた.

↑使うと簡単できた.

function remove(url, id){
	
    new Effect.DropOut(id, {
		from:0.0, // 開始時透明度
		to:1.0, // 終了時透明度
		fps:60, // フレームレート
		duration: 1 // アニメーションする時間(秒)
    });

    new Ajax.Request(url, {
        method: "get",
        parameters: "foo=var" + , //必要ならパラメータ送る
        onSuccess: function(httpObj){
            //httpObj.responseText;	
        },
        onFailure: function(httpObj){
            //error
        }
    });
}

↓のサイトのサンプルを,prototype.js使ったAjaxのサンプルにぶちこんだだけだが.
http://javascriptist.net/ref_scriptaculous/Effect.DropOut.html

/(^o^)\

昨日のやつは,アホすぎるミスが原因だった.

配列の使いまわしにおける初期化し忘れ.

もうアホかと.

function ():void
{
	myListArr = []; //これを忘れてた
	var xml:XML=new XML(this.previous.data);
	for(var i:int=0;i<xml.item.length();i++)
	{
		var temp:Object = { url:xml.item[i].@pram};
		trace(temp.url);
		myListArr.push(temp);
	}
}

そもそもprogressionの動作原理を理解してないのがいけなかった.
かなり基礎的な部分で勘違いしてたので恥ずかしすぎて書くことも躊躇われるレベル(え

ページ遷移後に戻ってくるとおかしい

progressionで読み込んだxmlに入ってるurlの画像をfor文で一気にaddChildしようとしてるが,消すのがうまくいかない.
■MyHogeScene.as

rotected override function _onInit():void {
addCommand(
	//外部XMLファイル読み込み
	new LoadURL(new URLRequest("http://hogehoge/list.xml")),

	//XML解析
	//…省略…

	//画像表示
	function ():void 
	{
		for (var i:int = 0; i < myListArr.length;i++){
			myList = new MyCastSprite( { Id: "loader" + i,  url:myListArr[i].url } );
			myList.x = 200 + 100 * i;
			myList.y = 300;
			myList.alpha = 0;
			addCommand(
				new AddChild(progression.container, myList),
				new DoTweener(myList, { alpha:1, time:0.5 } )
			);
		}
	}
);
}
protected override function _onGoto():void {
addCommand(
	new RemoveAllChildren(progression.container)
);
}

これで,MyCastSpriteの_onCastAdded()中で
■MyCastSprite.as

new LoadChild( this, new URLRequest(imgURL), loader)

とやってる.

これで,とりあえず,xml読み込んだあとにフェードしながら画像は次々出てくる.
が,別のページに移動したあと,戻ってくると,前回読み込んだ画像も含めてフェードしながら出てくる(つまり,同じ画像が2枚ずつになる).
MyCastSpriteの_onCastRemoved()でnew RemoveChild(this, loader)やるとエラーでるしなあ.


簡単に画像表示できたぞ,やっほーいと思ってたら…
これは困った.

TextInputを少し改良したい

TextInputの上にうっすらと文字を出しておいて,クリックとかされると消す,というのを作ってみた.

ほんとは,

public class CustomTextInput extends TextInput

でやってたんだけど,うまくフォーカスが移らなくてあきらめた.

package
{
	import fl.controls.TextInput;
	import flash.display.Sprite;
	import flash.text.*;
	import flash.events.*

	public class CustomTextInput extends Sprite
	{
		private var input:TextInput;
		private var txt:TextField;
		
		public function CustomTextInput(str:String = "form", size:Object = 11, col:Object = 0xDCDCDC, font:String = "Verdana") 
		{
			input = new TextInput();
			
			txt = new TextField();
			txt.autoSize = TextFieldAutoSize.LEFT;
			txt.background = true;
			txt.selectable = false;
			txt.text = str;
			txt.setTextFormat( cFormat(size, col, font) );
			
			txt.x = 3;
			txt.y = 2;
			
			addChild(input);
			addChild(txt);
			
			txt.addEventListener(MouseEvent.CLICK, cOnClickHandler);
			input.addEventListener(FocusEvent.FOCUS_IN, cFocusInHandler);
			input.addEventListener(FocusEvent.FOCUS_OUT, cFocusOutHandler);
		}
		
		private function cOnClickHandler(e:MouseEvent):void 
		{
			input.setFocus();
		}
		
		private function cFocusInHandler(e:FocusEvent):void 
		{
			if (txt.visible)
				txt.visible = false;
		}
		
		private function cFocusOutHandler(e:FocusEvent):void 
		{
			if (input.text == "") {
				txt.visible = true;
			}
		}
		
		private function cFormat(size:Object, col:Object, font:String):TextFormat
		{
			var format:TextFormat = new TextFormat();
            		format.color = col;
            		format.size = size;
            		format.font = font;
			return format;
		}
		
	}
	
}

もっと基礎からやる

なんとなくしか理解できないのは基本的なことが分かってないからだよね.
ってことで,本当に基礎からやる.

ステートメント、キーワード、ディレクティブ
http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/statements.html

属性キーワード概要ってことで,

  • dynamic
  • final
  • internal
  • native
  • override
  • private
  • protected
  • public
  • static

が載ってるが,正直なところprivateとpublicくらいしか普段使わない.
というか他はよくしらない.ということでちまちまやる.

できたできた(Progression触ってみた3)

一個前の記事で

文字とか書くのはCS3上でやるのが圧倒的に楽なんだよなあ.ボタン作るのとかも.なんかうまくできないのかなあ.

と書いたけど,できた.よく考えたらライブラリに作ったボタンでActionsciptに書き出しにチェックを入れるだけでよかった.
これで,ボタンのデザインはCS3上でやって,シーンの移動とかのプログラム部分はflashdevelopで書ける.

忘れないようにメモ:
普通にライブラリにボタンにしたいMCを作成.

書き出し

プロジェクトの中にもちゃんとasを作っておく

public class MyPageBtn extends CastButton {
	/*=================================================*//**
	* コンストラクタ
	*/
	public function MyPageBtn( initObject:Object = null ) {
		super( initObject );
		// クリック時の移動先を設定する
		sceneId = new SceneId( "/index/mypage" );
	}
 	…省略…   

Progression触ってみた2

前回コンポーネント,タイムライン,クラスベースと一通りチュートリアルをこなして,とりあえず簡単な使い方だけわかったわけだけども,学会やらなにやらで忙しかったため次触るまでにえらい期間が開いてしまった.であたり前だけどほとんど忘れてて結局一からやりなおし.前回よりは早くできたけど,ダメだなああorz

今回詰まった点:
タイムラインベースでやったときに,

  • in,stop,outラベルで設定したアニメーションが動かない.
  • しかもなんか毎回座標が変わってるような…?
  • onInitでaddCommand(…);が見つからないと言われる.

こんなとこか.で,やっぱりクラスベースがわかりやすいってことでクラスベースをメインにやっていくことにした.クラスベースだとちゃんと全部動いたしでも,文字とか書くのはCS3上でやるのが圧倒的に楽なんだよなあ.ボタン作るのとかも.なんかうまくできないのかなあ.

あとはあれか,プロジェクト作るときに「flashdevelopプロジェクトを作成」にチェックいれておくとファイルの追加とか削除がCS3上でやるよりかなり楽だとわかった.

でも,flashdevelop上で追加してもCS3上では反映されてないので,右クリックからファイルの追加した.それでもCS3上でやるよりはいいかな.