2010年3月17日水曜日

グラデーションの変更ツールは、「自由変形ツール」の陰に。。

Flashでグラデーションをオブジェクトに適用しようとして、なかなかツールが見つからなかったのでメモです。

ツールバーの「自由変形ツール」のオプションに「グラデーションの変形ツール」が隠れていました。
これを使えば、グラデーションも色々変更ききますね。
ありがたや。

2010年3月16日火曜日

atan2で求める角度

atan2で対辺と接辺から角度が求められることを知りました。
便利。

以下は、ActionScript 3.0 アニメーションのP63~65のサンプルから。
マウスを追従する矢印です。
atan2で求めたラジアン値から角度を求め、追従しています。
atan2、便利。

python電卓。円周率の使い方。

Flashの話題ではないですが、最近関数電卓として、pythonを使っています。
けっこう便利。
Flashでtraceを用いて計算させるのも手ですが、別に電卓としてpythonを使うのもいいな、と。

さて、今回は、ラジアン値を計算しようとして、PIを使うのに手間取ったのでメモ。

import math
を実行してから、
math.piで円周率が使えるようになりました。

以下、参考になったページ。

http://python25.blogspot.com/2009/10/blog-post.html

2010年3月15日月曜日

RSSを外部から取得するための道のり。。。(未解決メモ)

RSSを外部から取得するには、crossdomain.xmlというものが必要らしい。
今のところ、うまくいっていない。。。

yahoo.pipesというサービスを使えば、可能になる様子。以下、参考ページ。
http://chikura.fprog.com/index.php?UID=1175617938


yahoo.pipesの中の、flash developer向けのドキュメントページ。
http://blog.pipes.yahoo.net/2007/03/10/pipes-adds-flash-developer-support/

RSSの値を取得するので躓いたのでメモ

bloggerからRSSでswf上にフィードさせたいと思い、XMLを読み込ませるも、各値の取得がなかなかできず困ったので、解決メモです。

大事だったのは、namespaceの設定。「名前空間」についての設定をしてやらないと各ノードの各要素にアクセス出来ませんでした。

具体的には以下のような感じで設定。default xml namespaceとして設定してやると、その後の記述が楽です。
var ns:Namespace = new Namespace("http://www.w3.org/2005/Atom");
default xml namespace = ns;

::::::::::::::::::::::::::::::::::::::::::

で、このブログからのRSSをフィードさせ、各エントリのタイトルを取得するコードメモ。

var myURLLoader:URLLoader = new URLLoader;
var req:URLRequest = new URLRequest('http://playwithflash.blogspot.com/feeds/posts/default');
myURLLoader.load(req);
myURLLoader.addEventListener(Event.COMPLETE,loadHandler);

//namespaceを設定
var ns:Namespace = new Namespace("http://www.w3.org/2005/Atom"); 
default xml namespace = ns;

//各エントリのタイトルを取得して表示。
function loadHandler(e:Event){
    var rss:XML=new XML(e.target.data);
    for(var i:int=0;i<rss.entry.length();i++)
        {
        var tf:TextField=new TextField();
        tf.width=400;
        tf.height=100;
        tf.x=50;
        tf.y=i*30;
        tf.htmlText="■"+rss.entry[i].title.toString();
        addChild(tf);
        }
}

ただ、ネット上にswfファイルをアップすると表示されない不具合があり、現在調査中。。

2010年3月11日木曜日

スペースキー(など)が押されたら何か処理を始めたい時のやりかたメモ。

スペースキー(など)が押されたらある関数を実行、という場合のメモ。
以下のような感じ。

stage.addEventListener(KeyboardEvent.KEY_DOWN,isSpace);

function isSpace(e:KeyboardEvent){
    if(e.keyCode==Keyboard.SPACE){
        showQuestion(e);
    }
}


(それにしても、手打ちで全部やっていると、書き間違いが多い。。
escショートカットはせめて覚えなくては。。)

TextFieldにfocusを自動であてるには、stage.focus=textField_name;

入力窓に自動的にフォーカスをあてたかったのでググると英語で、
stage.focus=txt;
と書けばいい、とどこかに書いてありました。
そのままやると、すぐできた。

こりゃ便利。

2010年3月10日水曜日

