大重美幸さんのAS3本

賞金っつっても大した額じゃないんですが。尾崎賞でいただいた商品券を使って、AS3の本を買いました。

詳細!ActionScript 3.0入門ノート2

「…〜入門ノート」の続編で「2」となっています。前のも参考書としてかなり活用させていただいていたのだけど、かなり身に付いてきた感じなので「2」を買ってみました。

もっと勉強するぞ〜

レンジでお馴染みのAluさんがくだらない(と自ら書いてた)社内向けFlashを作っていたのですが、マウスホイールのイベントがFirefoxだと2倍になっちゃって困る(わたしはそんな現象あるなんて知らなかった)よ!ムキー!と言うので調べてみました。

IEとかチョロメとかは問題ないのですが、FirefoxだとMOUSE_WHEELイベントが2回ずつ発生するみたいです。それは困る。

超絶ググってたのですがなかなか情報見つからなくて、困った時のwithout日本語検索で見つけたのがここ

わたしは簡単な英語しかわかりませんが、ASで何が書いてあるのかはわかるので、ASも言語なんだなあって実感しますね!

んでそれを元にこんなコードを書いてみました。

stage.addEventListener(MouseEvent.MOUSE_WHEEL, wheelHandler);  
var lastTimeWheel:Number = 0;  
function wheelHandler(e:MouseEvent) {  
var now:Number = new Date().getTime();  
if (now-lastTimeWheel) {  
//ここに処理を入れればいいんだよ  
trace("delta: " + e.delta + "tmillis: " +(now-lastTimeWheel).toString());  
}  
lastTimeWheel = now ;  
}  

結果、上手くいったようです。わたしも勉強になりました。…φ(.. )

余談ですがそのFlash、落武者の作品ですか?の問いに対してソッコー否定されてました。落武者のサーバにアップされてましたけどね。

先週のレポート、結局書いてないですが、そもそも野中さんのサイトに概要が書いてあったんですよね。
当日のスライドとサンプルも先日アップされました

