次回(2008/02/23)のF-siteセミナー概要が決まりました。
個人的にはかなり興味津々なネタばかり。
なんとしても参加せねば。
http://f-site.org/articles/2004/03/25003056.html
demo1「Flex アプリ設計のワークフロー」 講師:大雅(50分) Flexで制作したコンテンツもWebに載ると、Flashでのそれと見分けがつきません。 さてどんなときにFlexを使用するのでしょう? それぞれのツールを使い分けるポイントを交えてご説明いただきます。
demo2「初めてのFlash Video」 講師:永井勝則(50分)
オライリー社から発売中の書籍『初めてのFlash Video』は、「安価なソフトを使って説明」されており、「作ることに主眼を置いた」内容だと話題です。
今回は著者をお招きし、とくに役立つポイントをご説明いただきます。
demo3「大手Flashキャンペーンサイト構築とその仕事術」 講師:サブリン(50分)
Flashクリエイター サブリンが、大手キャンペーンサイトを制作する上での共同作業の裏側を紹介します。
キャンペーンサイトは1月末公開予定の最新作を題材にします。どのサイトが題材になるのか?も合わせてお楽しみに!
タイムラインに
↓
this.__proto__ = McExtendsClass.prototype
今さらAS2だけどこれだった・・・・・
これでMovieClip継承でいける。
しかし時代はとっくにActionScript3
[1/15]コリン・ムック「今から始める ActionScript 3.0 - WORLD WIDE TOUR 」~F-site
会社でちらほら話しがあがっていたがMac OS X “Leopard”でFileReferenceListのバグがあるらしい。しかしアップロードがらみはいろいろとバグが多いなあ(涙
Event.SELECT not being dispatched on FileReferenceList.browse selection
やーAS3はいろいろめんどくせーなー。今までとまったくやり方違うのでなんかする度に調べまくる。
そんでTimerクラスをなんとかかんとか動かせたんでメモ。
//メインタイムライン
var cTimer:TestTimer = new TestTimer();
cTimer.initStart();
//TestTimer.as
package {
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.display.Sprite;
public class TestTimer extends Sprite{
public function TestTimer(){
}
/* 3秒ごとに二回処理 */
public function initStart(){
var _timer:Timer = new Timer(3000, 2);
_timer.addEventListener(TimerEvent.TIMER, endFunc);
_timer.start();
}
public function endFunc(evt:TimerEvent){
trace("endFunc :"+ evt);
}
}
}
Max2日目。午前中は会社の会議で午後から参加。
B-5
RIA システム・デザイン概論
-エンジニアとデザイナの共存共栄 / 脱 3K指南-
以前F-siteセミナーで聞いてすごくよかった三井さんのセミナーを受講。
かなり盛りだくさんなセミナーだったけど現場的な話がいろいろ聞けて身が引き締まる思いでした。
文字入力を例に誰を大切にしているのかという話からはじまる。半角数字とか半角カタカナという注意書きはあくまでもシステム側の都合。これは仕方ない面多々あるけどその大前提はシステム側の都合をユーザーに強いてるわけで。これで注意書きを書いてるからユーザーに対して親切に作りましたみたいに思ってしまうのは単なる自己満足だし視点が違うんだなと感じた。
以下メモ
sustainable 持続/維持 可能な → どうやったら続けられか
効率だけもとめても何かが破綻する 何かを変える
お客さんを巻き込んで紙でプロトタイピング。それをデジカメで撮影し仕様書としてまとめるなどやってみたとか。
コスト-品質-スケジュール
業務アプリで必要と感じるアンケート結果
1.操作性
2.レイアウト
3.画面遷移
Web(共有) - 理解 - 動機 - 購入 - 愛着(サイトを再訪問する)
B-6
僕らはこれを待っていた! Flash ユーザに捧げる AIR 開発手法。
AIRをはじめるとっかかりとしてすごくよかった。
ソースが公開されると試せるんでいいんだけどどうなるかな。
Air Extension for Flashを使ったFlashCS3環境でのAIR開発。
これをいれるとAIR UPDATE Beta2がパブリッシュファイルに加わる。
ただセミナー後にこのExtension入れていじったけど結構なバグがある(^^;
そのへんはまた後日エントリーします。
以下不明な点もあるけどとったメモ
ムービーのデバッグでないとtraceが動かない
stage.nativeWindowとBeta2で仕様が変更
カスタムスクロールは9スライスで作ると楽
~ingの付くイベントに特長あり
ウインドウの最小サイズ。ボタン隠れないように??
ファイルI/O は同期メソッド、非同期メソッドあるよ
flash.html.HTMLControl
Htmlを表示できるDisplayObject
Stringで動的にHTML生成できる(ヒストリーバックなど)
スクロールはFlashではなくFlexではある。
ActionScriptとJavaScriptのクロススクリプトが可能。
D-7 ActionScript 3.0 とインタラクティブデザイン
thaの深津さんのセミナー。以前FlashOOPの勉強会でAJAX話聞いて以来かな。
.Flaもすごく役立ったし今回も非常にためになる内容でした。
以下メモ
○挙動単位でクラス化
移動、描画、消滅
クラスを切り出して実験用ツールを作る
○パラメータ外部化
挙動をXML化 XML差し替えで派生バージョンを作る。
○使いまわすクラスは厳格に作る。
数値計算、データ管理。
○表示部分・演出部分は柔軟性を優先して使い捨て。
○AS3高速化のメリット
3D物理シュミレーション
エフェクトやフィルター
複雑なアルゴリズム
○作りやすいAS2でテスト→うまくいったらAS3で作りこみ
B-8
Flash + Coldfusion 8 でつくる AIR アプリケーション
MAX最後のセミナーだったけど非常にがっかりする内容だった。
時間の半分がColdFusionの製品概要。有料のセミナーなんだしタイトルとえらくかけはなれていて本当がっかり。そこからColdfusion8で変わった点とか話して最後にColdFusionとFlashの相性がよいみたいな話。正直全く期待はずれな内容だった。
製品の説明ならばそういった場に行けば良いわけでちょっとひどすぎと思わざるえないなあ。実際の制作例とか見たいわけで・・
というわけで最後のイベントは参加せず新橋でFlash制作者仲間とギネスビール飲んでいろいろ話して帰宅。
会場遠いとかトイレが少ないとか融通が全然きかないとか感じることも多々ありましたが全体的にMAXは良かったと思います。
基調講演
大事なのはコンテンツの内容というケビン リンチ氏の言葉がココロに響いた。
ドコモに移転0。。Docomo2.0の話はなんとなくいまいちだった。
C-1
ActionSctipt 3.0 はじめの一歩
イベントの基本的なところまで
続きは来週のF-siteかな。
前の方に座って首が痛くなってしまった(^^;
ネットにつながらないとか会場の不備もありつつ
きっちり終わるのはさすが。
E-2
Flash による 3D 空間の創造とメカニズム
lightwaveのモデリングをリアルタイムでswfで確認してた。
XMLファイルかなんかをリアルタイムで見てるんかしら?
ちょっと時間的に省いたこともあったみたいで
できれば後20分くらい聞きたかったな
A-3
Flash Player クロスドメインセキュリティと AIR セキュリティモデル
わりと曖昧にしててその場その場で問題起きたときに
なんとかしのいでいただけにいろいろと聞けてためになった。
C-4
AS3 だけじゃない! まだまだいけるぞ AS1/2!
Flashにおけるフレームワーク、MVCなどでの開発手法。
これは受けてすごくよかった。Controllerの考え方とか最近自分が考えていたことはそんなにずれてない感じで安心。
個々のMovieClipまわりはきっちり作ろうとしたら破綻したんで割と柔軟なつくりにしててここにできるだけ力を注ぐというのも納得。
ユニクロブログパーツまた貼っておきます。
次回のF-siteセミナーの申し込みがはじまってます。
ネタはActionScript 3.0メインのスクリプトネタ。
個人的にこれはいかねばなりません。
demo1「こんなに便利!Framework」むらけん氏 (60分)制作に役立つFrameworkをまるっとご紹介します。
demo2「Adobe AIRをはじめよう!」上条@Adobe社(予定)(60分)気になるAdobe AIR!実際どうなの?何ができる?便利なの?困ったことはない?
AIRの画面を見ながら、具体的な操作をご紹介します。もちろん、疑問はAdobe社の講演者にどしどし投げちゃえます。
demo3「イベントを制する者、ActionScript 3.0を制す」野中文雄氏 (60分)Adobe MAX Japan 2007での超初心者向けActionScript 3.0セッションよりほんの少しレベルアップした内容です。
ActionScript 3.0 で仕組みとして従来と変わった部分の多いイベントの使い方を説明します。
その前にAdobeMAXもあるね。
11月は勉強月か。
先日のFileReference.uploadの件ですがActionScript3ではこんな感じになってるのでいけそうですね。
FileReference.upload(request:URLRequest, uploadDataFieldName:String = "Filedata",testUpload:Boolean = false)
AS2もFlashCS3のヘルプだと微妙にかわってるなあ・・・・
FileReference.upload(url: String , uploadDataFieldName: String , testUpload: Boolean )
AS3とAS1,2を混在させるにはAVM1Movieクラスでいけるみたい。
まだ試してないけどうまく組み込めるかな。
FileReference(FileReferenceList).uploadでFlashからサーバーへ画像アップロードの通信を行うときにIE(WinXP)だと問題ないがWinFireFoxだと投げてるCookieのデータがおかしい。(IEのエンジンで送ってるという話)。さらにMacのSafariに至ってはCookieを送っていない。
これはクライアント側だけで解決するのはむずいかなあ。。。うーむ。。
ちなみにFlashPlayer8書き出しコンテンツです。

Photobackサイト大幅にリニューアルしました。
1週間ほど前にリリースして大分落ち着いてきた感じ。
今回新しくできたMyPhotobackのFlashの制作を主に担当。
ウエデイングパークやオリジナルPhotobackの切り替えの手間改善、購入可能なPhotobackとか一覧できることで使い勝手があがればなあというところです。
プログラム的にはなるべくMVCを意識した作りで制作してみた。この作り方が良いのかとうのは正直わからないところもあるがある程度プログラムは整理できてるので機能追加や修正などはやりやすいかな。あとはある程度ドキュメントとしてまとめることは早めにやっておきたいところ。MovieClipの構成図を試しに作成中。
またAS2です(^^;
なんとなく何に使うのかわからなかった__proto__ですがヘルプを眺めててつかいどころが。
たとえばclassAからloadVarsなどのためのclassBを起動して読み込み後classAのメソッドにコールバックするとき、applyとかcall使うためにfunctionをわたすときfunctionは渡すのは当然としてもscopeで使うObjectとしてクラスの参照も渡したりしてたんだけどなんか二つも値を渡すのはアホらしい気もしてました。でもfunctionだけわたしてもsocpeはfunction.__proto__ でいけたんですねえ。。。
ということでソースはっときます。
Flash8開発にてhtmlのタグに以下をname="wmode" value="transparent"を加えたparamタグを入れるとレイアウトとか表示的に崩れる事態発生。ビットマップキャッシュをいじること(cacheAsBitmap=true)で解決したっぽい。
何度も何度も挑戦しつつなんとなくうまくいったようないかないようなMVC的にFlashコンテンツを作る試み。やってるうちのなんとなくぶれてきたり重なる使用変更などなどでぐちゃぐちゃになること数知れず。今回こそはの気持ちで作成中。今回はViewとなる部分は後でやる時間がそこそこありそうなんで
とにかく完全にVは表示的な役割にしてCとMを試行錯誤しながら作成中。今のところ手ごたえとしては良い感じでVを分離できてる感じ。ただここにデザインを乗せてどこまで演出ができるのか。やってみないとわからんなあ。flaのMovieClipの階層に依存しない作り方はある程度できてる気がするしメリットもそれなりに感じるのだがActionScriptのソースレベルで分離することに意義を感じられるとよいんだけどね。。
次回F-siteセミナーの申し込みが始まってます。
CS3が出たけど……。Flashはやっぱり絵を描いてナンボdemo1「Flash8サイト事例&CS3はこう使いたいな話」「初公開!Swift 3D V5 チラ見せ」サブリン (50分)
demo2「おしりかじり虫の作り方」うるまでるび (60分)
demo3「Flashで絵を描く」まつむら&まつばら&A.e.Suck(60分)
みんなのアニメ自慢コーナー
さっき申し込んだ時点では60番でした。
AS3で今までのボタンのような指カーソルにするにはbuttonModeをtrueにするのだったことを忘れていて悩むこと10分。
しばしこんなエントリーばかり続きそう(汗
btn_mc.buttonMode = true;btn_mc.addEventListener( MouseEvent.CLICK, clickEvent );
function clickEvent(event:MouseEvent):void{
trace("clickEvent", event);
}
FlashCS3のAS3でライブラリのビットマップにリンケージ設定するとnewで配置できるはずが
なんかキャプチャ画像のように起こられる。引数が2らしいから下の太字の数字をいれると無事登場。ちなみに数値の値は0でも100でも特に変わってない様子。
確かプレビュー版だと普通に引数なしで配置できたはずなんだがなあ。
import flash.display.Bitmap; import flash.display.BitmapData;var myBitmapData:BitmapData = new logImage(0,0);
var myBitmap:Bitmap = new Bitmap( myBitmapData );
addChild( myBitmap );
myBitmap.x = ( stage.stageWidth - myBitmap.width) /2;
trace(myBitmap.x, stage.stageWidth)
kamijoさんのブログより。
Adobe Apollo 改め Adobe Integrated Runtime (AIR) パブリックベータ開始
日本語版のFlashCS3が出る前にFlex3だとかAIRとかいろいろ情報が飛交ってますなーー
Flash8の日本語版が出る前にActionScript3ってのが前回だったけど。
いやはやこの時代の流れおそるべし。
Flash(swf)のイベントからthickbox.jsを使って前面にレイヤーを表示するにはthickbox.jsのtb_showを叩けばよろし。
ExternalInterfaceを使えば以下のような感じ。
import flash.external.ExternalInterface
this.js_btn.onRelease = function(){
ExternalInterface.call("tb_show", "テスト1","in_test.html?height=200&width=350");
}
this.js3_btn.onRelease = function(){
ExternalInterface.call("tb_show","テスト3", "1.jpg?height=500&width=660");
}
getURLなら
this.js2_btn.onRelease = function(){
getURL("javascript:tb_show('テスト2','in_test.html?height=200&width=350')")
}
ちなみにhtmlレイヤーが出てるときに背面のswfが表示されないがwmodeをtransparentの設定にして透過状態にすると表示された。
thickbox.jsのtb_showメソッドの第三引数は何に使うのか今のところわかってなかったりします(^^;

「全てのクリエイターに贈る!Creative Spirit のまとい方」
モチベーションがあがるすごく良いセミナーでした。
やっぱり「創ろう。」ですな。
次回のF-siteセミナーは5/20(2007)。次で20回目とか。

バージョンの違うFlashPlayerでチェック したいときにかなり便利なのがFlash Switcher というFirefoxプラグイン。
職場のマシンには入れていたけど
気づいたらうちのWin2000,XP,MacOSX とすべてFlash9環境になってたんで慌ててインストール。
F-site | セミナー受付開始
今年初のF-siteセミナー申し込みました。
今回は申し込みが多いみたいで申し込んだ時点で番号77でした。
マイミクの方が作った書初めパーツ超KAKIZOMEで新年のご挨拶です。
今年もよろしくお願いします!
Windows Mobile 5.0 用のFlashLite2.1をそろそろいじってみようかと。
Adobe Flash Lite 2.1 for Windows Mobile 5.0 Preview
"Windows Mobile 5.0 Smartphone" と"Windows Mobile 5.0 Pocket PC "ってのがあったけどesは後者かな
こういうの作ったことなかったからどうやるんかなと思いつつ手をつけてなかったけど思ったよりはるかに簡単だった。
さ、クラスにするか。
import flash.geom.Rectangle;
var rect:Rectangle = new Rectangle();
var sq_mc:MovieClip;
this.onMouseDown = function(){
rect.x = this._xmouse;
rect.y = this._ymouse;
sq_mc = this.createEmptyMovieClip( "sq_mc", this.getNextHighestDepth());
}
this.onMouseUp = function(){
sq_mc.clear();
sq_mc.removeMovieClip();
}
this.onMouseMove = function(){
rect.width = this._xmouse - rect.x;
rect.height = this._ymouse - rect.y;
sq_mc.clear();
sq_mc.beginFill(0xf9f9f9, 50);
sq_mc.lineStyle(0, 0xcccccc);
sq_mc.moveTo(rect.x, rect.y );
sq_mc.lineTo(rect.right, rect.y);
sq_mc.lineTo(rect.right, rect.bottom );
sq_mc.lineTo(rect.x, rect.bottom);
sq_mc.endFill();
updateAfterEvent();
}
今日はAS3はまだ手をつけて無し。ちょっとFlash8でYoutubeAPIをいじってました。
Flvって仕事で扱うケースがほとんどなかったんでいじってみたいのです。
FLVPlaybackってコンポーネントがつかうとよいのかなと思い調べるとこいつは他のコンポーネントとちがってライブラリから出すときはMovieClipのようにattachMovieしなきゃいかんらしい。
参考
live docs
とりあえず下のようにやったらflv再生始まった。クラスの中だとFLVPlaybackを型にした変数にattachMovieの返り値をいれようとするとエラーになるんだよなー。
MovieClipだとエラーにならなくてcontentPathの設定もできます。
var _mc:MovieClip = this.attachMovie("FLVPlayback", "_flv", 1);
var clip:MovieClip = this.createEmptyMovieClip("mc1", 2);
clip.onMouseUp = function (){
trace("mouseUp");
_mc.contentPath = "xxxxx.flv";
this.removeMovieClip();
}
AS3でクラスを継承してメソッドオーバーライドするときはちゃんとかかなきゃいかんのですな
ふーん
public override function hoge(){ }
先日のエントリーをもう少し簡単にしてF-siteに投稿。最初はDocumentClassのクラスで設定してたけど要点はマウスのイベントについてなんでスクリプトをタイムラインに移行。いろいろ新しいモノや変ったモノなどなどさりげなく入れたい気持ちもある反面あまりいれすぎるとわけわからなくなりそうだしバランスが難しい。まあ試行錯誤ですな。
SpriteクラスでshapeはAS3MLで出てたってこともあってMovieClipでaddChildするやつにしといた。あえてMCは円にしたのはヒットする領域も矩形判定ではないんだなーなんてふと気づいたから。 trace(xxxxx , yyyyyy)なんて新しい書き方も一応しといたのとappenText()も使ってみた。このあたりも説明したい気もしたがあまりいろいろあると混乱の元になりそうだし、また別ネタにしても良いし説明するテキスト書くのも結構時間かかるんでやめといた。といいつつダブルクリックは入れてしまった。
デビューセミナー後の宴会やmixiでいろいろな方に教えてもらったりした中でちょっと気づきました。
自分的に少々勘違いというか思い違いしてたことはActionScript3が動作する AVM2 (ActionScript Virtual Machine 2)が旧ActionScriptが動作するAVM1と比べて約10倍速いという部分。10倍速いという部分が自分の中で変に先にきてたけど速くなる部分はスクリプトの計算処理の部分。で描画処理などの部分は変わらないってことを考えるとActionScript3にすればなんでもよいというわけもない。スクリプトで描画ってのはデザイン的な限界もありそうだしさらにスクリプトででかい面積のShapeなど描画した場合って処理的に描画計算の負荷はどうなるんよって気もしてきた。ま、このへん実際自分で検証しつつ調べていく必要がありそうですが、この先の取り組み方として何が10倍早くて何が変わらないのかは正確に理解するように取り組んでいかないとなあ。
mixiの日記にもほぼ同じこと書いてますが後々の検索などはこちらに書いた方が良いかなと思うので書いておきます。エントリータグもできたし。
MouseEventにちょっとはまってしまいました。今までのFlashだとonMouseMoveとかonMouseUpとかどのMovieClip に書いてもステージの上というかSWF上であればイベント取れてたんでその感覚でやろうとShapeとかもない空のSpriteクラスにわりあててたら動かない。あれやこれややってたらどうやらインスタンスの上でのみイベントが発生するらしく最初は空だったんでヒット領域がないような状態だったみたい。 今日AS3系のblogをチェックしてたら参考になることがfladdict.netさんのところに書いてありました。
AS3メモ MouseEventについて ~ fladdict.net blog
ActionScript3デビューセミナー見に品川まで行ってきました。
AS3これからやるぞってモチベーションがあがるようになるかと思いきやいろいろ問題も見えてきてしまった。
完全に旧スタイルとAS3が分離してしまうと直感的な部分がなくなってしまいそうで。スクリプトほとんど書かないでAS3書き出しするだけでも恩恵受けるかなとも一瞬思ったけど元々描画にかかる負荷を軽減しているのがAS3が軽く動くということなのであんまり意味がないそうです。AS3で開発するには分業するときのワークフローも結構変わってきそう。まあ元々Flashの分業自体あまり確立してなかったのかもしれないですが。もともとWebの仕事なんて常に学習してないと取り残されてしまうのが常ではあるんだけど、かなり敷居も高くなって直感的なところがなくなってきた結果として面白みのあるコンテンツが減っていくかもというところがちょっと心配。これからいろいろAS3いじってみて分ることもありそうなんでもうちょっといじってみます。セミナーとは関係ないですが個人的にlocalConnection使って新旧プレイヤーでデータのやりとりとか試してみたくなってきました。
FlashOOPJapanのサイトからActionScriptについての記事があるblogへのリンクを貼ってくれてるそうなんでAS3のことを勉強するには便利そうです。
MovieClipクラスがSpriteクラスのサブクラスってことからしてもAS3ではSpriteクラスはかなり大事そうな予感。MovieClipよりSpriteのが軽いらしいんでタイムラインとか必要ない場合はSpriteクラスを積極的に使ったほうがよさ気。
[参考]
akihiro kamijo : Splite クラスと MovieClip クラス
FumioNonaka.com : Spriteクラス
F-site:AS3.0での画像読込をしてみよう
F-site:new演算子でビジュアルオブジェクトをつくる
ちょっとしたテストをしたところインスタンス生成時には階層はなくaddChildで配置して初めて階層のプロパティを持つって感じ?当たり前といえばそうなのかもだけど少々はまった。
SpriteTest.as
package {
import flash.display.Sprite;
public class SpriteTest extends Sprite{
public function SpriteTest(timeline:Object){
TraceFunc(timeline);
timeline.addChild( this );
trace("- - - - - - - - - -");
TraceFunc(timeline);
}
public function TraceFunc(timeline){
trace(null == this.parent);
trace("this.parent == timeline : " + (this.parent == timeline));
trace("this.root == timeline.root : " + (this.root == timeline.root));
}
}
}
var sTest:SpriteTest = new SpriteTest( this );
intとかuintの方がNumberより速度が速いらしい。
uint は "0 から 4,294,967,295"とのことで正の数と考えてよさそうだ。
ちなみに小数点以下は切り捨てられる様子
var tes:uint =7.5;
trace(tes);
//出力7
7.5ではなくて-1を入れたりするとやはりエラーになった。
intは"-2,147,483,648 から 2,147,483,647"だそうです。
Numberとの使い分けを意識づけるのがよさそう。
参考 akihiro kamijo int と uint
[追記]
F-siteの野中さんの記事はuintで定義して負の数使うときはマイナスつけるって感じなのかー。なるほど。
var nSize:uint = 50;
・
・
mySprite.graphics.drawRect(-nSize/2, -nSize/2, nSize, nSize);

Flash9のプレビュー版で設定をあちこちいじってたらtraceや変数のリストアップなど出力ができなくなる事態発生。
原因は上の画像にあるfilter levelをNoneにしていたことだったがちょっと時間かかり結構あせった(^^;
確認したらFlash8の日本語版にもあったがここをいじったことはなかったなあ。いまいち用途がわかりません。
先日Flash Professional 9パブリックアルファがadobeのサイトで公開されました。
しかしWindows2000ではインストールできないんですね(涙
メインマシンをWindowsXPにしたほうが良いのかなーー。。。

PicasaFlashアルバム
Picasa2で生成するXMLを使ったフォトアルバムをFlash8の勉強をかねて作ってみました。
ちょっとバグとるのにてこずった件が2つ
その1:BlurFilter
マスクをかけたmcにBlurFilterをかけたところ時々チカチカとバグのような動きになって
このピカチュー状態はまずいし、何よりプレビューしててすげー疲れるんでいろいろblurのかけ具合とか数値変えてみたが一行に治らない。ほぼ万策尽きた感じであきらめかけていたが空mc作ってblurかけてたmcとマスク用のmcを中に放り込んで、そのmaskとmc放り込んだ空mc(親mc)にたいしてblurをかけたところ現象は収まった。とりあえずいまのとここれで解決した模様。マスクをかけてたってのが怪しいけどはっきり原因は特定できてはいません。
その2:DisplacementMapFilter
このフィルター自体まだまだつかいこなせていないし直接関係してない気もするけどマウスをrolloverしてるときにDisplacementMapFilterを更新するenterframe処理を動かしマウスrolloutでenterframe停止といったものなんだが時々怪しい線が入り困った。あきらかにPCが壊れだした時の線のようで激しくかっこ悪い。FlashPlayreの限界なのかと思っていろいろ負荷削減を試みるも効果なし。いろいろ調べて「再描画領域」ってのをプレビュー画面で実行したところ無駄にBitmaDataがでかくて悪さしてた模様。とりあえずBitmapDataの幅を小さくしたところ問題は回避。これまた原因ははっきりしないし、ものによっては今回のやり方では回避できなそうな気もします。まあ、そうなったときに考えればいいか(w
ColorオブジェクトのヘルプにFlash Player 8 以降では使用しないでください。~以下略なんて書いてあるもんだからColorTransformオブジェクトをいじってみる。MCの場合はMovieClip.transform.colorTransformをいじるってことのようだけど、例えばボタンクリックで色の反転のように前の値と新しい値を比較して色を決めるときってMCの場合concatを使わなきゃいかんのかな。なんかビットマップとはちょっと書き方がかわってしまうんかな。やりたいことは一応以下のように実現できましたが。
import flash.display.BitmapData;import flash.geom.ColorTransform;
//BitmapDataのとき
var h_mc:MovieClip = this.createEmptyMovieClip("h_mc",1);
var bmp:BitmapData = BitmapData.loadBitmap("p1");
h_mc.attachBitmap(bmp,1);
h_mc.onRelease = function(){
var _color:ColorTransform = new ColorTransform(-1, -1, -1, 1, 255, 255, 255, 0);
bmp.colorTransform(bmp.rectangle, _color);
}//MoiveClipの時
mc2.onRelease = function(){
var _color1:ColorTransform = this.transform.colorTransform;
var _color2:ColorTransform = new ColorTransform(-1, -1, -1, 1, 255, 255, 255, 0);
_color1.concat(_color2);
this.transform.colorTransform = _color1;
}
次回はF-siteセミナーは2006/02/25(土)です。
なんかバタバタしてましたがもうすぐですね。
次回セミナー
で、セミナーの内容
demo1「Flashエンジニアリング-SIerとどう付き合うか-」三井英樹(野村総研)氏(60分)
demo2「粋なインターフェース作りのコツ」徳久達彦(GooGoo)氏(60分)
demo3「車目線の簡易3D」森脇裕也(しわわ)氏(40分)多分スクリプト的切り口かと
Objectを継承してるってことはクラスそのものをリスナー登録しても良いのかなと思い以下のように書いたら普通の動作しました。まあ当たり前といえば当たり前か(^^;
class test2 {
function test2(){
Stage.addListener(this);
}
function onResize(){
trace("resize")
}
} // fla var o:test2 = new test2();
ありがたいことに最近のFlash仕事はPlayer7の開発が多くてActionScript2.0もだんだん理解できてた感じ(世間的にはActionScript3.0の話題が多いので大分取り残されてる感もしなくはないけど)
クラスを作成するってのもまあそこそこ慣れてきたけど、ちょっとここ最近悩ましかったのはクラスをMovieClipから継承させるかObjectで継承させるかというところだった。特にMovieClipでライブラリのAS2.0書き出しをすると今までのAS1.0に近い間隔で便利といえば便利。MovieClip継承なんでonLoadイベントだって動くし階層も把握しやすい。ただソースを追うときはいちいちflaのライブラリ見たりするんで面倒といえば面倒、
そんなわけでObjectを継承してタイムラインで!new Class()"という感じのやり方もいろいろやっていたが、中にイベントハンドラとか使うとどうにもスコープが変ってしまいしっくりこない面が多々、、.。
という感じでしばらくの間、割と試行錯誤でMovieClip継承クラスとObject継承クラスを混在させてみたりとやってたんですが最近Delegateクラスを使いまくってかなり;Object継承クラスの形にかなりなれてきましたよ。
例えばOnEnterFrameBeaconと組み合わせてDelegaeをつかって見るとこんな感じデス。
//クラスtest1.as
import mx.transitions.OnEnterFrameBeacon;
import mx.utils.Delegate;
class test1 {
var oEf:Object;
var n:Number = 0;
function test1(){
trace("test1");
oEf = {};
OnEnterFrameBeacon.init();
oEf.onEnterFrame = Delegate.create(this, sonomamaCopyPeTTeDoutoyo_w);
MovieClip.addListener(oEf);
}
function sonomamaCopyPeTTeDoutoyo_w(){
if(n>=10){
MovieClip.removeListener(oEf);
} else {
n++;
trace(n)
}
}
}
//-----
//fla
var o:test1 = new test1();
AS2の方の XPath使ってみてますが結構便利です
自分を最上位深度に持ってくる場合これでOK。。かな
this.swapDepths(_parent.getNextHighestDepth());
onChangedのイベントはスクリプトでのTextFieldの変更では動かないらしい。ってことがFlashのヘルプに。
onChanged ハンドラは、ユーザーの操作によって変更が生じた場合にのみ呼び出されます。たとえば、ユーザーがキーボードで入力した場合や、マウスを使用してテキストフィールドの内容を変更した場合、メニューアイテムを選択した場合などです。プログラムによってテキストフィールドが変更されても、テキストフィールドに加えられる変更はコードから識別できるため、onChanged イベントはトリガされません。

前にエントリーしたと思ってて探したらなかったのでエントリー。なんかどっかにあるきもするんだが・・
デバッグしててObjectをtraceするときに出力[object Object]とかでてザケンナとか思った人むけ(^^;
Flash8メモ
Pointクラスを使うと2点の座標の計算などやってくれるみたいでちょっと便利かな。
Math関数とか苦手な場合は特に良いかなって自分のことですけど(^^;
import flash.geom.Point;
var oPoint1:Point = new Point(my1_mc._x, my1_mc._y);
var oPoint2:Point = new Point(my2_mc._x, my2_mc._y);
//1
var nDistance1:Number = Point.distance(oPoint1, oPoint2);
//2
var nx:Number = Math.abs(oPoint1.x - oPoint2.x);
var ny:Number = Math.abs(oPoint1.y - oPoint2.y);
var nDistance2:Number = Math.sqrt(nx*nx + ny*ny);
trace(nDistance1 == nDistance2);//true//2点間の間の座標を割り出す
//0.5の場合はちょうど真中
//1の場合 oPoint1の座標
//0の場合 oPoint2の座標
var itPoint:Point = Point.interpolate(oPoint1,oPoint2,0.5);
trace(itPoint.toString());
なんとなくFlash8をいじってみた
外部読み込みした画像にbitmapフィルターをかけるのかに結構悩んでしまったが
Bitmap.draw(MovieClip)
というのでOK。
mc自体はここでremoveMovieClipとかで消してしまっても画像は残ってる(Bitmapのフィルターが残っているってことかな)
Bitmap消す場合は以下の命令
Bitmap.dispose();
n-kawai Weblog~ Flash8は8/8(!?)kawaiさんのヨミによると8/8?だとか(^^; まーでてから色々調べよう。 結構解析してる人たちがいるようですが ビットマップキャッシュモードってのが便利そうでしたね。
追記
次回F-siteセミナーは8/27です
下のエントリに書いたコンストラクタの挙動だがなんか違ってるかも。
もしかするとコンストラクタは一箇所だけ動くのが正しい挙動なのかなーー
実際テストしたときは2度動いたのは確認しているけどもしかしてasoフォルダにたまるキャッシュみたいなのが悪さしてるのかなというきもしてきた。
で、そんな疑問がXPathという便利なものをいじっていてでてきたわけです
あといまいちわからないのは
myScopeというグローバル変数はstaticにしとかないとxml.onLoad内ではundefinedになってしまうのがよくわからん。
逆にXPathはonLoad外ではエラーになってしまうので引数で渡しといた。これはXPathの中みてけばわかりそうなきもするがXMLのなんかを継承しているとかいうノリだろうか?
もう一点、 myScopeにthisを代入する命令はサブクラスの方に書いておかないとオーバーライドしたはずのメソッドparseMyXMLが動かなかった。もしかするとこれはstaticにしてることが影響してるのかな。その辺も今のところよくわかりません。
だらだら書いたけどとりあえずXPathは凄く使えそうということで本日は終了
(xmlLoader.as)
import com.xfactorstudio.xml.xpath.*;
class xmlLoader extends Object{
var url:String;
var myDoc:XML;
static var myScope:Object
function xmlLoader(urlPolicy:String){
if(urlPolicy){
setLoadPolicy(urlPolicy);
}
myScope = new Object();
myScope = this;
trace("xmlLoader");
}
function setLoadPolicy(str:String){
System.security.loadPolicyFile(str);
}
function loadXML(url:String, callBack:Function, scope:Object){
myDoc = new XML();
myDoc.ignoreWhite = true;
myDoc.onLoad = function() {
callBack.apply(scope, myScope.parseMyXML.call(this, XPath));
};
myDoc.load(url);
}
//オーバーライド用
function parseMyXML(){
trace("hoge");
}
}
(xmlParser.as)
class xmlParser extends xmlLoader{
function xmlParser(urlPolicy:String){
if(urlPolicy){
super.setLoadPolicy(urlPolicy);
}
myScope = this;
};
function parseMyXML(xTarget){
var urlBlog = xTarget.selectNodes(this, "/blogIndex/@blogURL");
var titles_array:Array = xTarget.selectNodes(this, "/blogIndex/entry/@entryTitle");
var excerpt_array:Array = xTarget.selectNodes(this, "/blogIndex/entry/@entryExcerpt");
var entryId_array:Array = xTarget.selectNodes(this, "/blogIndex/entry/@entryID");
return [urlBlog, titles_array ,excerpt_array, entryId_array];
}
}(fla)
function loadInit( urlBlog:String,titles_array:Array ,excerpt_array:Array, entryId_array:Array){
var l = titles_array.length;
for (var i = 0; i < l; i++ ) {
trace(titles_array[i]);
var clip = _root.attachMovie("entryMc","entryMc"+ i, i);
clip.sTitle = String(titles_array[i]);
clip.entryId = parseInt(entryId_array[i],10);
clip.sUrl = String(urlBlog);
clip._y = clip._height * i+ clip._y+ 50;
}
}var url = "xxx.xml";
var urlPolicy = "policy.xml";
var x:Object = new xmlParser(urlPolicy);
x.loadXML(url, loadInit, this);
相変わらずクラス理解度が足りませんが
以前AS2始めた頃必要以上に処理が動いていて途方にくれてたが
なんとなく挙動がつかめてきた。
//testInit.as挙動としてはまずtestInitのコンストラクタから 継承したサブクラスSunTestInitのInitメソッドが呼ばれる testInitのInitメソッドはオーバーライドしてるので直接は呼ばれないが SunTestInitのInitメソッド内のsuper.Init()により呼ばれる。class testInit extends Object{
function testInit(){
Init("Super");
}function Init(str:String){
trace("testInit.Init() " + str);
}
}//SunTestInit.as
//testInit.asを継承
class SunTestInit extends testInit{
function SunTestInit(){
Init("sun");
}
function Init(str:String){
super.Init("Sun.Super /call=" + str);
trace("SunTestInit.Init() " + str);
}
}//fla
var o:SunTestInit = new SunTestInit();//出力
testInit.Init() Sun.Super /call=Super
SunTestInit.Init() Super
testInit.Init() Sun.Super /call=sun
SunTestInit.Init() sun
そして次にSunTestInitのコンストラクタからInitがよばれる
上記と同様Initメソッド自体はオーバーライドされてるので
処理されるのはSunTestInitの中のInitメソッド
後は上と同じような流れで処理される。
つまりコンストラクタは確実に一度動くので
二度同じ処理が繰り返されたりしていたみたいですな。
うーむ相変わらず理解が遅いぜ(涙
FlashOOP勉強会が来週あるらしい。いってみたい。
「FlashとAjaxの連携」ってきになる。
Ajaxってなんだかいまいちよくわかってないけど時々聞くし少しでも理解できればと。
「onLoadProgressがムービープレビューでうごかねー」と思ってググったら自分のサイトのblog記事がひっかかり激しく鬱になる2005年梅雨のある1日であります(涙
来年もまた忘れて同じことするんだろうか?
ちなみに外部ファイルをloadするクラスを作ってみてたです。
複数ファイルはどうするか考え中。
classにdynamicつけるとAS2のClassもAS1感覚で書ける。ただこれ多様してるとあまり自分のためにならないのかも。エラーでなくなるけどタイプミスとかも発見しにくくなるし
Test.as
dynamic class Test extends MovieClip {
function Test(str:String){
Init(str);
InTest();
}
function Init(str){
sTest = str;
nNum = 0;
trace(sTest);
trace(nNum++);
}
function InTest(){
trace(sTest);
trace(nNum++);
if(arguments[0]){
trace(arguments[0]);
}
}
}
fla 1フレーム目
var o:Test = new Test("テスト1");
o.InTest("テスト2");
/*
出力
テスト1
0
テスト1
1
テスト1
2
テスト2
*/
テキスト情報として使うのだし
ブランケット使えば全く問題ない気がするんですが・・
なんか問題あるかなー??
on (release) {
var lv:LoadVars = new LoadVars();
lv["text"] ="aa";
lv["static"] = 1;
lv.send(_url,"_self","POST");
}

Flashをこれから始めようというかたにお薦めできそうな本。CD-ROMに入ってる「独習ソフト」で学習するので他の入門書ともまた違った感じかと。こちらのページでイメージは掴めるかと思います。ちなみに僕の作った素材も数点はいってます。
先日のF-siteセミナーの企業デモの方でも紹介がありました。
企業demo「CaptivateでFlashの入門書を作ったよ」
大分落ち着いてきたので、staticとか継承とかの挙動を理解しようといろいろいじり中。
Amazonで購入してすぐに届いたのですが、なかなか仕事が落ち着かず読んでる暇がありません。
これを参考にFlashPhotoLogを作ろうかと思ってるんですがね。。BlogはMovableTypeで解説されてるみたいです
勉強するなり
4月28日 Flash OOP JAPAN勉強会
・「GIZMO」のご紹介
・OOPの基礎
Flash OOP JAPAN
5月14日 F-siteセミナー
demo1「はじめの一歩のアクションスクリプト」野中博士(60分)
demo2「まるっと見せます! デビュー25年の奥義」A.e.Suck師匠(60分)
アンコール企画「自作アニメ自慢」コーナー
企業デモ?「CaptivateでFlashの入門書を作ったよ」SIHO@viva mambo
自分で作っていたムーピーの深度が100万を越える事件が発覚してびびりました。
どうもロード時にコンボーネントが継承しているdepthManagerクラスで1048575を決めうち設定してるみたい。
ちなみに「ムービークリップに指定できる深度の範囲は、-16384から1048575までです」だそうです。
参考~意外と使えないMovieClip.getNextHighestDepth() ~ F-site
onDragOutとかonDragOver とか最近まで全く知らなかった。
MXから追加されたイベントらしいが
みんな普通に使っているのでしょうか??(汗
マクロメディア、Flashの大幅な機能強化を発表実際もの見ないとどんなものかイマイチ想像がつかないとこですがスゴイということです。
前のバージョンの発売時期とか考えてもボチボチでそうですね。
5/14のF-siteセミナーのネタがきまったよ
次回は初心者DAYだそうな
demo1「はじめの一歩のアクションスクリプト」野中博士
demo2「まるっと見せます! デビュー25年の奥義」A.e.Suck師匠
アンコール企画「自作アニメ自慢」コーナー
企業デモ?「CaptivateでFlashの入門書を作ったよ」SIHO@viva mambo
http://f-site.org/articles/2004/03/25003056.html
例によって宴会は朝までなのか!?
次の日ペーパーオーナーゲームのドラフトなんだが・・・
クラスの消滅後も残っている。と捕らえてよいのだろうか?
こないだの意味不明な挙動も説明がつきそうだ。
クラス、継承、そしてムービークリップ階層。まだまだ使いこなせるレベルでない感じだけどねえ
applyの使い方に悩んでしまったよ。
evalつかってfunctionに変更という発想が30分ほど浮かばなかった・・
現実逃避気味エントリー。
ハーまだまだやることがたくさんある・・
function test () {
trace("testだぁ" + arguments[0]);
}function doTest(_str:String, _sArg:String){
var func:Function = eval(_str);
var argAr = new Array(_sArg);
func.apply(this, argAr);
}
doTest("test", "よ")
//出力 testだぁよ;
2/4はデジタルスケープミニセミナー HOT!MENU desスペシャルというのがあるらしい
参加予定。ただ結構人が集まっているので今からだとキャンセル待ちになるとか。
一ヶ月前にでた本(雑誌か?)のDESまだ買ってないならお薦めです。
そして2/5はF-siteセミナー。 こちらは参加はまだまだ受付中。
今回も2次会は宴会です
OOP勉強会に行って来たときの復習。
Delegateという聞ききなれないクラスの話があった。
やりかたとかも教えてもらったので家帰って使ってみようと思い
とりあえずググッたら野中さんのサイトにDelegateクラスのことがバッチリのっていました。
まあ一応自分でもこれがあるとmx2004のコンポーネントでちょっと使い勝手よくなるなあとおもったこともあるのでエントリーしておきます。
function createAndLoad(o_arg:Object):Void{なんかエントリーだけしてて未公開のスクリプトがあった(^^; MovieClipLoaderの練習をしていたものだと思われる。 createEmptyMovieClipすればわざわざステージにムービークリップつくらないでもいけるというものだったかな。まあとりあえず公開しとこう。
var mc:MovieClip;
ml.loadClip(o_arg.sFile, mc = this.createEmptyMovieClip(o_arg.sMcName, o_arg.depth));
mc._x = o_arg.x;
mc._y = o_arg.y;
}
var ml:MovieClipLoader = new MovieClipLoader();
var oListener:Object = new Object();
var nDepth:Number = 0;
ml.addListener(oListener);
this.createAndLoad({sFile:"xx1.jpg",
sMcName:"cLoader1",
depth:nDepth++,
x:100,
y:100
});
this.createAndLoad({sFile:"xx2.jpg",
sMcName:"cLoader2",
depth:nDepth++,
x:200,
y:200
});
ml.removeListener(oListener);
来週はFlashOOP勉強会に参加する予定。難しすぎて寝てしまうかもとびびりながら今まで参加を見合わせていましたが年も変わったことだし気持ちを引き締めるためにも参加してみようかと。
すでにかなり話題になっているFotologue
使ってみたいなあと思っていたところうまい具合に招待してもらいました。
招待制PhotoLogサービスといえば良いのかな。
ちなみに招待できるのは三人までみたいで僕はもう使い切ってしまいました(^^;
PhotoLogは三つ作れて今二つ作ってみた。
しかしこれはよくできている。
特にですねー管理画面の出来がすごいのですよ。
某所で指摘うけて思いましたが
Flashのよさをサーバー側のバックエンドが引き出しているといったところでしょうか。
写真加工とかしないかぎり速攻でUPロードできてしまうのです。
リサイズしてくれるしEXIF情報抜き取ってしかるべき場所に自動でセットしてくれるし。
僕もMTでPhotoLogやってたけどそれより全然エントリーするのは楽です。
そしてかっこええ。
管理画面とかキャプチャーして紹介したい気分だけどそれはイカンことなので、
まあなんとか招待してもらって実際にいじって確認していただければと。

オライリーActionScript本シリーズの著者Collin Moockのセミナーに行って来た。
2時間のところ30分押して2時間半、休憩なし。それでも時間足らずといった濃い内容のセミナーでかなり行ってよかった。 privateとかpublicとか意味はわかってるけどイマイチピンときてないところもあったけど説明されるとなるほどと思ったし、カプセル化とかもなんとなーく理解は深まった気がする。クラスとか作ってみてたとき変数とか関数とかflaの中とクラスの中がいつの間にかダブってて困ったことを思い出した。privateとか使っとけばアクセスできないから良いのか。もらったレジメもかなりの量。継承とかスーパークラスとかまで話すとは思わなかった。本当この辺も使いどころというか効果的な使い方がピンときてないことが正直あるんで精進したいところであります。3万円のセミナーも行きたいけどなあ。ちと値段的に厳しい。その分なんか本でも数冊買おうかと・・それでもおつりはきそうだけど(w
来週に迫ったF-siteセミナー〜「超基本!アニメーション祭り」〜
今年最後のF-siteのセミナーですよ。まだ申し込めます。
毎回参加してるけどセミナーもセミナー後宴会も面白いっすよ。
いかなかったけどFlashカンファレンスの模様のムービー
なんとなく画面から次のバージョンの感じは掴める。
ほー、フーン、へぇ。
注目は黄色いお姉さんを写しているときにカメラの前を横切るメガネマンだ!?
コンポーネントってあまり使ったことないので時間あるときに少しずついじってみようと思いScrollPaneのサンプル作成。久々にFlashサンプルのページ更新
OnEnterFrameBeaconをMX(Player6)のAS1.0用に書き換えてみた。
var gmc = _global.MovieClip;
if (!_root.__OnEnterFrameBeacon) {
AsBroadcaster.initialize(gmc);
var mc = _root.createEmptyMovieClip ("__OnEnterFrameBeacon", 9876);
mc.onEnterFrame = function () {
_global.MovieClip.broadcastMessage ("onEnterFrame");
};
}var o = new Object();
o.onEnterFrame = function(){
trace("TEST1");
}
MovieClip.addListener(o);

前のヤツをすこしいじってみる。斜めの動きがちょっとインチキくさい(^^;
気になってたMovieClipLoaderクラスをいろいろテスト。
onLoadErrorなど使ってファイルがないときはエラーなども返してくれて
loadMovieと比べてかなり便利。
しかしonLoadProgress がムービープレビューで
うんともすんとも動かないのには参った。
とりあえずヘルプを見たらなんとなくそんなようなことは書いてあった。

loadMovieをしてデータがないとエラーに(というか読み込みが停止?)なるのですが
このときloadMovieしているMCに対してgetBytesTotal()で値を取得すると
返ってくる値がブラウザによって違うみたい。
this.load_mc.loadMovie("hogehoge");this.onEnterFrame = function(){
this.myList.addItem(this.load_mc.getBytesTotal());
}
[補足というか訂正08/25]
ローカルだとFireFoxは0(多分Safariも)
でもサーバー上だと-1がかえる模様。
必ずしもでないが最初の2フレーム目くらいから数回0がかえったケースもあった。
IEはサーバ、ローカルどっちも-1。
ジャイアンリサイタルのFlash
こんなんあったのか。個人的にはかなりきにいりました。
入場券の"欠席した者はぶんなぐる"には笑った。
おっと今度の土曜はF-siteセミナーです。
僕は忘れないように速攻で申し込みましたが、まだ今からでも申し込めるとのことです。二次会の宴会も参加予定っす。
申し込みサイト
8/7セミナーの内容
demo1「ミート的3D表現のコツ」ミート茂手木
demo2「完璧素材作りでリアリズムの追求」サブリン
demo3「Flashでのカンタン3D」森 巧尚企業demo1「発売間近か!? Swift3D V4」株式会社ディ・ストーム
企業demo2「MAYAからswf!?」株式会社ボーンデジタル
時々MCの右端の座標を取りたいことがあるのですが、
そういったとき使う方法としてそのMCの中にx座標+横幅という感じで以下のように書くのが一つ
this._x + this._width
もう一つやり方としては getBounds()を使うやり方もあってこんな感じ。
this._x + getBounds(this).xMax
どっちも同じかというと微妙に違うことに今気づいた。
8/7のF-siteセミナーの受け付け開始です。今回もまたもりだくさんな内容。3D表現のネタ多目。そして大阪よりゲスト講師も招き充実の内容なり。
企業デモはSwift3D、MAYA。個人的には近々バージョンアップするSwift3Dはきになる。
ここを最近まったく更新してなかったけど時々ダウンロードしてくれてるみたいなんでたまには更新せねばということでContextMenuのサンプルUP。サンプル自体はあんまり面白いものではないけど参考まで。
FCSのサーバーサイドスクリプト。サーバーサイドのAsでShardObjectを消せるはずなんだが消えないのだ。やり方が違っているのかな。こないだの仕事の時もうまくいかなくて困った。別の方法でShardObject消せたから事なきを得たがオレのやり方がおかしかったのかと思いいろいろやったが駄目です。
もしかして本が間違っているかもと思いclearShardObjectとsを取ったらエラーで怒られるので本はあってるようだ。何かオレが勘違いしているのか!?しかしわからんのでしばし保留。
EURO2004が終わったと思ったらFPS2004の告知が。
9/10に大阪でやるらしい。
いきたいなー。
しかしいけるかなー。
できればいきたいですなー
おしFla応募したときFPS2004やってくださいとか書いただけに
プレゼントに応募してたおしえて!!FLASH MX 2004が繰上げ当選になった。うれしーっす。懸賞など最近あたる気配もなかったしF-siteのジャンケン大会も連敗記録更新中だったがこれで流れが変わるかも。過去に初代アスキースティックが当たったことがあったのが最初で最後だったかな。
押されたキーコードから文字を求めるにはこんな感じ。メモとっく。
keyListener = new Object();
keyListener.onKeyDown = function(){
trace(String.fromCharCode(Key.getAscii()));
}
Key.addListener(keyListener);
人、モノ、コトのつながりが一目でわかる関係地図“Context Viewer”発表
ハコダテ・スローマップ内のContext Viewer。
FlashPlayer7以上
yugop(中村勇吾氏)作らしい
Flashコンテンツとしてすごいってのもあるけど個人的に地図とか見るの好きなんで、このContext Viewerいじってて楽しい。ライダーハウスとかもあってよい感じ。
ただ函館は行った事が一度もない。いったことある場所だったらもっと楽しそうだ。
本日、渋谷の大盛堂にてOOP本ゲット。しかし一冊しかなかったので危うく見落とすととこだった。そのほかの主要な渋谷の書店(BookMartと啓文堂)には見当たらなかったです。もう売れてしまったのかも。
では しっかり勉強します。
FCS案件は5月末の最初の山場が越えた。最近はFCSを使った中でのデータの受け渡し的スクリプトを組んでばかり。NetConnectionとかSharedObjectとかサーバーサイドASとか色々いじっているのでさすがになんとなくつかめてきた感じ。ただSharedObjectのonSyncイベントがどうもしっくりこないとかいうこともある。
今はNetStreamオブジェクト中心にいろいろ調べつつ制作中。
FCSのDeveloper版は5接続まで。制作中のベースとなったスクリプトがなんかつなぐたびに新たにNetConnectionを定義しているのですぐ接続一杯になってしまっていた。オカシイ気はしていたが1回NetConnection定義すればれで良くないのかと思っていたがヤハリそうだったみたい。じゃなきゃ5接続でテストなんぞできんよ。どうせなら複数PCでテストしようと思いノートと接続。サーバーは久々にAN HTTPDを起動。うまくつながり一人チャット。ちょっと感動したが結構むなしいのである。
FLASH OOP はじめて明らかになるオブジェクト指向によるFLASHプログラミング・・・ようやくFlashMX2004の本が出はじめた感じでこの本は必ず買うつもり。 Flash参考本マニアと言われても仕方ないくらい自分の部屋にはFlash5とFlashMX本が大量に転がってますがMX2004の本はまだ一冊もないです。おそらくこの本が一冊目になりそう。 OOPとはObject-Oriented Programmingの略ということをその昔教えてもらったことがあるが未だに理解不足。
PS 翔泳社のサイトにトラックバックがうまくいかんのは何故だー。こないだは普通にできたのに・・・またあとでやってみよう。
↓
トラックバックできました
補足 こちらもご参考に(2004/6/20)
spliceを使うべきところを間違ってsliceを使っていたため、
なんか思った動きをしなくて結構悩んでしまった。
どっちもあんまり使ったことなかったんだけど・・アホだ・・・
ずっとFCSの作業。まだ実作業より調べることが多い。一応ざっと「続ActionScriptバイブル」読んだ後でこちらのサイトにあるDevelopingCommunicationApplicationsの日本語訳のPDFを読んでたけど、PDFは個人的に使いづらいと感じるので印刷することに。サーバーサイドActionScriptは外部ASを読み込むこともできるらしいんだけど、うまいこと設計できんかと考え中。
MXの時はFCSインストールしたらCommunication App Inspectorてパネルが自動的にFlashのオーサリング環境に入ってくれたはずなんだけど、こいつをMX2004にはどういれれば良いのかがわからないので(FCS再インストールしても駄目だった)、Communication App Inspector.swfをというファイルを....\Configuration\WindowSWFのフォルダに放り込むととりあえずMX2004のオーサリング環境に登場した。果たしてこれでよいのかわかりませんがとりあえずFCSに接続はできたみたいなんで使ってみます。
5/15のF-siteセミナー企業のデモも決まったようですね。
個人的に「Swift 3D Xpress for Flash MX 2004」 は注目です。
GoogleでFlashたとえば「ラーメン filetype:swf」とか検索かけるとSWFファイルを検索してくれます。 頭に[FLASH]と表示されます。どういう条件でひっかかるのかな。 自分が作ったコンテンツがまだ一個もひっかかってないのでイマイチ、どう作ればひっかかるのかが掴めてません。
[8/4:リンクしてた先がなくなってしまったので変更しました]
getNextHighestDepth()とgetInstanceAtDepth()というのがMX2004で追加されてたので一度試してみた。多少深度の管理は楽になるかな。getNextHighestDepth()は一番前面になる深度の数値を取得できて、getInstanceAtDepth()は深度からターゲットパスを取得できるといったところか。
次回のF-siteセミナー行こうと思っている人は速めに申し込んだ方が良さそうです。今回もまた充実した内容かと。
Player7書き出しだとAsBroadcasterと書かないと動きません
ASBroadcasterではだめでASのSは小文字にしないとだめです。
そんなことを半日くらい調べてました。
一応そのことに気が付いたURL
作ろうと思っている個人的なFlashサイトの構想もだいたいまとまって、ActionScriptなども大体どの辺のものを調べるかなどのめぼしもつけているが、なんかこうそこから先に進まない。期日のないものではあるがわれながらなんとも情けないとこである。そこで軽い気分転換ということで、途中まででとまっていたN中さん(伏字にする必要ないかもですが一応)のActionnScript本を3日前くらいからまたよみはじめた。
汎用的に使いまわせるようなトゥイーンスクリプトをいろいろな人の公開されているソース研究しながら作成中。
前回の仕事では、かなりインチキ臭いけど前に作った色かえるスクリプトがあったおかげで少しは効率的だったので。こういうもんいろいろ作っとけば仕事も少しは速くなるかなと思ったりするわけで。
FlashRemotingやらVideoExporteのアップグレード版やらFlash2004の環境いろいろアップグレードしたついでにMacromediaのUSからJSFLのファイルを落としてみた。今のところ全部で四つしかなかったので全部落としててみた。
ちょっと試してみるつもりつもりだったんだけどJSFLで結構いろいろ出来そうですなー。一つ一つオブジェクトのプロパティ見てたんだけどこの際マニュアルちゃんと見たほうが良さそうな気がしてきた。
このセミナー行ってみたいけど名古屋じゃ無理ですなー。時間もお金もかかってしまうし。
改行コードCR+LFで保存したXMLを読み込むとタグの中の改行が2行分として扱われてしまうようだ。とりあえず今回改行コードはLFで保存して対処することにした。
くそーーーやられたーーーー
ムーピープレビューとブラウザでSharedObjectの挙動が違うことになやむこと2時間。
つうかブラウサで機能してなかったんでハテ?Player7でなんか変わったんかななど無駄なことを考えていたが原因は作業してるフォルダ名に日本語をつけてしまっていたからだったのだーー
↓こんな風
E:\works\仕掛中\
なんか一年前くらいにも同じようなことでハマッた気が・・
花見がまた遠くなっていく・・・・・
var sOs = System.capabilities.os;if(sOs.indexOf("Windows") != -1){
var oTxtFormat = myTxt_txt.getTextFormat();
var newFormat = new TextFormat();
newFormat.leading = oTxtFormat.leading + 1.8;
myTxt_txt.setTextFormat(newFormat);
}
入れ子になったMCの下のほうの階層にあるMCをイベントが起こったときにステージの中心に持っていきたい。動かすのはメインのタイムラインに配置してあるMC。
座標をメインのタイムラインにあわせるためにlocalToGlobalを使用。
しかしlocalToGlobalとかglobalToLocalとか使ってて最終的には「使う必要ないじゃん」という苦い経験がなんどかある。いまのところ思ったように動いているが今回はさてどうか・・。
このところMAXでのAS2の復習をしているんだけど混乱気味、今日もstaticのことを考えていたんだがなんかすっきりしない。Vaio買いにヨドバシ行ったときによっぽどJAVAの本でも買おうかと思ったが、ずらりならぶJAVAのコーナーでどれ買っていいかわからんかった。
杏仁豆腐の話もあったし、もうしばし苦しんでみるか。
明日こそinterface implement
AS2.0を忘れないうちに復習。
class~extends MovieClipとしていろいろいじってみた。
ちょっと悩んだのがclassの中でfunction onEnterFrame(){}と定義した時。
必要なくなったらenterFrameを消したいのだがdeleteがどうしてもできない。
とりあえずonEnterFrame = null;でenterFrame内の処理はクリアできた。
deleteはできないのかなー?
とりあえずこんなもんを作ってみた。
Flash-jpの投稿を見ていたらonClipEventにinitializeというイベントがあるという投稿があり試してみたところonClipEventのloadより先に確かにイベントが発生した。
さらに検証。
コンポーネントの幅や高さを代えるのはどうやるのかなあと思って調べたら
UIObject.setSize(width, height)というのがあった。
ためしにMX2004のTreeコンポーネントを使って幅と高さは
Stage.onResizeなんぞ使ってみてウインドウがリサイズされたら反応するようにしてみた。
URL
マスクいろいろ研究中。なんかインチキくせー。まだまだだなー。
関係ないけどMAXまでに「オブジェクト指向で考えるActionScript」本を読み終えたいなあ。
ある程度予測はしてはいたんだが、こないだ作ったFLASHサイトを
うちのMacOS9のG3IBookで見るとがっかりするほど遅かった。。
アルファとかかかるとこは案の上遅くなってるんで明度とかでも同じような効果がでるとこ
何ケ所か修正してみたもののあまり変わりはなかった。
今回はフレームレート高目(31fps 一応マジックナンバーといわれる値)で作って見ようとは思ってたんである程度の覚悟はしてたんだけど、時々はチェックすべきだったなー。
エントリー時間も取るようにしてみました。
そのままだとなんだかなーと思うのでyyyy/mm/dd [hh:mm:ss]に
しかし変換のやり方むちゃくちゃ強引で汎用性なしプログラム
charAt使って一文字ずつfor文でまわしifて何文字目か決めうちして変換してます。
あと文字細かったんでboldかけたりしました。
textFieldとかtextFormatとかはたくさんプロパティがありすぎる割にあんまり使ってないのでその度にリファレンス調まくっとります。
オライリーのActionScript本にsetTextFormat()とsetNewTextFormat()の違いについて書いてあった。使うかわかんないことだけど、まあ覚えておこう。
FlashのXMLオブジェクトを使ってとりあえず簡易ティッカーのようなもの作ってみたのでこのblogの上にSWF貼ってみました。
とりあえずrdfファイルからタイトルとリンク情報抜き出してます。
簡易RSSリーダーとかFlashで作ってしまおうかと。
Flash単体だとURLの登録が手作業になるかな。SharedObjectって手もあるが返ってメンテしにくそうな気がするので外部XMLデータとかかな。
まあインターフェイスを考えるのが先ですな
2月7日はFlashのセミナー。参加費用は1000円だけど内容はかなり濃いかと。
Flashの勉強をしようという方お奨め。二次会はワリカンの飲み会です。
http://f-site.org/archives/000052.html
と宣伝してみる。
まだ申し込めるみたいです。
cat_flashで検索かかってますし(謎
しかし毎度お得なセミナーだと思います。
ネタはいろいろなんで自分の興味があるときは是非参加すると良いかと。
オラは毎回参加してますだ。
FlashMX2004のextention
http://www.bit-101.com/blog/archives/000006.html

こんなもんも作れてしまうのだねー
よく調べるとgetByteLoaded()の値がいきなり100にあがってしまってたのが下のloading2のスクリプトでは大分解消されている。
ただ動作がどうもコマ落ちしている感じもある。まあタイミングずらした効果もあったみたいだし原因はだいぶ特定されてきてすっきりしてきた感じかな
なんか今、回線が異様に速いみたいで
キャッシュ空にしてやってもすぐ読み込みしてしまうよ(^^;
でも、やはりロード監視enterFrame10個くらいでオカシイ感じ
http://situcha.swee.to/loadTest.html
と
書いてて思い浮かんだんだが
ひとつのフレームでduplicateMovieClipを10回やってloadMovieしているからか?
ちょっとタイミングずらしてみるべ
いわゆるNowLoadingの処理をenterFrameの中でjpgをloadMovieするMCをgetBytesLoaded()とgetBytesTotalを取得して監視しているのだが、ローカルで回線遅めにしたチェックなどではうまく動作しているもののサーバーにアップしたら数値をきちんと取得してない。
テキストボックスいれたものサーバーにアップしたがまともに数値が取得できてないのだけはわかった。どうしたものかな。
メモリを食ったり動作が遅くなる原因になると思われるのは大量のマスク、setIntervalあたりか。あとloadMovieを一度にたくさんするのも結構まずい。
それと duplicateMovieCluipとかした後でいらなくなったらremoveMovieClipするとか。
removeMovieClip()で消せるのは基本的にはduplicateMovieClip,attachMovie,createEmptyMovieClipあたりで生成するMCだけかと
おもっていたがどうやら違うようだ。
オーサリング時にステージに配置したMCはgetDepth()で確認すると深度がマイナスの範囲で設定されている。で、そのMCをswapDepthsで深度をプラスにしてしまった後ならば
removeMovieClipで消せるのでありました。
ふーむ、いろいろとあるんですな。
その他removeMovieClipとunloadMovie()の違いもなんとなくわかったような。。。
unloadMovieってあまり使ってないんですがメモリの節約とかに効くのかな??
マスクは負荷がかかるのでできるだけ必要なとこでかけたい。
しかしマスクかける方のMCはloadMovieの処理をマスクかける前から
配置しておきたい、
そんでそのタイムラインで再生、逆再生をしたい。
という説明するのがちとめんどいことをやっていた。
レイヤーでマスクの設定をMovieClipにして、
そのタイムラインを動かすとマスクをかけたフレームでMovieClipは
同じキーフレーム上でも初期化されてしまう。
onClipEvernのloadがマスクがかかるタイミングと外れるタイミングで動いていた。
MX以降であればmy_mc.setMask(マスクmc名)とmy_mc.setMask(null)で切り替えを
すれば初期化はされないようである。
作業環境はMX2004
Playerは7
MX2004で新しく加わった物の中では結構興味のあったprintJobクラスのサンプルを作ってみた。
URL
印刷の範囲をムービークリップの階層ごとに指定でき印刷範囲、印刷するフレームも細かく指定できるので使いどころはありそうだ。
まだやるかわからないけど先日打ち合わせをした地図Flash案件では使いどころがあるはず。
ただMX2004でいけるかはまだわかんないけど。
MX2004を使ってはいるけどやっていることは相変わらずMXのことばかり。
色を変えるスクリプトを作ってcolorEngineというMC作って、色変えたいMCに
Object.registerClassつかって定義。
最初相対パスでcolorEngine内のclassにアクセスすれば良いのかとおもったが×
どうやらレベル0に出来ているみたいでパスなしでObject.registerClassで○
一応思った感じで動いてるんでこれ以上深くは調べず。
いずれちゃんと調べたい。
9末の北海道レポートをさくっとFlashでつくっみようと思ってはじめたのだけど
ついつい、いろいろこだわったりしてなかなか進みません。
このすごいサイトを見てさらに刺激をうけました
http://www.intentionallies.co.jp/
ジョシュアのネタ、ランダムに色かえるようなやつ。
スクリプトはサイトにあるから、といわれたがサイトのどこかわからないので自作してみた。
左上のreloadボタン押すと再描画します。
土曜のジョシュアデービス氏のセミナーでのネタ。
写真などの色を取るには画像gifで書き出して
Flash の色見本パネルから「カラーの追加」を選んで
その書き出したgifを選択すると写真で使用している色が
カラーパレットに追加される
今回のバージョンアップは単に気づいてないだけかもだが
Flashコンテンツでやれることはあまり増えてない気もする。
どちらかというとオーサリング環境で便利な機能が増えたというのがいまんとこの認識。
ただ中心点の位置が変だったりいろいろやりにくいとこもあります。
便利と思った機能その1としてメニューの[編集]→[検索して置換]。
ステージ上のテキストやフォント、色情報を置換してくれる。
もちろんステージにあるムービークリップ内も検索、置換してくれる
うまく使えば作業の漏れも減りそうだが一気に置換かけるのは
余計なところも一緒に買えてしまいそうでちょっと怖い。
(ひとつひとつ検索で確認などはもちろんできます)