0

私はアクションスクリプトが初めてです。私がやろうとしているのは、Wolfram のルール 184 に従って、2 車線の交差点付近の交通の流れをシミュレートすることです。まず、グリッド (交差点が中央の 2 行と中央の 2 行の間にある 8x8プラス記号のような列) のセルには、次の属性があります。

color = white;
car = false;
when clicked:
 color = red;
 car = true (a car is present);

したがって、ユーザーがセルをクリックして最初に車を配置し、開始ボタンを押すと、シミュレーションが開始されます。

これまでの私のコードは次のとおりです(フォーマットが正しくないことをお詫びします):

class Main 
{
private var parent:MovieClip;

public static function main(mc:MovieClip) 
{
    var app = new Main(mc);
}

public function Main(mc:MovieClip) 
{
    this.parent = mc;

    //grid settings
    var Cell:MovieClip = mc.createEmptyMovieClip("cell", mc.getNextHighestDepth());
    var x:Number = 0;
    var y:Number = 0;
    var color:Number = 0xffffff;
    var car:Boolean = false;
    for (y = 0; y < 3 * Stage.height / 8; y += Stage.height / 8)
    {
        for (x = 3*Stage.width/8; x < 5*Stage.width/8; x+=Stage.width/8)
        {
            UI.drawRect(Cell, x, y, (Stage.width / 8) - 5, (Stage.height / 8) - 5, color, 100);
        }
    }
    for (y = 3*Stage.height/8; y < 5 * Stage.height / 8; y += Stage.height / 8)
    {
        for (x = 0; x < Stage.width; x+=Stage.width/8)
        {
            UI.drawRect(Cell, x, y, (Stage.width / 8)-5, (Stage.height / 8)-5, color, 100);
        }
    }
    for (y = 5*Stage.height/8; y < Stage.height; y += Stage.height / 8)
    {
        for (x = 3*Stage.width/8; x < 5*Stage.width/8; x+=Stage.width/8)
        {
            UI.drawRect(Cell, x, y, (Stage.width / 8)-5, (Stage.height / 8)-5, color, 100);
        }
    }
    Cell.onMouseDown()
    {
        Cell.color = UI.RED;
        Cell.car = true;
    }
}
}

ここでかなり多くのことがうまくいかなかったことを知っています。まず、マウスを押してもセルの色が変わりません。for ループ内のセルごとにムービー クリップを作成する必要がありますか? 特定の属性を持つオブジェクトのグリッドを作成する方が簡単だと思いますが、その方法がわかりません。誰かが私を助けてくれたら本当にありがたいです。

4

1 に答える 1

0

私の知る限り、現在のアプローチの問題は、drawRect()を使用すると、文字通りピクセルがステージに描画されることです。つまり、将来のフレームではそれらの形状を参照できなくなります。現在、何度も描画されているMovieClipが1つあります。必要なのはたくさんのMovieClipsなので、すべてのフレームを更新/編集できる各セルへの参照があります。

あなたの最善の策は次のことをすることです(私はAS2構文に少し不安定なので、私はただ疑似を提供します):

A)すべてのセルを保持する配列を作成します。あれを呼べ:

var Cells:Array = new Array();

B)コンストラクターのループの各ステップで、4つのことを実行します。

1)新しいMovieClipを作成します `var tempCell:MovieClip = new MovieClip();

2)各MovieClipに長方形を描画します:AS2のグラフィックAPIのチュートリアルhttp://www.actionscript.org/resources/articles/727/1/Drawing-shapes-with-AS2/Page1.html

3)共通のイベントハンドラーを指すイベントリスナーを各MovieClipに追加します。このリスナーは、そのMovieClip(またはMOUSE_DOWN)でのマウスクリックをリッスンします

4)を使用Cells.push(tempClip)して、その新しいMovieClipを配列に追加します。これにより、すべてのセルへの参照を含む1つのオブジェクトが作成されます。

C)クリックされたセルを再描画するクリックイベントハンドラーを作成します。試すMouseEvent.target

グラフィックAPIを使用して長方形を描画する別のオプションがあります。それは、Flashライブラリにストックグラフィックを追加および削除するだけです。これらのグラフィックをFlashで描画してから、「ExportforActionscript」で呼び出す必要があります。

これがあなたを正しい方向に向けることを願っています!

J

于 2011-07-05T16:18:59.657 に答える