Home > Archives > 2008-09

2008-09

ポケットリファレンス、遂に発売!


今日本屋に行ったら、馬場ぎんがさん著の『ActionScript3.0ポケットリファレンス』が発売されていました。

以前の『ActionScriptポケットリファレンス』を愛読しながら、「次のバージョン(ActionScript2.0)のリファレンス出ないのかなぁ…」と、ず~っと待っていたんですが…

2.0を飛ばして、3.0が出ちゃいました!

パラパラ捲ってみたんですが、(以前のリファレンスと同じく)読みやすく、記述例のサンプルも多数掲載されています。

3.0のリファレンス本欲しいなぁ…と思いながら、なかなかいいのが見つからなかった(持ち運びに便利で、分かりやすいもの)んですが、今日、見つけちゃいました!

ということで、迷わずレジへ!

愛読書が一冊増えました!

複数行のコメントアウトの解除が出来ない?


先日、FlashDevelopを3.0.0 Beta9にしたんですが、複数行のコメントアウト解除のショートカットが使えなくなっているみたいです。

前はこのショートカットが使えていたと思うんですが、これって、いつのバージョンから使えなくなったんですかねぇ…

  1. コメントアウトしたい行(複数)を選択
  2. Ctrl + Shift + B

これで複数行のコメントアウトが出来ます。

これを解除しようとして、(もう一度)Ctrl + Shift + Bを押すと、コメントアウトが解除されない…

/*/*~~~*/*/←こんな感じでコメントアウトのタグが増えていくだけになってしまう…

C>Documents and Settings>UserName>Local Settings>Application Data>FlashDevelop>Settings>MainMenu.xmlにショートカットキーが定義されていますが、複数行のコメントアウト解除ってないっぽいんですよねぇ…

Ctrl + Shift + Qでも解除されないし…

Ctrl + Bはスニペットのショートカットだし…

Ctrl + Shift + Bで解除されないとなると、こんな感じにした方がいいのかなぁ…

  1. コメントアウトしたい行(複数)を選択
  2. Ctrl + Q(一行のコメントアウトのショートカット)

こうすると、複数行が一行ずつコメントアウトされます。

コメントアウトを解除したい場合は、複数行選択して、Ctrl + Shift + Q(一行コメントアウト解除のショートカット)で解除出来る。

この方がいいのかなぁ…

FIVe3Dで数字を描いてみた


FIVe3DのGraphics3Dを使って、数字を描いてみました。

Graphics3Dの中のlineToSpaceメソッドとmoveToSpaceメソッドを使っています。

JavaScriptを有効にしてご覧ください。(要FlashPlayer9以上)

ソースはこんな感じ

