PDA

Просмотр полной версии : КорнеКрабья Беда


KorneKrabb
24.10.2003, 14:57
необходимо чтобы в процессе выполненя скрипта двумерый массив ANE полностью принимал значение массива AOL ...
я путаюсь в синтаксисе AS как только начинаю в нем ковырять --- сразу запарываю весь скрипт
Помогите ПЛЗ...

major
24.10.2003, 18:38
Уточните задачу. Что есть ANE и AOL? Каковы размеры массивов, по каким правилам осуществляется "прием" в массив и что такое этот "прием"?

KorneKrabb
25.10.2003, 01:15
Попытаюсь объяснить....
Игра имеет вид тайловго поля, построенного при помощи двумерного массива(ANE ). При переходе игрока с одного поля на другое необходимо чтобы текущий массив был скопирован в массив AOL а сам ANE при этом примет новые значения...
Грубо говоря,
Новое поле строится генератором случайных чисел (random) , а текущая карта должна сохранятся в отдельном массиве...

По задумке должно запоминаться несколько посещенных карт

.....
теоритически у меня вроде все сходиться и должно работать но как только доходит до AScript получается нелепица.
наверное дело в синтаксисе.
поэтому я спросил как заставить некий двумерный массив полностью перенять все значения другого....

Алексей Бирюков
25.10.2003, 19:04
Если у тебя синтаксическая ошибка, смотри окошко output.
Покажи актуальный кусок скрипта, что-ли.

KorneKrabb
28.10.2003, 02:24
map01 = new Array();
for (j=1; j<=13; j++) {
for (i=1; i<=13; i++) {
cot = cot+1;
duplicateMovieClip("_root.baseblox", "baseblox00"+cot, 1000+cot);
setProperty("baseblox00"+cot, _x, 50+i*30);
setProperty("baseblox00"+cot, _y, 50+j*30);
cotar = "baseblox00"+cot;
zoo = Math.floor(Math.random()*100)+1;
map01[i][j] = zoo;
trace(map01[i][j]);
tellTarget (cotar) {
gotoAndStop(_root.zoo);
}
}
}
это часть кода строящая лабиринт и по идее двумерный массив, но trace(map01[i][j]); выводит лишь - undefined . почему ?

Алексей Бирюков
28.10.2003, 16:46
Попробуй добавить такую строку:

for (j=1; j<=13; j++) {
map01[j] = new Array(); // NEW!
for (i=1; i<=13; i++) {


Смысл: двумерный массив есть массив строк. Но каждая из этих строк - опять же массив, и его надо создавать.

KorneKrabb
29.10.2003, 10:41
Интересная идея.
и если j это координата y , а i это x
то как правильно найти значение в точке x=13,y=5 ?

Алексей Бирюков
29.10.2003, 17:16
Циклы надо поменять местами, конечно.

for ( i =1; i <=13; i++) {
map01[i] = new Array();
for (j =1; j <=13; j++) {


иначе здесь

map01[i][j] = zoo;

идет работа со строкой, которая еще не создана.

KorneKrabb
30.10.2003, 01:13
Алексей Бирюков многочисленные спасибы.
.... Наконец то вместо Undefined появились цифры в output'e
А если написать дальше
map02 = new Array;
map02 = map01;


то будет ли скажем map02[5][12] = map01[5][12] ?

Алексей Бирюков
30.10.2003, 15:41
Эти две строчки эквивалентны одной

map02 = map01;

Дело в том, что переменная map02 есть указатель. В первой строке ты направляешь его на создаваемый массив, а во второй перенаправляешь на тот же массив, на который указывает map01. Равенство map02[5][12] == map01[5][12] выполнятся будет, но у тебя не два массива а один, но с двумя именами. Это как два ярлыка к одному файлу.

KorneKrabb
31.10.2003, 01:18
хм, тогда как создать новый массив (map02) и скопировать туда все значерия map01 ?

Алексей Бирюков
31.10.2003, 17:00
Посимвольно, как.

newMap = new Array();

for ( i =1; i <=13; i++) {
newMap[i] = new Array();
for (j =1; j <=13; j++)
newMap[i][j] = newMap[i][j];
}