自分でまとめることに意味がある気がしますけどね…(´・ω・`)

§

さて、今日は先週と全く同じ会場で別のフラッシュイベント。SPARK Projectの勉強会でした。
Adobe CS4日本語版の発売日ということもあり、Flash CS4の新機能紹介もあって興味津々。

Flash CS4? 昨日注文しましたよ。

勉強会の収穫

↑んで、今日の収穫

なぜか、クレイアニメの本をもらいました。
以上。

タイムラインにクラスファイルを読み込むコードを書いたら、エラーが出てうまくいかなかった。

パッケージ化してたらダメなのかと思ったりしたのだけど、気づいてみればクラスファイルにpublicが付いていないためだった。

前にもコレやった気がするけど忘れてたょぅ。と思ってメモ。

AS3、まだまだ慣れたとは言い難い。

Flash OOPの勉強会(主催:クスール)に行って、数学を勉強してきました。

内容は、Matrixの話。

Matrixってヘルプ読んでも全然わからなかったんだけど、つまりは数学の行列ということらしい。

行列ってなんだったっけ!

習った覚えはあるけど内容はすっかり忘れていたわたし。
でも今日の話を聞いたらなんとなくわかりました。

多分、わかったつもりになっているだけなので、ここでまとめてしまいたいのだけど、ここ数日寝不足が続いていたので今日はもう早く寝て明日にしたいです。

果たして明日で上手くまとめられるのだろうか…

  • loadPolicyFileはルートディレクトリにポリシーファイルがある場合は無効。
  • stageWidthとstage.widthは別物
  • Rectangle(x,y,x2,y2)だと思っていたら正しくはRectangle(x,y,w,h)だった。

以上の3本立てでお送りいたしました。

attachMovieって結構使いません?

AS3からこれは使えなくなって、ライブラリでリンケージしたムービークリップをnewしてさらにaddChildしなければならなくなりました。

んで、これだとインスタンス名が設定できないみたいで、この方法で配置したMCの関数やメソッドを呼びたいとか、変数を渡したいとかいう時にはどうしたらいいんですかと。

社長プロジェクトで作ったリアルタイムカウンターのflashアニメ、新たな数値を受け取ったら各自でアニメートする設定がしてある数字MCを上記の方法で生成しているんだけど、じゃあどうやって数値を渡しましょうかと。

答えはウェブで!

var mc:MyMC = new MyMC();//MCをnewする  
mc.name = "hoge";//nameを設定  
this.addChild(mc);//表示リストにadd  
var targetMC:MyMC= getChildByName("hoge") as MyMC;  
targetMC.countUp(n:Number);//targetMCがさっきaddしたhogeということに  

つまりは名前(name)を付けてgetChildByName()で掘り起こせばよかったんですねー

AS2まではJavaScriptとかに頼らないと自分(swf)のパスを取得できなかったように思うのですが、仕事上で必要に迫られたので調べてみたら、AS3ではloaderInfoを使うことでできるんですね。

//ホスト情報取得  
var url:String = loaderInfo.url;  
var token:Array = url.split("");  
var file:String = token[token.length - 1];  
var myHostInfo:String = file.split("/")[2];  

引用元:suz-lab

実際AS2でパスを調べる方法が無いのかどうか、そこまで詳しくないのではっきりしたことは言えないんですけどねー。

今日は面白そうだったので社長プロジェクト(?)をやっていたのだけど、AS3のヘンな所でハマってしまって、予想よりも時間がかかってしまった。

それでも早いよ!って言われたけど、AS3がもっとわかってたらもっと早いですよ。精進しますね。

で何かというと、String型の数値をNumber型に変換するところでつまづいてた。

var N:Number = string as Number;

↑これだとだめなのね。結果は0になっちゃってた。

parseFloat(string);

↑こうしないと駄目でした。結構初歩かもしれないけど、最初どこがマズいのかわからなくて小一時間ハマった。

AS3は、かなり細かいエラーが出るようになっているのだけど、エラーの内容がかなりわかりにくいというか、表現が曖昧なことがあったりで、慣れないとバグの箇所を特定するのも一苦労ですよ。ハァ。

今回の落とし穴ではコード自体は間違ってないのでエラーすら出ないからさらに「?」マーク出まくったわけですけど。ビバtrace

§

さらにさらに初歩の話で思い出したこと。

Numberの小数点以下を繰り上げるか切り捨てるかの関数Math.ceil()とMath.floor()。いつもどっちがどっちだっけーってなっちゃってたんだけど、「floor」が「床」でつまり切り捨て、「ceil」が「天井」でつまり繰り上げってコトだったのねー!

ちなみにこの前のAS2OOP講座で知った話ですゎょ。

as2の学校2日目レポートでEventDispatcherのことも書こうと思っていたんですが、AS2のコードなので、AS3で開発を始めた今となっては使えねぇナァ、と思いつつヘルプなどを読んで自分なりにAS3版を作ってみました。

Main.as(ドキュメントクラス)

package {  
import flash.display.MovieClip;  
import flash.events.Event;  
public class Main extends MovieClip {  
public function Main() {  
var dispatcher:CustomDispatcher = new CustomDispatcher("aho");  
dispatcher.addEventListener(CustomDispatcher.ACTION, actionHandler);  
dispatcher.doAction();  
}  
private function actionHandler(event:Event):void {  
trace("actionHandler: " + event);  
trace(event.type);  
}  
}  
}  

CustomDispatcher.as

package {  
import flash.events.EventDispatcher;  
import flash.events.Event;  
class CustomDispatcher extends EventDispatcher {  
public static var ACTION:String;  
function CustomDispatcher(string) {  
ACTION = string;  
}  
public function doAction():void {  
dispatchEvent(new Event(CustomDispatcher.ACTION));  
}  
}  
}  

こんな感じでよいものなのか。

keyboard_arrow_up