Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://tadpolizemedia.blog118.fc2.com/tb.php/168-c920d5d7

-件のトラックバック

-件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

ファイルを分離するとaddChild()できなくなる件について(AS3.0+FlashDevelop)

規模の小さいプログラムであれば1つのasファイルに書いてしまえばいいのですが、
規模が大きくなってくるとメンテの事などを考慮して、新たなクラスを起こしたりする為に
ファイルの一部を別ファイルに分離させる必要が生じることがあります。

Spriteが数個入っているファイルを別asファイルに分離してみたところ、新たに作った
ファイルの中のSpriteがaddChild()できなくなりましたので対処してみました。
結論としては、大したことはありません。修正は簡単です。
ただ、オブジェクト指向プログラミングの考え方を習得している必要があります。
尻込みしないでこれを機会に勉強されてみてはいかがでしょうか。


経緯:2次ベジェ曲線の勉強をしようとサンプルを探してきて打ち込んでみたのですが、
   座標が分からないので、ベジェ曲線がどこを走っているのかを調べたいと思い、方眼罫
   を表示させる処理を追加しました。この方眼罫は将来も使うと判断した為、別ファイル化
   しようとした所、addChild()でエラーが出てコンパイルが通りませんでした。


実行画面:

AS3.0でaddChild()できない件

FlashDevelopでAS3 Project を作った後、以下の2ファイルをコピーして
動作確認してみてください。

Main.as

package
{
import flash.display.Sprite;
import flash.events.Event;

import MyUtil;

/**
* ファイルの分離に伴うaddChild()問題の解決、ならびに方眼罫描画
*
* 2012-01-15
* @author Matsushiro
*/
public class Main extends Sprite
{

public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}

private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point

var myutil:MyUtil = new MyUtil(Sprite(root)); // コンストラクタにSprite(root)を渡す

// 某書籍にあった2次ベジェ曲線描画サンプル
var a_sp:Sprite = new Sprite();
addChild(a_sp);

a_sp.graphics.lineStyle(1, 0xff0000);
a_sp.graphics.moveTo(0, 0);
a_sp.graphics.curveTo(100, 100, 200, 0);
a_sp.graphics.curveTo(300, 200, 400, 0);
// ここまで

myutil.drawMatrix(500, 400); // 横幅 500pix 高さ 400pixel
}

}

}



MyUtil.as

package
{
import flash.display.Sprite;
/**
* 方眼罫を描写する(2012-01-15)
*
* @author Matsushiro
*/

public class MyUtil
{
private var rootsp:Sprite;

public function MyUtil(insp:Sprite) {
this.rootsp = insp;
}

// 方眼罫を描写する
public function drawMatrix(m_width:int, m_height:int):void {

var linex:Sprite = new Sprite();
this.rootsp.addChild(linex); // Main.asから渡ってきた値を使う、ってこと。

// 縦線(m_width)
for (var i1:int = 10; i1 <= m_width; i1 += 10) {
if (i1%100 == 0) linex.graphics.lineStyle(2, 0x0, 0.3); // 100pixel毎に太い線
else linex.graphics.lineStyle(1, 0x0, 0.3);

linex.graphics.moveTo(i1, 0);
linex.graphics.lineTo(i1, m_height);
}

// 横線(m_height)
for (var i2:int = 10; i2 <= m_height; i2 += 10) {
if (i2%100 == 0) linex.graphics.lineStyle(2, 0x0, 0.3);
else linex.graphics.lineStyle(1, 0x0, 0.3);

linex.graphics.moveTo(0, i2);
linex.graphics.lineTo(m_width, i2);
}
}

}

}


対処:
  ・方眼罫作成用のクラスをnewする時に、パラメタ"Sprite(root)"を渡す。(Main.as 28行目)
  ・MyUtil.asにコンストラクタを追加する。(MyUtil.as 12-16行目)
  ・addChild()する時に、Main.asから渡ってきたデータを指定する。(MyUtil.as 22行目)

以上です。

スポンサーサイト
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://tadpolizemedia.blog118.fc2.com/tb.php/168-c920d5d7

0件のトラックバック

0件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

Appendix

プロフィール

 二代目松四郎

Author: 二代目松四郎


「カメラと動画(+スチル写真)」
「音響と音楽」
「プログラミング」
を主なテーマに活動しています。
映画館と美術館と音楽ホールと
古い街並みが私の学校。

宮城県仙台市在住。

カテゴリー

ブログ内検索

ブロとも申請フォーム

この人とブロともになる

Counter

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。