Reinit_creative log Reinit_creative log rss

Reinit_creative log

about ActionScript3 and Design memo.

3D勉強中1

2010.03.02

Math

3Dを基本から勉強中なのですが、 アフィン変換が分からなくていきなりつまづきました。

で、アフィン変換を調べていくと、完全に忘却している三角関数の定理がたくさん出てきて、 これは、本格的に復習しようと思いました。

まず躓いたアフィン変換

以下の例は、角度rad回転させた時の座標を求めています。

※x0,y0は、変換前の座標
※x1,y1は、変換後の座標

x1=x0*Math.cos(rad)-y0*Math.sin(rad)
y1=x0*Math.cos(rad)+y0*Math.sin(rad)

まず、この公式が全く理解できず、ググりました。

アフィン変換を解く

アフィン変換

上図は、点Pから点Qへ回転したときの座標を求めます。
まず点Qの座標を(x1,y1)とすると、座標Qは、以下の式で求まります。

x1=Math.cos(a+b);
y1=Math.sin(a+b);
加法定理より
x1=Math.cos(a)*Math.cos(b)-Math.sin(a)*Math.sin(b);
y1=Math.sin(a)*Math.cos(b)+Math.sin(b)*Math.cos(a);
・・・式1

開店前の座標Qを(x0,y0)とすると、座標Pは、以下の式で求まります。

x0=Math.cos(b);
y0=Math.sin(b);
・・・式2

式2を式1に当てはめます。

すると以下の式になり、アフィン変換の公式になります。
x1=x0*Math.cos(a)-y0*Math.sin(a)
y1=x0*Math.sin(a)+y0*Math.cos(a)
次回は、実際のスクリプトに入っていきます。

Googleの拡張機能を入れた

2010.03.01

僕が仕事に現を抜かしている間に、GoogleChromeもver4になり、 いつの間にか拡張機能をインストールできるようになってました(遅すぎ)。 とりあえず、気になったものをインストールしてみました。

AutoPagerize for Chrome

FirefoxのAddonで言うところのAutoPagerize。これは便利。

TwitterBar

投稿のみのできるTwitterツールバー。 How to use TwitterBar

IE Tab

IEでレンダリングしてくれる。

Firebug Lite

Firebugっぽい。

Delicious Tools

Deliciousのブックマークレットを拡張した感じの機能。FirefoxのAddonには敵わない。

Proxy Switchy!

プロキシ切り替え。結構便利。

How to Proxy Switchy!

webページショット - Webpage Screenshot

閲覧サイトのスクリーンショットを撮る。自動保存機能は無し。

個人的な雑感ですが、もう少し、Web開発関係の拡張機能が充実してきたら、メインのブラウザをFirefoxからChromeに乗り換えます。モッサリ感のないChromeでのネットサーフィンは、魅力的です。


いつごろから、サポートブラウザにChromeを加えないといけないのでしょうか。 Mac版も着々と開発が進んでいるようだし、、、、。

子swf のparentプロパティについて

2010.02.28

Flasherにとってかなり初歩的な内容だと思うけど、1時間半ほどはまったのでメモ。
各コンテンツ毎にswfを分割ようとして、してハマりました。

ユーザビリティ、ワークフローを考慮して、1つのFlashサイトを制作する際に
swfファイルを分割することがあるけど、AS3で僕は、ほとんどやったことがありませんでした。(AS2の制作自体ほとんどないけど)

短納期で中規模なサイトを制作することになったので、
swfを分けて作業分担しようとした矢先のハマり。

1.子swfのparentプロパティは、親swfではない

結果から言うと、

子swfのparentプロパティ = 子swf をロードしているLoaderインスタンス

親swf = Loaderインスタンスのparentプロパティで参照
※親swf のルートに 子swf をロードしている場合

子swf から親swf にアクセスする際は、以下のコードになります。

parent.parent

2.「loader.content」はキャストする

これも当たり前のことですが、loader.contentは、DisplayObjectなのでそのままでは、子swf に設定されてある、親から呼んで欲しいメソッドをコールできません。
(なぜなら、DisplayObjectのメソッドではないから、そんなメソッドはDisplayObjectにはないよって怒られます。)

以下ソースです。
親swf : Parent.as

package  
{
import flash.display.*;
import flash.events.Event;
import flash.net.URLRequest;

public class Parent extends Sprite
{
public function Parent() { init(); }
private function init():void
{
var loader:Loader = new Loader;
addChild(loader);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, _onComplete);
loader.load(new URLRequest("child.swf"));
}
private function _onComplete(e:Event):void
{
var loaderInfo:LoaderInfo = e.target as LoaderInfo;
loaderInfo.removeEventListener(Event.COMPLETE, _onComplete);
MovieClip(loaderInfo.loader.content).init();
}
}
}

子swf : Child.as

package  
{
import flash.display.*;
public class Child extends MovieClip
{
private static var _isRoot:Boolean;
public function Child() {}
public function init():void
{
_isRoot = parent is Stage?true:false;
if (!_isRoot) {
trace("parent call"); 
trace( "parent : " + parent );
trace( "parent.parent : " + parent.parent );
trace( "parent.parent.parent : " + parent.parent.parent );
}else {
trace("スタンドアロンで実行");
}
}
static public function get isRoot():Boolean { return _isRoot; }
}
}

[出力結果]
parent call
parent : [object Loader]
parent.parent : [object Parent]
parent.parent.parent : [object Stage]

やばく忙しかったけど、最近ちょっと落ち着いたので、ハマってきたネタを小出しにしていきます。

parent call
parent : [object Loader]
parent.parent : [object Parent]
parent.parent.parent : [object Stage]

nenga2010

2010.01.03

nenga2010

あけまして、おめでとうございます。
今年も何卒よろしくお願い致します。

年齢的に、正念場な一年になりそうです。

ブログをWordPressからMovableTypeにひっそり引越ししました。(バグフィックス中)

MT4メモ

2009.11.08

最近MTを触ることが多いです。 3.3は触ったことがあったけど、4.2になってから結構いろいろ変更されてて便利になってるぽい感じ。 忘れないようにいろいろメモっておきます。

続きはコチラ
My Icon

Flash+デザインを仕事としています。
info[at]reinit.info
>>detail

レコメンド

ActionScript3アニメーション

ActionScriptアニメーション

アニメーションに関する基礎が得られる本。
コレを読んで、ASが楽しくなった。