Динамическая сетка с использованием FlashDevelop & Actionscript 2.0 - PullRequest
0 голосов
/ 05 июня 2011

Я новичок в ActionScript. То, что я пытаюсь сделать, это симулировать транспортный поток возле перекрестка с 2 полосами, следуя правилу Вольфрама 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;
    }
}
}

Я знаю, что здесь довольно много проблем. Прежде всего, цвет ячейки не меняется при нажатии мыши. Нужно ли делать клип для каждой ячейки в циклах? Я думаю, что было бы легче создать сетку объектов с заданными атрибутами, но я не знаю, как это сделать. Буду очень признателен, если кто-нибудь поможет мне.

1 Ответ

0 голосов
/ 05 июля 2011

Из того, что я могу сказать, проблема с вашим текущим подходом заключается в том, что использование drawRect () буквально рисует пиксели на сцене, что означает, что вы не будете иметь ссылки на эти фигуры в будущих кадрах.сейчас у вас есть один мувиклип, который был нарисован много раз.Вам нужно много мувиклипов, поэтому у вас есть ссылка на каждую ячейку, которую вы можете обновлять / редактировать в каждом кадре.

Лучше всего сделать следующее (я просто предоставлю псевдо, потому что янемного неуверенно в синтаксисе AS2):

A) Создайте массив для хранения всех ячеек.Назовите это:

var Cells:Array = new Array();

B) На каждом шаге циклов в вашем конструкторе, сделайте 4 вещи.

1) Создайте новый MovieClip `var tempCell: MovieClip = new MovieClip ();

2) Нарисуйте прямоугольник для каждого MovieClip: учебное пособие для графического API в AS2 http://www.actionscript.org/resources/articles/727/1/Drawing-shapes-with-AS2/Page1.html

3) Добавьте прослушиватель событий в каждый мувиклип, который указывает на общий обработчик событий.Этот слушатель прослушивает щелчки мышью на этом MovieClip (или MOUSE_DOWN)

4) и использует Cells.push(tempClip), чтобы добавить этот новый MovieClip в ваш массив, чтобы у вас теперь был один объект, содержащий ссылку на все ваши ячейки.

C) Создайте обработчик события щелчка, который перерисовывает ячейку, по которой щелкнули.Попробуйте MouseEvent.target

У вас есть еще одна возможность использовать графический API для рисования прямоугольников, а именно просто добавлять и удалять стоковую графику из вашей библиотеки Flash.Вам нужно будет нарисовать эту графику во Flash, а затем «Export for Actionscript», чтобы вызвать их.

Надеюсь, это направит вас в правильном направлении!

J

...