package {
  (略)
  private var scene:Scene3D;
  private var mySprite0:Sprite3D;
  private var mySprite1:Sprite3D;
  private var mySprite2:Sprite3D;
  private var mySprite3:Sprite3D;
  private var mySprite4:Sprite3D;
  private var mySprite5:Sprite3D;
  private var mySprite6:Sprite3D;
  private var mySprite7:Sprite3D;
  private var mySprite8:Sprite3D;
  private var mySprite9:Sprite3D;
  private var btn1:Button;
  private var btn2:Button;

  (略)
  btn1 = new Button();
  btn2 = new Button();

  btn1.label = "Start";
  btn2.label = "Stop";

  addChild(btn1);
  addChild(btn2);

  btn1.x = 150;
  btn1.y = 350;
  btn1.addEventListener(MouseEvent.CLICK,ClickHandler1);

  btn2.x = 300;
  btn2.y = 350;
  btn2.addEventListener(MouseEvent.CLICK,ClickHandler2);

  //0を描写
  mySprite0 = new Sprite3D();
  mySprite0.graphics3D.clear();
  mySprite0.graphics3D.lineStyle(5,0xFFFFFF*Math.random(),0.5);
  mySprite0.graphics3D.moveToSpace(100,100,100)
  mySprite0.graphics3D.lineToSpace(100,0,100);
  mySprite0.graphics3D.lineToSpace(150,0,100);
  mySprite0.graphics3D.lineToSpace(150,100,100);
  mySprite0.graphics3D.lineToSpace(100,100,100);
  scene.addChild(mySprite0);
  mySprite0.x = -300;

  //1を描写
  mySprite1 = new Sprite3D();
  mySprite1.graphics3D.clear();
  mySprite1.graphics3D.lineStyle(5,0xFFFFFF*Math.random(),0.5);
  mySprite1.graphics3D.moveToSpace(100,100,100)
  mySprite1.graphics3D.lineToSpace(100,0,100);
  scene.addChild(mySprite1);
  mySprite1.x = -200;

  //2を描写
  mySprite2 = new Sprite3D();
  mySprite2.graphics3D.clear();
  mySprite2.graphics3D.lineStyle(5,0xFFFFFF*Math.random(),0.5);
  mySprite2.graphics3D.moveToSpace(100,100,100)
  mySprite2.graphics3D.lineToSpace(150,100,100);
  mySprite2.graphics3D.lineToSpace(150,50,100);
  mySprite2.graphics3D.lineToSpace(100,50,100);
  mySprite2.graphics3D.lineToSpace(100,0,100);
  mySprite2.graphics3D.lineToSpace(150,0,100);
  scene.addChild(mySprite2);
  mySprite2.x = -150;

  //3を描写
  mySprite3 = new Sprite3D();
  mySprite3.graphics3D.clear();
  mySprite3.graphics3D.lineStyle(5,0xFFFFFF*Math.random(),0.5);
  mySprite3.graphics3D.moveToSpace(100,100,100)
  mySprite3.graphics3D.lineToSpace(150,100,100);
  mySprite3.graphics3D.lineToSpace(150,50,100);
  mySprite3.graphics3D.lineToSpace(100,50,100);
  mySprite3.graphics3D.lineToSpace(150,50,100);
  mySprite3.graphics3D.lineToSpace(150,0,100);
  mySprite3.graphics3D.lineToSpace(100,0,100);
  scene.addChild(mySprite3);
  mySprite3.x = -50;

  //4を描写
  mySprite4 = new Sprite3D();
  mySprite4.graphics3D.clear();
  mySprite4.graphics3D.lineStyle(5,0xFFFFFF*Math.random(),0.5);
  mySprite4.graphics3D.moveToSpace(100,100,100)
  mySprite4.graphics3D.lineToSpace(100,50,100);
  mySprite4.graphics3D.lineToSpace(150,50,100);
  mySprite4.graphics3D.lineToSpace(150,100,100);
  mySprite4.graphics3D.lineToSpace(150,0,100);
  scene.addChild(mySprite4);
  mySprite4.x = 50;

  }

  private function ClickHandler1(e:MouseEvent):void {
    mySprite0.addEventListener(Event.ENTER_FRAME,enterFrameHandler);
    mySprite1.addEventListener(Event.ENTER_FRAME,enterFrameHandler);
    mySprite2.addEventListener(Event.ENTER_FRAME,enterFrameHandler);
    mySprite3.addEventListener(Event.ENTER_FRAME,enterFrameHandler);
    mySprite4.addEventListener(Event.ENTER_FRAME,enterFrameHandler);
  }

  private function ClickHandler2(e:MouseEvent):void {
    mySprite0.removeEventListener(Event.ENTER_FRAME,enterFrameHandler);
    mySprite1.removeEventListener(Event.ENTER_FRAME,enterFrameHandler);
    mySprite2.removeEventListener(Event.ENTER_FRAME,enterFrameHandler);
    mySprite3.removeEventListener(Event.ENTER_FRAME,enterFrameHandler);
    mySprite4.removeEventListener(Event.ENTER_FRAME,enterFrameHandler);
  }

  private function enterFrameHandler(e:Event):void{
    mySprite0.rotationX += 0.25;
    mySprite1.rotationX += 0.25;
    mySprite2.rotationX += 0.25;
    mySprite3.rotationX += 0.25;
    mySprite4.rotationX += 0.25;
  (略)

5~9の文字も同じような手順で描いています。

何故こんなのを作ったかというと、この文字を使って時計を作れないかなぁ…と思いまして…

ちょっと試してみたんですが、時間が更新されるときに、上手いこと表示されない。(僕のやり方が悪いんでしょうが…)

  1. 時間を取得(秒が05だった場合)する
  2. それを十の桁と一の桁で分ける
  3. それぞれscene.addChild(mySprite0);とscene.addChild(mySprite5);する

これで表示はされるんですが、時間が更新されたとき、文字が残ったままになってしまう(この場合だと5の上に6が表示とかになる)。

removeChildとかしても、上手いこといってくれませんでした。removeEventListenerしてしまうと、時間が更新されないし…

暫く悩んでみることにします。

Progression3でXMLのノードにアクセスする


Progression3でXMLのノード(各要素)にアクセスする方法を、途中で投げ出していたことが、(匿名さんからのコメントで)判明。

思いっきり忘れていたので、反省の意味も込めて、エントリしておきます。

XMLはこんな感じに用意してみました。

<article>
  <items>
    <date>2008/09/26</date>
    <contents>反省の意味を込めてエントリ</contents>
  </items>
  <items>
    <date>2008/09/25</date>
    <contents>すっかり忘れていました!</contents>
  </items>
</article>

以前エントリしたときは、deploy>contentsに「xml」フォルダを作っていたんですが、Progression3(正式版)では、objectsフォルダが新たに作成されているので、その中に入れておきます。

そんでもって、以前にtaka_niumさんに教えていただいた「簡単にXMLを読み込む方法」を使う。

                (略)
addCommand(
  new LoadURL( new URLRequest( "contents/objects/item.xml" ) ),
    function():void {
      trace( this.previous.data );
    }
);

こうすると、出力パネルにはxmlファイルの内容全てが表示される。

contets要素の一番目だけ取り出したいときは、こんな感じにする。

                (略)
addCommand(
  new LoadURL( new URLRequest( "contents/objects/item.xml" ) ),
    function():void {
      var myxml:XML = XML(this.previous.data);
      trace( myxml.items.contents[0] );
    }
);

このようにすると、出力パネルには、<contents>反省の意味を込めてエントリ</contents>のようにタグを含んだ形で表示される。

テキストだけ取り出したいときは、こんな感じにしてあげる。

                (略)
addCommand(
  new LoadURL( new URLRequest( "contents/objects/item.xml" ) ),
    function():void {
      var myxml:XML = XML(this.previous.data);
      trace( myxml.items.contents[0].text() );
    }
);

こうすると、「反省の意味を込めてエントリ」とだけ表示される。

他にもイロイロ方法はあると思いますが…

FIVe3Dの1.0と2.1の違い


前回のエントリに関連して、FIVe3Dの1.0と2.1の違いをまとめてみる。

Drawingクラス(utilsフォルダ)

FIVe3D v1.0 FIVe3D v2.1
polygon
tracePolygon
star -
starPlace -
traceStar -
gradientHorizontalPlain -
gradientHorizontalPlainPlace -
gradientVerticalPlainPlace -
rectanglePlace -
traceRectangle -

2.1のDrawingクラスの詳細については、こちらのエントリ(FIVe3DのDrawingクラス)を参照してください。

ObjectUtilitiesクラス(utilsフォルダ)

FIVe3D v1.0 FIVe3D v2.1
createSprite -
createDynamicText -
initializeProperties

createSpriteクラスやcreateDynamicTextクラスが2.1になると、なくなっている。

geomフォルダ

FIVe3D v1.0 FIVe3D v2.1
Angle -
Matrix Matrix3D
Point Point3D

このようにgeomフォルダ内では、1.0の際にはあったAngleクラスが2.1ではなくなっている。

MatrixクラスもMatrix3Dクラスへ、PointクラスもPoint3Dクラスへと名称を変えています。

geomフォルダ内は、まだ中身を詳しくみていないので、とりあえずこんな感じ。

displayフォルダ

FIVe3D v1.0 FIVe3D v2.1
DisplayObject Bitmap3D
DisplayObjectContainer Graphics3D
DynamicText DynamicText3D
InteractiveObject Video3D
Motif Sprite2D
Sprite Sprite3D
Scene Scene3D
Shape Shape3D

このフォルダ内もかなり変更されている。(※左の1.0のクラスが、同じ列の右側の2.1のクラスに変更になったとは限りませんのでご注意を!)

2.1のShape3DやSprite3Dについては、こちらの記事(FIVe3Dについてのメモ)を参照してください。
まだ詳しく調べていないクラスが沢山あるので、調べ終わり次第、追記していく予定。

Home > Archives > 2008-09

Search
Feeds
Meta

flashDevelopスポンサー

Return to page top