facebook twitter hatena line google mixi email

Flash/as2

提供: 初心者エンジニアの簡易メモ
移動: 案内検索

asメモ

コーディングについて

基本スタイル

var str:String = "test";
var o:Array = [1, 2, 3];
var o:Object = {a: 1, b: 2, c: 3};
for (var i:int = 0; i < 3; i++)
{
doSomething(i);
}
function getId():String
{
  return "test";
}

型自由の型宣言はこのように

var value:*;

MCなどの名前は_mcなどとしない。borderSkinなどとする。

コーディング規約URL http://www.trick7.com/blog/2008/03/14-131809.php

クラスの書き方

Class1.asを以下のように

class Class1
{
  public var id:Number = 1;  // プロパティ
  private var pid:Number = 2;
  public function Class1(str:String)
  {
    trace("コンストラクタ" + str);
    this._private1()
  }
  public function getId():Number
  {
    return this.id;
  }
  // プライベートメソッド
  private function _private1():Void
  {
    trace("private");
  }
  // 静的メソッド
  public static function static1():Void
  {
    trace("static");
  }
}

test.flaを以下のように

var c:Class1 = new Class1("a");
trace(c.id);
trace(c.getId());
// static
Class1.static1();

クラスを置くディレクトリを変更

asディレクトリにClass1.asを置きたい場合

Class1.asを以下のように

class as.Class1
{
}

test.flaを以下のように

var c:as.Class1 = new as.Class1();

以下のようにすることも可能(コチラがコーディング規約で推奨)

import as.Class1;
var c:Class1 = new Class1();

クラスの継承

class MyClass1 extends Class1
{
  public function MyClass1(str:String)
  {
    super(str);  // 親コンストラクタへ
  }
  public function addMethod1():Void
  {
    trace("add");
  }
}
var c:MyClass1 = new MyClass1("a");
c.addMethod1();
class as.MyClass1 extends as.Class1 // ディレクトリが違う場合

$(LocalData)/Classesとは

環境設定/actionscript/as2設定

C:\Documents and Settings\usr\Local Settings\Application Data\Macromedia\Flash 8\ja\Configuration\Classes

初期読込ファイル

toplevel.as

トップムービークリップクラス

ライブラリのシンボルを右クリックで、 リンゲージを開く。 as2.0クラスを設定する ここでdir1.MyMovieClipと入れると、 ./dir1/MyMovieClip.asが読み込まれる

例)MyMovieClip.fla トップシンボルからリンゲージas2にMyMovieClipを設定する。

test1.asに

class dir1.MyMovieClip extends MovieClip
{
  public function MyMovieClip()
  {
    trace("よみこみ");
    method1();
  }
  public function method1():Void
  {
    trace("method1");
  }
  public function onEnterFrame():Void
  {
    this._rotation += 2;
  }
  public function onRelease()
  {
    trace("releace");
  }
}

を設定 MyMovieClipのムービークリップをステージに設置。 コンパイルするとasが設定される。

MCクラス内から子ムービークリップを操作する