やっとflash developが使えました。

いろいろやってもflash developで書いたAS3コードが以下のようなエラーを排出するのでまいってました。
Error: a target file must be specified

しかし、
http://www.trick7.com/blog/video/flashdevelop/

のビデオを拝見し、Flash CS4上でflaファイルを作り、
ドキュメントクラスのプロパティでクラス名をつけてやり、
そのクラス名でFlash Developにてクラスを書いてやると、無事いけました。

ほ!

これでやっと素晴らしい自動補完機能を使って、AS3のコーディングができます。

ありがたや。。。

へぼへぼのASコードによるswfファイルを上げておきます。 。


回転部分のコードは以下に。
         var sp2:Sprite = new Sprite();
            sp2.graphics.beginFill(0xf0f000);
            sp2.graphics.drawRoundRect(120,120,80,80,5,5);
            sp2.graphics.endFill();
            sp2.buttonMode = true;
            addChild(sp2);
           
            var centerX:int = 140;
            var centerY:int = 60;
            var radius:int = 130;
            var angle:int = 0;
            addEventListener(Event.ENTER_FRAME, onLoad);
            function onLoad(e:Event):void {
                   
                    var radian:Number=angle*Math.PI/180;
                    sp2.x = centerX+Math.cos(radian)*radius;
                    sp2.y = centerY + Math.sin(radian) * radius;
                    sp2.alpha = 0.7;
                    sp.x += 2;
                    angle+=5;
            }
(円運動させるとき、ラジアンとMath.PI,Math.sin,Math.cosって便利ですね。)

配列の中の値の検索はarrayname.indexOf();

indexOf();は便利。
値があれば、配列のindexを返し、なければ-1を返してくれる。

array.indexOf(searchElement)という書式。

数を並べてみた。



数を並べてみた。
コードは以下のような感じ。

for(var j:int=0;j<15;j++){
for(var i:int=0;i<15;i++){
var txt:TextField=new TextField();
txt.x=35*i;
txt.y=35*j;
txt.width=35;
txt.height=35;
txt.border=true;
txt.borderColor=0x000000;
var num:int=i+15*j;
txt.text=num.toString();
addChild(txt)
}
}

TextFieldとTextFormatの指定って面倒。。

AS3でテキストをテキストフィールドを使って表示させ、フォーマットも設定するのって、ちょっと面倒です。
面倒だから、以下にお試しコードをメモ。

var txt:TextField=new TextField();
var fm:TextFormat=new TextFormat();
txt.x=250;
txt.y=10;
fm.size=40;
txt.defaultTextFormat=fm;
txt.text="something";
addChild(txt);

array.splice();で配列からランダムに値を抜き出す

array.splice(a,b);
で配列から値を抜き出して、元の配列に残さない、というメソッドを初めて使いました。

配列からランダムに値を抜く、ということがしたかったので、
Math.random()を使って、乱数を生成し、splice();で抜き出せました。

便利。

2010年3月8日月曜日

mouseに追従し、拡大縮小する円。



scaleX,scaleY
mouseX,mouseY
を使用。
便利。

Timerも使った。

参考Flashクリエイターになるための教科書P213~

拡大縮小の切り替え方法は本になかったので、自分でflagを作り、Booleanでfalse,trueをscaleX<0,scaleX>1の条件分岐で変更させて実現。
Booleanで変更って、便利。

2010年3月2日火曜日

シンボルとインスタンスの扱いで悩んだこと。その2

日本地図の各都道府県をインスタンス・シンボル化し、
ドラッグ可能にしてみたら、
時々小さな島とか、湖とかがドラッグで取り残されて悩みました。

色々調べて実験した結果、
インスタンスをクリックするとシンボル自体が編集できてしまいますが、
シンボル化してある層でちゃんと全部がグループ化されていないとダメだったようです。

 

解決策は、忘れられている島のある層までクリックして降りて行って、
その島をカットし、
ちゃんとシンボルの層でペーストして配置し、グループ化しててやる、というものでした。

シンボルとインスタンスの扱いが初心者にはネックだなあ、とつくづく思ったものです。


関連する前の記事もご参考までに。
http://playwithflash.blogspot.com/2010/02/blog-post.html