0

我是动作脚本的新手。我想做的是模拟 2 车道交叉口附近的交通流量,遵循 Wolfram 的规则 184。首先,我试图创建一个网格(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,因此您可以参考可以更新/编辑每一帧的每个单元格。

您最好的选择是执行以下操作(我将只提供伪,因为我对 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 添加到您的数组中,这样您现在就拥有一个包含对所有单元格的引用的对象。

C) 创建一个单击事件处理程序,用于重绘已单击的单元格。尝试MouseEvent.target

您还可以选择使用图形 API 绘制矩形,即从 Flash 库中简单地添加和删除库存图形。您必须在 Flash 中绘制这些图形,然后“导出为 Actionscript”才能调用它们。

希望这会为您指明正确的方向!

Ĵ

于 2011-07-05T16:18:59.657 回答