2011-06-05 39 views
0

我是新来的动作。我试图做的是模拟2车道交叉口附近的交通流量,遵循Wolfram的规则184.首先,我试图创建一个网格(8x8的交叉点在中间两排和中间两条之间列,就像一个加号),其细胞具有以下属性:动态网格使用FlashDevelop&Actionscript 2.0

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循环中的每个单元制作影片剪辑?我认为用给定的属性来创建对象的网格会更容易,但我不知道该怎么做。如果有人帮助我,我会很感激。

回答

0

从我所知道的来看,问题与你目前的做法是,使用drawRect()从字面上将像素绘制到舞台上,这意味着您将不会在将来的帧中引用这些形状。现在,你已经有了一个多次绘制的MovieClip。您需要的是大量的影片剪辑,因此您可以参考每个单元,您可以更新/编辑每一帧。

最好的办法是做到以下几点(我只是提供假,因为我在AS2语法有点不稳):

A)创建一个数组来保存所有的细胞。叫它:

var Cells:Array = new Array(); 

B)在你的构造函数的循环的每一步中,做4件事。 1)创建一个新的MovieClip`var tempCell:MovieClip = new MovieClip();

2)到每个影片剪辑绘制一个矩形:在AS2 http://www.actionscript.org/resources/articles/727/1/Drawing-shapes-with-AS2/Page1.html

3),用于在图形API的指南添加事件listenerto指向共同的事件处理程序的每个影片剪辑。此侦听器侦听在该MovieClip(或MOUSE_DOWN)上的鼠标点击,并且使用Cells.push(tempClip)将新的MovieClip添加到您的阵列,以便您现在拥有一个包含对所有单元格的引用的对象。

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

您有另一种使用图形API绘制矩形的选项,那就是简单地从Flash库中添加和删除库存图形。您必须在Flash中绘制这些图形,然后“导出为ActionScript”来调用它们。

希望这点能指引您朝着正确的方向发展!

J