//なんとなくこんな感じ
public function DrawTest() {
var mc:Mc = new Mc();//ライブラリのmcにMcでリンケージ
var mcW:Number = mc.width
var mcH:Number = mc.height;
var numW:Number = Math.ceil(stage.stageWidth / mcW);
var numH:Number = Math.floor(stage.stageHeight / mcH);
var num:Number = numW * numH;
for (var i = 0; i < num; i++) {
var mc:Mc = new Mc();
addChild(mc);
var j:Number = 0;
mc.x = i % numW * mcW;
mc.y = Math.floor( i / numW ) * mcH;
}
}
DrawTest()
Tags: AS3, Flash
以下のように書くとエラーだった。
1個の関数内で、ParallelExecutorを2個作る。例えばa,b。
function test(){
a:ParallelExecutor = new ParallelExecutor();
b:ParallelExecutor = new ParallelExecutor();
~省略~
a.start();
a.join();
b.start();
b.join();
}
b.join()をコメントアウトするので動くので、1個の関数内で複数joinはダメぽ。
また↓のように関数分けて、next()で移動してもOK(当然か)
function test(){
var a:ParallelExecutor = new ParallelExecutor();
~省略~
a.start();
a.join();
next(test2);
}
function test2(){
var b:ParallelExecutor = new ParallelExecutor();
b.start();
b.join();
}
以下、偉人からのアドバイスメモ(今はまだ全理解しきれてない・・・)
joinのときは A.hoge() -> B.join() -> B.joinMonitor.wait() という感じでBを待つ状態。
Queue的なときはA.hoge() -> B.checkPoll() -> (データが鳴ければ)B.monitor.wait() で待ち状態。
それぞれ waitしようとしたときに、Aがすでに何かの待ちになっているとそれはエラー。
Threadはクラスメソッド内でいろいろしていて、どこかの処理でwaitが呼ばれたときに、呼び元(今動いてる)のThreadを待たせるといのが基本動作。
呼ばれた人が呼んだ人を状況により待たせるイメージ。
あるスレッドは同時に1つのスレッドしか待てない。
逆にあるスレッドを待ってるスレッドは何個でも待てる。
//2009/1/17追記
joint()とsleep()は同時に使えないみたい。
Tags: AS3, Flash, Thread
インスタンスをひとつだけしか生成できない仕組みは以下のようにする。
package
{
import flash.display.Sprite;
public class Singleton extends Sprite {
public static var instance:Singleton;
public function Singleton( pvt:SingletonEnforcer ) {
init();
}
public static function getInstance():Singleton {
if( instance == null ) {
instance = new Singleton( new SingletonEnforcer() );
}
return instance;
}
private function init():void {
trace("シングルトン");
}
}
}
internal class SingletonEnforcer{};//internal 同じパッケージ内でのみ参照可能
//アクセス方法
Singleton.getInstance().init();
参照元:ステージの参照とシングルトン #2
Tags: AS3, Flash
全てのDisplayObjectはstageプロパティを持っている。
ただし表示リストに追加されているDisplayObjectからのみ参照が可能。
addChild前や、removeChildしたDisplayObjectからは参照できない。
参考1:AS3 で stageを参照する場合の注意点:
参考2:ステージの参照とシングルトン #1
元記事
AS2で、attachMovieを使ってステージに配置するとき、リンケージプロパティの、最初のフレームに書き出しにチェックが入っているときの注意。
これは1フレーム目のフレームアクションよりも先に、attachMovieされてしまうということだろうか?
つまり1フレーム目のフレームアクションにローディング処理が書かれていても、先にattachされてしまっているために、attachした分の読み込み状況が確認できないという事態になるのだろう。
対処法は元記事に書かれているとおり。
ただ最初のフレームに書き出しにチェックを外した場合、ステージ上にattachするMCをあらかじめ配置しておかないといけない。
(attachの仕方はこちらもかなり参考になる。)
ということは改めてattachする意味ってあるのか?
最初からステージに置いとけなくてattachがmustなケースってどんなケースだろ。
>追記
クラスをリンケージしたMCを使うときは、このケースがmustっぽいかな。
Tags: AS2, Flash, 未解決
staticとすると、クラスインスタンスを作らなくてもアクセスできるようになる。
例えば、
//カスタムクラス:Test
package {
public class Test {
static public var n:int = 100;
static public var m:int = 200;
public var q:int = 500;
function Test() {
plus();
}
function plus() {
trace("test:"+q);
}
}
}
//メインのタイムライン
trace(Test.n);
var test:Test = new Test();
出力は、
100
test:500
となり、クラスのインスタンスを作る前に直接に変数を値を取得できる。
使い道としては、子クラスから親クラスのプロパティ値を取得したいときとか。
でも、親クラスのプロパティがスタティックだらけになってなんか気持ち悪い気が・・・
(他に取得方法はあるのだろうか?parrentとか?)
あと使ってて気づいた点。
staticは関数にも使えるが、その際、そこで扱う変数もstaticの必要があるっぽい。
例えばさっきのカスタムクラスのfunction plusをstaticにすると。。。
qがstaticではないので、
未定義のプロパティqへのアクセスです、
と怒られる。
なので、qをstaticにすると大丈夫らしい。
//これでOK
package {
public class Test {
static public var n:int = 100;
static public var m:int = 200;
static public var q:int = 500;
function Test() {
plus();
}
static function plus() {
trace("test:"+q);
}
}
}
よくわからんな・・・
Tags: AS3, Flash
//PHP(read.php)
<?php
$rss = @file_get_contents('http://http://memo.393.bz/?feed=rss2');
print $rss;
?>
※もしくはこっちでもOK
<?php
//ファイルを開く(UNIXではモードを r に変更)
if (!($fileTxt = fopen ("consume.xml", "rb"))) {
die("ファイルが開けません。");
}
//ファイルの読み込み
while (!feof($fileTxt)) {
$vTxt = fread ($fileTxt, 4096);
}
//ファイルを閉じる
fclose($fileTxt);
//ファイルの出力
echo $vTxt;
?>
//AS(ステージにインスタンス名_txtのダイナミックテキストを配置)
var urlLoader:URLLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, xComplete);
function xComplete (e:Event):void {
var xml:XML= new XML(e.target.data);
_txt.text = xml;
}
urlLoader.load(new URLRequest("read.php"));
Tags: AS3, crossdomain, PHP
//XMLからノードを抜き出したものがXMLListとなるらしい。
//抜き出したノードはXMLListに代入できる
var xml:XML=
<data1>
<node>Node1</node>
<node>Node2</node>
</data1>;
var xmllist:XMLList = new XMLList();
xmllist = xml.node;
//でもXMLに代入はできない。
var xml:XML=
<data1>
<node>Node1</node>
<node>Node2</node>
</data1>;
var xml1:XML = new XML();//XMLではダメ。
xml1 = xml.node;
//2008/1/15追記
//これならXMLとなる
xml1 = xml.node[0];
Tags: AS3, Flash, XML, XMLList
mcを入れ子にした状態でも可能。
たとえば子のMCのフレームアクションで定義した変数や関数にも親MCのフレームアクションでアクセスするもOK。
test();
function test(){
trace("i="+i);//出力:i=0(intの初期値は0)
}
var i:int;
※変数の初期化はできるけど代入はできないみたい。
test();
function test(){
trace("i="+i);//出力:i=0(intの初期値は0)
}
var i:int = 5;//5を代入しても、traceでは0となる。
Tags: AS3, Flash
var mc:MovieClip = new MovieClip();
this.addChild(mc);
//removeChildして、nullを代入すること
this.removeChild(mc);
mc= null;
Tags: AS3, Flash