
19.10.2001, 21:13
|
|
Регистрация: Sep 2001
Адрес: Минск, РБ
Сообщений: 106
|
Для первого проекта не так уж плохо. Ошибку пока не обнаружил.
Но есть некоторые замечания общего плана.
Первое.
Чувствуется стиль программирования от PHP & Delfi - к сожалению
во флэше это не всегда плюс. Во всех введениях во флэш отсутствует
одно принциальное упоминание об отличии программирования во флэш и
в большинстве всех остальных языков, даже с похожим синтаксисом,
например, JavaScript. Это реально программирование хоть и псевдо
но все-таки многопоточной параллельной системы системы. Все остальные
известные мне языки на самом деле линейны в принципе, и многопоточность
там реализуется специальными средствами, и, самое главное, сознательно.
Во флеше ты сразу же, без предупреждения, попадаешь в мир параллельного
программирования. Это очень удобно, но и достаточно опасно. О синхронизации процессов как-то не думаешь.
Второе.
Основные тормоза у тебя из-за функции getName(). Точнее из-за ее
реализации. Флэш - интерпретатор и работа со строками в нем
реализована достаточно медленно. А у тебя substring используется
слишком часто и не по делу. За удобство работы с именами, приходится
заплатить скоростью. Можно конечно чуть-чуть ускорить заменив
substring на substr - она хотя и депрекейтет, но на самом деле
substring реализованно именно через нее. Но лучше менять
кардинально - "Самая лучшая, самая надежная, самая дешевая деталь в
танке - та которой НЕТ" - принцип создателей танка Т-34 (я думаю
это о чем-то тебе говорит). Поэтому выбрасываем getName() совсем
и заменяем ее другой и немного усложняем инициализацию(она точно
выполняется один раз - так что не должна тормозить в принципе)
Там где ты инициализируешь board1 можно записать следущее
myBoard = new Array()
for (var counter = 0; counter<8; counter++)
{ myBoard[counter] = new Array()
for (var counter2 = 0; counter2<8; counter2++)
{ myBoard[counter][counter2] = 0
}
}
myName = new Array()
myName[0] = "" //not used but may be usefull
myBoard[0][0] = 1
myName[1] = _level0.blue00_64._name;
myBoard[0][2] = 2
myName[2] =_level0.blue10_65._name;
myBoard[0][4] = 3
myName[3] = _level0.blue20_66._name;
myBoard[0][6] = 4
myName[4] = _level0.blue30_67._name;
myBoard[2][0] = 5
myName[5] = _level0.blue00_68._name;
myBoard[2][2] = 6
myName[6] = _level0.blue10_69._name;
myBoard[2][4] = 7
myName[7] = _level0.blue20_70._name;
myBoard[2][6] = 8
myName[8] = _level0.blue30_71._name;
myBoard[1][1] = 9
myName[9] = _level0.blue00_72._name;
myBoard[1][3] = 10
myName[10] = _level0.blue10_73._name;
myBoard[1][5] = 11
myName[11] = _level0.blue20_74._name;
myBoard[1][7] = 12
myName[12] = _level0.blue30_75._name;
myBoard[5][1] = -13
myName[13] = _level0.red00_76._name;
myBoard[5][3] = -14
myName[14] = _level0.red10_77._name;
myBoard[5][5] += -15
myName[15] = _level0.red20_78._name;
..............
ну и так далее - смысл надеюсь понятен - если значение myBoard[x][y]
равно нулю - это пустая клетка, если больше нуля - синяя шашка
если меньше - красная. А имя можно получить из массива myName:
myName[Math.abs(myBoard[x][y])]
Гарантированно будет работать быстрее, и код будет чище
а инициализацию массива можно сильно подсократить если заполнять
их сразу же там где ты делаешь duplicateMovie.
По поводу не стабильности работы - то у меня подозрение на то как
ты прописываешь путь шашки - потому, что у меня была ситуация,
когда с поля снялась совсем не та шашка которую бил. Но если ты
перейдешь к номерам шашек это наверно будет проще вычислить
так как путь сохраняется и его можно посмотреть в отладчике.
сделай для этого переменную oldPath чтобы она не затиралась
или выводи ее пока в строку статус. Я еще не понял то ли у тебя
ошибка в коде или это все-таки какое-то неудачное взаимодействие
параллельных процессов.
Если подправишь - вышли новую версию. Самому вносить исправления и
отслеживать где это используется нет времени - отпуск на носу
и нужно подогнать все хвосты.
|