Blog_Rでタグ「ActionScript3.0」が付けられているもの

多量の外部画像を、一気に読み込んで、それにスムージングをかけつつ Sprite などでラッピングしておいて、ボタンとして扱ったり伸縮させたり、あとからゴニョゴニョできるようにする、というよくあるやつ。
気づいたら毎回似たようなのイチから書いてるので自分用メモ。

並べ方がとか、ドラッグ機能とか、ローディングが無いとか、はサンプルなのでテキトー。ラッピングした Sprite に名前つけてるのは、getChildByName とかで、あとからどうにでも出来るように。
もっとこうすればいいじゃないか、アッタマ悪いなぁ、というコメントなんかいただけると感涙。

wordpress で、xml( feed )を読み込んで、外部画像データを抜き出し ActionScript でゴニョゴニョしたい時の設定というのを以前エントリしたんですが、この場合吐き出される xml 内の画像パス情報は、

記事に挿入してなくても、アップロードしただけで取得される

のでご注意を。
記事に投稿された画像ではなく、その記事を作成する際にアップロードした画像がそのままデータとして吐き出されます。要するに、その記事のギャラリーにあるものが、記事に挿入されてようがされていまいが反映される、とういことになります。

僕自身、もう少し早く気づきたかった...。

ArgumentError: Error #2025

|
「ArgumentError: Error #2025: 指定した DisplayObject は呼び出し元の子でなければなりません。」
Loaderインスタンスを使いまわす時に、都度 new Loader() しないと出てくるエラー。イベントの度に new してやれば消えた。


