2007年12月07日
まずはご覧あれ。
http://www.adobe.com/flashon/
見れない方はFlashPlayerをアップデートされるべし。
Adobe Flash Playerダウンロードセンター
映画のトレイラーがみれます。
![]()
HDボタンを押すとHD画質の動画も再生可能です。fullscreenで高解像度で再生されます。
ここまで画質が良くなるとは…。凄い…。
もちろんFlashで作られているのですが、これがどうことを示すかというと。
FLVを採用している動画サイト、Youtube、ニコニコ、その他がいずれこの画質で見られるようになるということ。恐ろしいことです。
Flashの影響力がさらに高まるんじゃなかろうか。
2007年12月13日
超遅ればせながらやっとAS3.0をいじっています。
なんだか自由にのびのびやりなさいという教育方針の先生が急にいなくなり、正反対の超厳しい先生がいきなりやってきたという感じです。厳しい指摘にヒーヒー言わされております。
躓いたところをまとめて行きます。
MC「square」をx100まで移動したら削除するasを書きました。
AS2.0ではこう
function layout(){
attachMovie("square","sq1",1);
_root.onEnterFrame = moveX;
}function moveX(){
sq1._x += 1;
if(sq1._x > 100){
removeMovieClip("sq1");
}
}
layout();
AS3.0ではこう書きました。
import flash.display.*;
import flash.events.*;var sq1:Sprite;
function layout(){
sq1 = new square();
addChild(sq1);
sq1.addEventListener(Event.ENTER_FRAME,moveX);
}function moveX(event:Event){
sq1.x += 1;
if(sq1.x > 100){
removeChild(sq1);
}
}
layout();
これを実行したところコンパイルエラーで
ArgumentError: Error #2025: 指定した DisplayObject は呼び出し元の子でなければなりません。
と出てきてしまう。
これで半日悩みました。
removeChildを実行するときにエラーがでるので重点的に検証していたんですが。
結果これで動きました。
import flash.display.*;
import flash.events.*;var sq1:Sprite;
function layout(){
sq1 = new square();
addChild(sq1);
sq1.addEventListener(Event.ENTER_FRAME,moveX);
}function moveX(event:Event){
sq1.x += 1;
if(sq1.x > 100){
removeChild(sq1);
sq1.removeEventListener(Event.ENTER_FRAME,moveX)
}
}
layout();
removeChildでsq1が削除されてsq1に設定したイベントリスナーも削除されるものと思っていましたが、
removeEventListenerでイベントリスナーを削除しないと実行され続けてしまい既に削除されたsq1を
removeChildしていた為にエラーがでていたのでした。removeChild自体は動いていたんですね。
AS2.0ではMC毎にonEnterFrameを持たせてMCを削除したときonEnterFrameも削除されるという組み方をよくやっていたのですが作り方を考えないといけませんかね。
2007年12月14日
昨日のAS2.0のコードですが
function layout(){
attachMovie("square","sq1",1);
_root.onEnterFrame = moveX;
}
function moveX(){
sq1._x += 1;
if(sq1._x > 100){
removeMovieClip("sq1");
}
}
layout();
こんな書き方の方が望ましいですね。
function layout(){
attachMovie("square","sq1",1);
sq1.onEnterFrame = moveX;
}
function moveX(){
this._x += 1;
if(this._x > 100){
removeMovieClip(this);
}
}
layout();
var sq1:Sprite;
function layout(){
sq1 = new square();
addChild(sq1);
sq1.addEventListener(Event.ENTER_FRAME,moveX);
}
function moveX(event:Event){
this.x += 1;
if(this.x > 100){
removeChild(this);
this.removeEventListener(Event.ENTER_FRAME,moveX)
}
}
layout();
var sq1:Sprite;
function layout(){
sq1 = new square();
addChild(sq1);
sq1.addEventListener(Event.ENTER_FRAME,moveX);
}
function moveX(event:Event){
event.target.x += 1;
if(event.target.x > 100){
removeChild(event.target);
event.target.removeEventListener(Event.ENTER_FRAME,moveX)
}
}
layout();
thisの代わりにevent.targetを使えばオッケー。