class ParentMc extends MovieClip
{
  public var MyChild:MovieClip;
  public function ParentMc() {
    MyChild = this["MyChild"];
    MyChild._rotation=100;

MCクラス内にライブラリのMCを設定

this.mc1 = this.attachMovie("mc1", "mc1", 300);
trace(this.mc1._x);

クラスからクラス呼び出し

class dir1.MyMovieClip extends MovieClip
{
  public function MyMovieClip()
  {
    var c:Class1 = new Class1;
    c.method1();
  }
}
class Class1
{
  public function Class1() {
    trace("constractor");
  }
  public function method() {
    trace("method1");
  }
}

x,yを設定したままattach

this.attachMovie("mc", "mc", 1, {_x: 150, _y: 90});

イベント制御クラス

import mx.events.EventDispatcher を使うとaddEventListenerが使える

例)

// mc1ムービークリップを用意しておく
import mx.events.EventDispatcher;
  var objDispatcher:Object = {};
EventDispatcher.initialize(objDispatcher);
objDispatcher.addEventListener("onEvent1", mc1);
mc1.onEvent1 = function(objEvent:Object):Void {
  trace("onEvent1実行");
  trace(objEvent.param1);
};
objDispatcher.dispatchEvent({type:"onEvent1", target:mc1, param1:"param_a"});

コンポーネント作成方法

コンポーネントしたい物をMCで作成し、 スクリプトをclassで用意、 リンゲージ設定を行い、 ライブラリから右クリックでコンポーネント定義を行う。 書き出したい場合は、swc書き出しを行う。 書き出しを行い再起動すると、コンポーネントパネルに表示される。

イベント削除

this.onRelease = function() {
   delete this.onRelease;
};

X秒間隔でイベントを発生させる

var intervalId:Number = setInterval(this, "_event1", 3000); // 3秒
function _event1():Void {
  trace("interfal1");
}
clearInterval(intervalId);  // イベント削除

flashにダイレクトに画像を表示させたい時

mc1をhtml許可にして

mc1.htmlText = "<img src='Winter.gif'>test<a href='http://www.example.com'><u><font color='#0000ff'>test</font></u></a>";

カラー部分に変数を入れる

beginFill(Number("0x" + color));

文字列検索

url = "file:///";
if (url.indexOf("file:") > -1) trace("match");

IMEが有効なら切る

if (System.IME.getEnabled()) {
    System.IME.setEnabled(false);
}

IMEで半角英数でないとき

if (System.IME.getConversionMode() != System.IME.ALPHANUMERIC_HALF) {
    // 半角英数に変換
    System.IME.setConversionMode(System.IME.ALPHANUMERIC_HALF);
}

AS2プリローダークラス(ローディング

class lib.Preloader extends MovieClip {
  // ローダーMC
  var _loader:MovieClip;
  // constructer
  public function Preloader() {
    _init();
    onEnterFrame = function() {
      // ロード率
      var per:Number = Math.floor(_root.getBytesLoaded() / _root.getBytesTotal()) * 100;
      _loader._width = Math.floor(140 * per / 100);
      if (_root.getBytesLoaded() == _root.getBytesTotal()) {
        delete this.onEnterFrame;
        _root.gotoAndStop('main');
        // removeMovieClip(this);// attachMovieで配置したときのみ有効
      }
    }
  }
  private function _init() {
    // 枠表示
    var _mc:MovieClip = this.createEmptyMovieClip('preloader', 100);
    _mc.beginFill(0xFFFFFF, 100);
    _mc.lineStyle(1, 0x444444, 100);
    _mc.moveTo(0, 0);
    _mc.lineTo(0, 20);
    _mc.lineTo(150, 20);
    _mc.lineTo(150, 0);
    _mc.endFill();
    
    //  ロードーMC
    _loader = this.createEmptyMovieClip('loader', 200);
    _loader.beginFill(0x555555, 100);
    //_loader.lineStyle(1, 0x000000, 100);
    _loader.moveTo(0, 0);
    _loader.lineTo(0, 10);
    _loader.lineTo(10, 10);
    _loader.lineTo(10, 0);
    _loader.endFill();
    _loader._y = 5;
    _loader._x = 5;
    
  }
}

as2アラートダイアログサンプル

// 利用方法
// 警告ダイアログクラス
// import app.model.AlertDialog;
// var _alert = new AlertDialog(_stage);
// _alert.display("テスト");

// コンポーネントボタンクラス
import mx.controls.Button;

// 警告ダイアログクラス
class app.model.AlertDialog {
  // ステージMC
  private var _stage:MovieClip;
  // ボタン
  private var _button:Button;
  
  // constructer
  public function AlertDialog(st:MovieClip) {
    _stage = st;
  }
  // アラートダイアログ表示
  public function display(msg:String):Void {
    var _mc:MovieClip = _stage.createEmptyMovieClip("alert", _stage.getNextHighestDepth());
    _mc.beginFill(0xFFFFFF, 100);
    _mc.lineStyle(1, 0x000000, 100);
    _mc.moveTo(0, 0);
    _mc.lineTo(0, 70);
    _mc.lineTo(160, 70);
    _mc.lineTo(160, 0);
    _mc.endFill();
    _mc._x = Stage.width / 2 - _mc._width / 2;
    _mc._y = Stage.height / 2 - _mc._height / 2;
    
    // ラベル
    var _label:TextField = _mc.createTextField("label", 1, 0, 0, 150, 40);
    // 折返許可
    _label.wordWrap = true;
    // 複数行
    _label.multiline = true;
    _label.text = msg;
    
    // OKボタン生成
    _button = _mc.createClassObject(Button, "button2", 5, {label:"OK"});
    _button._y = _label._y + _label._height;
    _button._x = _mc._width / 2 - _button.width / 2;
    
    // OKボタンをクリックしたとき
    _button.onRelease = function():Void {
      // ダイアログ削除
      this._parent.removeMovieClip();
    }
  }
}