うっかりしてるとハマるんですよねこれ。
addChild とか removeChild とか関係ない場合なのがまた。
trick7 さんが記録残してくれてて助かった(嬉
。。。。

【WP】feed設定もろもろ

|

CMS に wordpress を使う場合の、 xml ( feed ) を利用した Flash との連携について。

wordpress で投降した記事に挿入した画像データを、xml を参照して ActionScript で読み込み、操作する方法のメモ。いわゆる外部画像の読み込みを、相手が wordpress の場合どうするか、という話で、さらにここでは、画像を参照する wordpress のカテゴリを任意のものにする方法です。

任意のカテゴリからのみ xml を参照し、そのカテゴリ内の内容を ActionScript で load しようと思ったとき、 wordpress がはき出す xml は画像情報を含んでいません(厳密には設定すれば含んでいるが)。
(※任意のカテゴリの xml は、ブラウザアドレスバーで表示中のURLカテゴリ末尾に /feed と入力してやれば確認できますが、 E4X でパースするにもネームスペースとか面倒くさいし、ページテンプレートを使ってしまうと、そのページはxmlをはき出すためのページになっていまい、htmlを同時に存在させたい場合などには不向きなので Feed Wrangler を使います。)
Feed Wrangler の設定だとかテンプレートのことはググればわんさか出てくるので割愛

xml の中に、投稿記事内の画像 url を含める方法については、WebTecNote さんの記事をもの凄く参考にさせて頂きました。(実際、投稿記事画像まわりについての wordpress の情報ってなかなかコレと言ったものがなく数日嵌ってました...。)

でもって作成した テンプレート php が以下です

<?php
/*
Template Name: 任意のテンプレート名
*/
?>
<?php header('Content-Type: text/xml; charset='.get_option('blog_charset'), true); ?>
<?php echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>'; ?>
<items>
<?php query_posts('category_name=任意のカテゴリ名'); ?>
<?php if(have_posts()): while(have_posts()): the_post(); ?>
<item_list>
<?php
	echo "<title>".$post->post_title."</title>\n";
	echo "<url>".get_permalink($post->ID)."</url>\n";
	echo "<date>".$post->post_date."</date>\n";
	echo "<content>".strip_tags($post->post_content)."</content>\n";
	$attachments = get_children(array('post_parent' => get_the_ID(), 'post_type' => 'attachment', 'post_mime_type' => 'image'));
	if ( is_array($attachments) ){
		$count = count($attachments);
		foreach ($attachments as $key => $row){
			$mo[$key]  = $row->menu_order;
			$aid[$key] = $row->ID;
		}
		array_multisort($mo, SORT_ASC,$aid,SORT_DESC,$attachments);
		for($i=0;$i<$count;$i++){
			echo "<image>".wp_get_attachment_url(intval($attachments[$i]->ID))."</image>\n";
		}
	}
	$mo = null;
	$aid = null;
?>
</item_list>
<?php endwhile; endif; ?>
</items>

※使うときは全角の < を半角にしてください。 > についても。
( syntaxHighLighter ってなんか直接貼れないときあるな... )

29行目、30行目については php に馴染んでいる人目線だとどう映るのかわかりませんが、とりあえずこの2つの変数をループ抜けたと同時に初期化してます。php ド素人なのでこれでいいんだろうか。
とにかく、これしとかないと、ループ内で次のポストの走査時にエラー吐きます(これまたエラい嵌った)。

でもって吐かれる xml はこんな感じになる。


	
	<title>記事のタイトル</title>
	
		記事の単一ページURL
	
	記事を投稿した日時
	
		記事内のコメントとか
	
	<image>
		記事内で使われているフルサイズ画像のURL
	</image>
	

imageタグは、記事画像内にある画像の数だけ繰り返される。順番は投稿記事の 『 ギャラリー 』 で設定する順番に依存する。



Foundation ActionScript 3.0 Image Effects

Flash やる人ならほとんどの人がチェックしてると思うんですが friends of ED からリリースされた新書。
新書っていってももう随分経ってますが、自分がある程度読んでからエントリしようと思ってたのでこんな時期はずれなことに...。

ActionScript Animation とか読んだ人ならすらすら読めます。
内容は Flash Player 10 から新たに追加されたメソッドの説明からそれらを応用したテクニック、基本的には Bitmap 周りの内容。個人的にまだ CS3 な環境なので、それこそ Vector とかもコンパイルできないので Wonderfl やら Flex SDK 利用して、ぜ〜んぶ写経しつつ読み進めてます。今んとこ Chapter 6。

ちょっと仕事でストップしてますがもうちょっとしたらまた時間ができるので再開。3周くらいしたら Bitmap まわり、がっつり使いこなせるきがする。けどそのまえに CS4 にしなきゃな。。。

Flash で LOTO6

|

ピークもすっかり抜け、ある程度時間に余裕ができて、いろいろ復習や今後に向けた勉強とかに日々を費やしてます。

新型インフル騒ぎが起こってから、取引先にて『出社は控えるように』的なお触れが回ったり、最寄りの沿線が感染確率高いと想定されたりで、おおむね自宅で引きこもった生活してるのでだんだん滅入ってきます。(と言いつつゴルフの打ちっ放し行ったり洗車行ったりの気晴らしはしてますが。)
そんな状況なんだから、以前から常々言っているこのブログのデザインをすりゃぁいいものを、なんかそちらに気が向かず、デザイン骨子を制作している psd ファイルだけが時折更新されてます。

な中、「あーロトでもパーっと当たらんかなー」とASでロト6ナンバー予想プログラムを書いてみた。ジェネレーターなんていうほどたいしたモンではないんですが。twitterで随分前につぶやいてたネタです。
※パパッと数分で作ったのでこまかい " あしらい " は無視。



CREATEボタンをクリック。
43の数字から無作為に抽出する乱数の発生を、日頃お世話になり倒しているASに頼ろう、て話です。傾向とか余計な誘導をしちゃうと " AS頼み " というコンセプトから外れるので、乱数はなんの手も入れず素直に発生させてます。なのでさすがに『これはありえんだろー』という組み合わせも出てくるので、そこは何回かボタンをクリックして、『お、これならありそうだな』という組み合わせを好きなように選んで。

来週から購入してみる。もしこれを試した方で当選した方がいらっしゃったら、コメントくださいw。

あぁ、それよりこのブログのswf貼り付け、swfObjectのバージョンが古いまんまだなぁ...。

Sound もろもろ

|

久々のエントリです。
ピーク抜けたり、色々と"端末の前に座ってられない状況"に遭ったりで実務から少し遠ざかってましたが、年始から水面下で進んでいた案件がやっと動き出し、1ヵ月ほどの実務ブランクにも『こんなに勘が鈍るモノなのか!』と驚きつつ、締め切り目前でブルってます。

昨夜ハマってたのが Sound まわり。

ムービー全体をコントロールする再生・停止ボタンから、ランダムに1ループだけ再生されるエフェクト音のために用意した SoundChannel に対して、一時停止機能をつけようとしてました。

ユーザーが任意に一時停止ボタンを押したとき、まだその SoundChannel で何も再生されてない場合、 SoundChannel を参照すると、当然ながら、 null にアクセスできない、と怒られる。けど、任意の SoundChannel にSoundデータを"再生させずに"保持しとくことができない。
さらに、 SoundChannel.position は読み取り専用なので、例えば

var _sndCh:SoundChannel;
_sndCh.position = 0;
みたいな真似は出来ない。

さーこまった、てことで無理くり編み出した方法は、無音で超短いダミーサウンドを一回再生しとく、て方法。

var _sndCh:SoundChannel;
// ライブラリ内のリンケージよりダミーサウンドを読み込み
var _dammy:Sound;

_dammy = new Dammy();
_sndCh = _dammy.play(0,1);

これでひとまず、まだエフェクト音が再生されてない状態でも、SoundChannel.stop() しても怒られない。

でもこの方法だと、SoundChannel.position に、ダミーサウンドの長さ(ミリ秒)の値が格納されているので注意。(Soundデータって、再生が終わったら一番最後で停止してるんですね。先頭に戻るという先入観を勝手にもってて余計にハマった。)

でもって一時停止と、停止した時点からの再生は

// 再生するサウンド
var _snd:Sound = new Sound();

// 停止位置を保存しておく変数
var pausePosition:Number;

// 一時停止
_sndCh.stop();
pausePosition = _sndCh.position;

// 再生
_sndCh = _snd.play(pausePosition);
↑実際いま進めてる案件では、エフェクトサウンドが何種類もあるので、どのサウンドがなったか、みたいな条件分岐もあったりでもうちょっと複雑になると思いますが骨子はこんな。



確実に、もっと単純かつスマート方法があるんだろうとは思ってますよもちろん(無念)。

Flash Math & Physics Design

|

なんだかピークも過ぎ去った感がありまして。
まずいなぁ、例年はなんだかんだで春先まで忙しいんだけどなぁ。
不況の波、てやつですね。

そんな感じなんで、確定申告書類ももう作成し終えました。
来週の月曜日になったら、サクっと提出しに行こう。
e-taxというシステムを利用すると、オンラインで提出まですべて完了できるんですが、どうも信用がないというか、一生懸命作った書類なので自分の手でしっかり税務署に出したい、という感覚があって、自分はe-taxは使わない派です。でもオンラインの確定申告書類作成コーナーは使ってます。収支内訳書さえがんばれば、あとの計算などは全部自動でやってくれるのでこれは助かる。

まぁまぁ、そんな話はおいといて。
そんな感じで時間に余裕が出てきたので、ちょっと前にamazonでポチってたFlash Math & Physics Design:ActionScript 3.0による数学・物理学表現[入門編] を読み進めてます。読み進めてるというか、写経してるというか。
掲載されているサンプルはこちらで見ることが出来ます。

flash_mpd.jpg

装丁というか表紙デザインがいい感じ。学術書チックでw
もちろん内容もいい感じですよ。ただ、一切合切をScriptで表現、つまりdrawとかbeginFillとかでオブジェクトもScriptで作る、というほどのガチガチScriptではなくて、あらかじめ作ったオブジェクトをリンケージ、といった設定まではFlaファイルでやっておいて、モーションの部分はクラスファイルを書いて、という形式です。その辺りは賛否両論あるかもね。
うれしいのは、practiceフォルダ。サポートサイトからダウンロードできるデータの中に、掲載されているサンプル達のソースファイルが収録されていて、各サンプル内のpracticeというフォルダの中に、前述のFlaファイルだけが格納されている。なので、写経なりカスタムしたクラスファイルを自分でこのフォルダの中に作って、自分の書いたクラスで動作確認ができる。そんな感じで、ActionScript 3.0 アニメーション と併せて熟読すれば、とりあえずAS3でのスクリプトアニメーションはひととおりマスターできると思う。

でもこういうのって反復が大事というか、個人的に、なかなか日々の業務がこういうタイプのスクリプトばっかり、というわけにはいかないので忘れがちです。何回も読み返して、写経しまくって、て感じで過ごしていこうと思う、まだまだ寒い冬の日。

AS3からJavaScriptを呼び出してウィンドウを開く、 というごくごくベタな連携でまたハマった。ちくしょう。

少し前の記事で、externalInterface.callを使うときは、swfを貼ってるdivのidに"external"を加えるといいみたい、みたいなことを書きましたが、それってSWFObject1.5系だけでしょ、てことで、SWFObjct2.xに乗り換えて以降は、好きなid名をつけてたんですが、『 W i n I E で の み 』、またウィンドウが開かない、という現象に見舞われた。

ということでwmode変えてみたり、swf貼ってるdivのid名変えてみたり、javascriptをhtmlじゃなくてもうASのハンドラ内に書いてみたり、いろいろやってみましたが、

「オブジェクトでサポートされていないプロパティまたはメソッドです」

とか怒られたり、そりゃまぁ怒りにうち震えながら、最後にwindow.openの第2引数に"_blank"と入れたらうまくいきやがった。

納得いかんから余計腹立つー!

そんなこんなでおさらい

// html
function hogelink()
{
    window.open('http://www.hogehoge.com','_blank');
}

// AS
btn.addEventListener(MouseEvent.CLICK, onClick);
function onClick(e:MouseEvent):void
{
    ExternalInterface.call("hogelink");
}

SWFObjectとかもろもろメモ

|

あとでじっくり読むメモ。
windowフィットとかwmodeとか。
web dimension makerさんのRSSをきっかけに、自分ももう一度ちゃんと理解を深めたいってことで。

やっと swfobject2.1 を試してみた。

続・swfobject で flash を Window 内に全画面表示

IEのFlash Playerが遅い件と、wmodeとの悩ましい関係

FLASHのFPSを正常に

いったん自分なりに無難なとこに落ち着いちゃうと、ベストを模索するのを怠っちゃってだめだな。ここらでもう一度再構築。

ちょっとハマったのでメモ。
表示リスト上のオブジェクトを一斉に削除しようとして↓みたいな感じで書いたら

function removeDisplayList(container:DisplayObjectContainer):void
{
	for (var i:uint=0; i < container.numChildren; i++)
	{
		container.removeChildAt(numChildren - 1);
	}
}

なんかへんな消え方する。
なんとなく規則性があるんで trace してみたら、リスト番号が一つ飛ばしにremoveされてる。なんでじゃー?と思って調べてみたら条件文に numChilren 直接いれちゃうと、削除していくそばから numChilren 自体が減ってっちゃうからだった。考えてみればそうだ、確かに。
ということでfor文の前で一旦総数を変数に保存しとけばいい、ていうまた素人な感じ。

function removeDisplayList(container:DisplayObjectContainer):void
{
	var num:int = container.numChildren;
	 for (var i:uint = 0; i < num; i++)
	{
		container.removeChildAt(numChildren - 1);
	}
}

特定のMovieClipを識別

|

リンケージ設定したライブラリ内のMovieClipを動的にドバッと生成した場合の、任意のMoveClipインスタンスを特定してやる方法。

意外に、ドンピシャで答えてくれてるブログとかが少ないのは、すなわち自分の理解度の低さを物語っているのだろうと涙目でエントリ。

仮にリンケージ名"Block"と名付けたMovieClipを、
横4列、縦3行に並べて、そのなかから特定のMoveClipを探すとする。

// "Block"の天地サイズ、縦横60
var w:uint = 60;
var h:uint = 60;

// 生成するインスタンス名
var block:MovieClip;

// 生成したインスタンスに割り振るID
var id:uint = 1;

for(var i:uint = 0; i <= 2; i++)
{
	for(var j:uint = 0; j <= 3; j++)
	{
		block = new Block();
		addChild(block);
		block.x = j*w;
		block.y = i*h;
		block.name = String(id);
		id++;
	}
}

/*
blockのname変数に、1から始まるidが振られているのを手がかりに
例えば2段目の左から2番目、つまりidでいうと6にあたるMovieClipを特定
*/

var target:MovieClip = MovieClip(getChildByName("6"));
target.alpha = 0;

MovieClipボタンのhitArea

|

AS3になってから、hitAreaの扱い方がすこし面倒くさくなったなぁ。
設定したhitAreaよりも上のレイヤーにMovieClipが重なると、hitAreaのマウス反応が拒否されて、その瞬間に"MOUSE_OUT"な状態になる。
つまり、MOUSE_OVER時にそのMovieClipボタン内でMovieClipアニメーションをつけたりする場合、そのアニメーションの動きによっては前述のような具合でMOUSE_OVERが解除されてしまう。
てことで、MovieClipボタンが内包しているMovieClipたちに、マウス反応させなきゃいいので

btnMovieClip.mouseChildren = false;

としておけば、純粋に、設定したhitAreaにのみ反応するようになる(要するに内包するMCからのバブリングが一切なくなる)。

...というのをついこないだ突き止めて、AS3触り始めの頃の数案件について、悔しい気分になりました、という話。
"mouseChildren"の存在に気付いてなかったorz

小一時間はまったのでメモ。

親swfに外部swfを読み込んで、その外部swfから親に記述されている関数を呼び出すには、てことで。

外部swf読み込み系って、読み込んだ外部swf自体の消去を親にやってもらう、ていう考え方自体どうなんだろう、て常々思ってるけど検証はいずれ暇になったら。
というかこの外部swfから親swfの関数呼び出しにしたって、なかなかベストプラクティス的な情報がなくて苦労したよ、低知識者としては...。

/* ----- 読み込む親swf ----- */
//子swfから起動する関数
function oyaFunc():void
{
      //処理
}

/* ----- 読み込まれる子swf ----- */
var ld:Loader = loaderInfo.loader; 
var mainTimeline:MovieClip = ld.root as MovieClip;

//親で設定されている起動したい関数
function hogeChild():void
{
      mainTimeline.oyaFunc();
}

子swfの中で loaderInfo.loader; でもって自分の立ち位置をはっきりさせつつ、親のタイムラインを参照してやるわけですか。一気に色んなFLASHerブログ漁っていつの間にかこう至った。

parentの変数や関数の参照

|

まだまだ不慣れだなぁ。メインのタイムラインに配置したmcの中から、メインのタイムラインで宣言した変数や関数を参照しようとして一瞬ハマった。

ActionScript2のクセで、

//メインタイムライン
var hoge:uint = 0;
//配置したmc内
trace(this.parent.hoge);

とかやったら、コンパイラに「型が違うのであーだこーだ」と怒られた。

一旦parentを変数として宣言してやればいいみたい。

//メインタイムライン
var hoge:uint = 0;
//配置したmc内
var _parent:Object = this.parent;
trace(_parent.hoge);

関数についても同様。

//メインタイムライン
var hoge:uint = 0;
function hogehoge():void
{
    trace(hoge);
}
//配置したmc内
var _parent:Object = this.parent;
_parent.hogehoge();


-------- 追記 -------

というかそんなことしなくてもキャストしてやればいいのか。

//メインタイムライン
var hoge:uint = 0;
function hogehoge():void
{
    trace(hoge);
}
//配置したmc内
MovieClip(parent).hogehoge();

ExternalInterface系とSWFObject1.5

|

自分用にメモ。

ExternalInterfce.call やらなんやらで JavaScript といちゃいちゃする場合は、 embedするDIVのid名とSWFObjectの第2引数に"external"と先頭に記述。
※但しそれぞれexternalの後に続く文字列はユニークなもの。


<div id="external◎">
<script type="text/javascript">
	var so = new SWFObject("hoge.swf", "external★", "300", "300", "9", "#ffffff");
	so.addParam("allowScriptAccess","always");
	so.addParam("wmode","transparent");
	so.addParam('menu', 'false');
	so.write("external◎");
</script>

とりあえずWinのIEでデバッグ表示してるとスクリプトエラーに出られて困った時に これやったら止んだ。

初めてのActionScript 3.0

|

firstas3.jpg

初めてのActionScript 3.0

初めての、なんて謳ってますが初めての人には若干敷居の高い内容じゃないかなぁこれ。というか逆に、ある程度学んできた人にとっても十分有用な本(だと思います)。若干小さい字、要するに情報量多め。大事なことが沢山詰め込まれてる。

てか要するに個人的には良書!買って損なし!

配列シャッフル

|

前回に続いて過去のAS2クラスをAS3に書き換えた。
整数を投げたらそれを配列にしてシャッフルして返すクラス。

理解が浅く、なぜextends MovieClipしないといけないのか分からない...。デバッガに怒られまくりながら、こんな感じになりました。有識者にご指摘頂ける日を待ち望みつつとりあえず晒しとく。

package com.nrd_studio
{
	import flash.display.MovieClip;
	
	public class OpArray extends MovieClip
	{
		private static var _max:uint;
		private static var _a:Array = [];
	
		public static function shuffle(n:uint)
		{
			_max = n;
			_a = makeArray();
			return xShuffleArray(_a);
		}
		
		private static function makeArray():Array
		{
			for( var i:uint = 0; i < _max; i++)
			{
				_a.push( i + 1);
			}
			return _a;
		}
		
		private static function xShuffleArray(arr:Array):Array
		{
			var i:uint = arr.length;
			while(i--)
			{
				var j:uint = Math.floor(Math.random() * (i + 1));
				var t:uint = arr[i];
				arr[i] = arr[j];
				arr[j] = t;
			}
			_a = [];
			return arr;
		}
	}
}

オブジェクトをnew、とかしたりしなくてもサクっと結果が返せるので楽チンかと。

var a:Array = OpArray.shuffle(20);
trace(a);
//出力:3,16,14,19,5,8,2,7,6,20,9,15,10,4,18,11,17,12,1,13

AS2版をむかーし晒したんですがそれをAS3に作り替えた。
ただ単純にタイムラインを止めておいて、設定した秒数後にまた走らせるだけのクラス。世間ではいろんな高機能クラスライブラリを公開している方々が群雄割拠する中、どうなんだろう、これ。

でも気にしない。



package com.nrd_studio
{
	import flash.utils.Timer;
	import flash.events.TimerEvent;
	import flash.events.MouseEvent;
	import flash.display.MovieClip;
	import flash.display.SimpleButton;
	
	public class Staytime extends MovieClip
	{
		private static var _target:MovieClip;
		private static var _counter:Number;
		private static var timer:Timer = new Timer(0);
	
		public static function wait(target:MovieClip, counter:Number):void
		{
			_target = target;
			_counter = counter*1000;
			
			_target.stop();
			
			timer.delay = _counter;
			timer.start();
			timer.addEventListener(TimerEvent.TIMER, timerHandler);
		}
		
		static function timerHandler(e:TimerEvent):void
		{
			timer.reset();
			_target.play();
		}
		
		public static function cancel():void
		{
			timer.stop();
			timer.reset();
			_target.play();
		}
	}
}

止めたいフレームで

Staytime.wait([止めたい対象],[止めたい秒数]);

//example
Staytime.wait(this,3);

強制的に停止を解除してタイムラインを走らせたい場合は別途ボタンとか使ってcancel()メソッドを呼び出す。

btn.addEventListener(MouseEvent.CLICK, clicked);
function clicked(e:MouseEvent):void
{
	Staytime.cancel();
}

【Papervision3D】#3 texture

|

とりあえずテクスチャの貼り付けまでやってしまう。とりあえずリファレンスを軸にいろんな先人達のブログを参考にしつつ...。

気になってたViewport3Dのパラメータ、autoClippingとautoCullingについてはどうやら初期値のまま触ることは無さそうなので忘れてよさそう。

viewport = new Viewport3D(0,   //viewportWidth
						  0,   //viewportHeight
						  true, //autoScaleToStage:Boolean
						  false, //interactive:Boolean
						  );



テクスチャの貼り付けは、別途用意したjpg画像をFlash上でライブラリに読み込んでおいてリンケージしてそれをBitmapAssetMaterialで読み込んで単純にSphereコンストラクタの第1パラメータとした。単純に外部データを読み込む場合はBitmapFileMaterialを利用するらしいが、これは問題があるっぽい。画像のロードが完了する前にプリミティブの描画が始まっちゃうと、テクスチャ無視されて表示されなくなる場合があるとかないとか。重い画像データを読み込んだりする場合は、ロードの完了タイミングを計測してからプリミティブの描画、といった順序が必要になるらしい。

//texture
var material:BitmapAssetMaterial = new BitmapAssetMaterial("earthMap");
			
//material
earthBase = new Sphere(material, //material:MaterialObject3D
					   240,      //radius
					   40,   //segmentsW:int
					   40       //segmentsH:int
					   );



まぁそんなこんなでとりあえず地球。あとはシリンダーの中にすっぽり入れてしまって、シリンダーの中身に宇宙テクスチャを貼り付ければとりあえず完成なんだろうか。その前に、何やらGreatWhiteではBasicViewなるクラスがあってこれが便利らしいので、その辺りの調査が先かなぁ。まぁ仕事の合間なので歩みは遅いがちょびちょびと。

【Papervision3D】事始め#2

|

Viewportのパラメータ、viewportWidthとviewportHeightの概念がよく分からない。数値を色々変えてコンパイルしてみるも、表示結果に変化がない。調査巡回してもとりあえず0,0にしてる人が多いみたいなので、ここはひとつ盲目的に0,0で進めるか。いずれ分かる日が来るんかな。

//viewport
viewport = new Viewport3D(0,   //viewportWidth
						  0,   //viewportHeight
						  true, //autoScaleToStage:Boolean
						  false, //interactive:Boolean
						  true,  //autoClipping:Boolean
						  true   //autoCulling:Boolean
						  );

あとcameraのzoomメソッドとfocusメソッド。無設定でコンパイルした時と、zoom = 40でコンパイルした時とで球体の表示サイズが同じなので、cameraの標準倍率は40ってことかいな?
さらにfocusメソッドが絡むとまた変な感じ。単純にzoom * focus的なサイズで表示されるけど、合焦値的なパラメータではないのか。

その辺りの検証をnote.xさんがやってた。でもやっぱfocusの概念がよくわからない。← そういえば、とOOPas3.0読み直して理解した。視野角な。(P250)じゃzoomが変なのか。単焦点なのにズームできる、みたいな。そりゃピクセル等倍どうすんの、て話になるよなw

それにしても「SyntaxHighlighter」の挙動にイライラ。なんで個別アーカイブになると反映されないのかなぁ。

とグダグダ言いつつ、最終目標に関係ないが球体の回転をマウスに反応させてみた。

protected function onRenderTick(e:Event):void
{
	var xDist:Number = mouseX - stage.stageWidth * 0.5;
	var yDist:Number = mouseY - stage.stageHeight * 0.5;
	earthBase.rotationX += yDist * 0.02;
	earthBase.rotationY += xDist * 0.02;
	renderer.renderScene(scene, camera, viewport);
}

【Papervision3D】事始め

|

ピーク前にからくもAdobe CS3の Production Premiumを手に入れ、今更ながらFlashやらAfter Effectsにも本腰を入れられる環境が整った。

今までFlexSDKやらでAS3の勉強はしてたけど、やっとFlashのIDEでまともに作業できるようになってホッとした。Flash Developとか使いたいけどOSはまだ10.4.*なのでガマンガマン。AEも含めて試したいこと・試すべきこと山ほどある中、よせばいいのにPapervision3Dに手を出した。

うーん、背景黒にしたのに黒にならないわ(情けない話、wmodeをそう設定してただけでした)、読み込むたびにメッシュラインのカラーが違うわ、分からんことが多いけど、とりあえず宇宙空間に浮かんで自転する地球を表現できるまでやってみる。

そんなこんなでついでに「SyntaxHighlighter」も試してみようということで、駄コードを晒してみる。

package
{
	import flash.display.Sprite;
	import flash.events.Event;
	
	import org.papervision3d.cameras.Camera3D;
	import org.papervision3d.render.BasicRenderEngine;
	import org.papervision3d.view.Viewport3D;
	import org.papervision3d.scenes.Scene3D;
	
	import org.papervision3d.objects.primitives.Sphere;
	
	public class Main extends Sprite
	{
		private var viewport:Viewport3D;
		private var scene:Scene3D;
		private var camera:Camera3D;
		
		private var renderer:BasicRenderEngine;
		private var earthBase:Sphere;
		
		public function Main():void
		{
			init();
		}
		
		public function init():void
		{
			//viewport
			viewport = new Viewport3D(470,   //viewportWidth
									  350,   //viewportHeight
									  false, //autoScaleToStage:Boolean
									  false, //interactive:Boolean
									  true,  //autoClipping:Boolean
									  true   //autoCulling:Boolean
									  );
			addChild(viewport);
			
			//render
            renderer = new BasicRenderEngine();
			
			//camera
            camera = new Camera3D();
			
			//scene
			scene = new Scene3D();
			
			//material
			earthBase = new Sphere(null,
								   240,
								   20,
								   20);
			
			scene.addChild(earthBase);
			addEventListener(Event.ENTER_FRAME, onRenderTick);
		}

		protected function onRenderTick(e:Event):void
		{
			earthBase.rotationX += 2;
			earthBase.rotationY += 1.5;
			earthBase.rotationZ += 1;
			renderer.renderScene(scene, camera, viewport);
		}
	}
}


なぜだ。「SyntaxHighlighter」が効いてないみたい... orz

ActionScript3.0入門ノート2

|
as3inote.jpg 

どうも自分は参考書を買うとモチベーションがあがるタチのようで、 今日ちょっと立ち寄った書店でWeb Designingと一緒に購入したActionScript3.0入門ノートをペラペラ〜っと端折り読みしつつ、また少しモチベーションがムクムク。 

今ピークが徐々に始まりつつある中、どのタイミングでAS3実践投入するか悩み中。

FLASH OOP

|

oop2.jpg

第二弾がリリースされましたね。

職場近くの書店で、平積みされてた最後の一冊をギリギリで買えました。 まだザーっとしか読んでませんが、良書の香りプンプン。


oop1.jpg

前作はど〜も取っつきにくい感じがありました。印象として、方向性が放射状というか、こんなこともできるのね的な感じで。と、いろんなことを棚に激上げ。

*ActionScript3.0 アニメーション

|

音素材集を買おうと訪れたヨドバシで、またレイアウト変更をしていてイライラしていたところ、1冊だけあった「ActionScript3.0 アニメーション」。一般書店で目にすることはあまり無さそうだな、Amazonで買うか、と思っていたところだったので脊髄反射で買いました。


ActionScript 3.0 アニメーション

はっきり言うと「Making Things Move!」の英書版を読み、かつ十分に理解をしている人には必要ない本かと。さらりとAS3.0の説明に触れつつ、各コードが"package{"で括られたくらいで、内容については同じです。英書で読み切れなかった、あるいは理解しきれなかったこまかい説明を、改めて日本語でしっかり読む、という作業にはもちろん最高。
とは言えそもそも神書なので「Making Things Move!」をまだ呼んでない人は必読でしょう。

タグ

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。