Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Action script 2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=49)
-   -   Можно ли сделать массив из элементов класса? (http://www.flasher.ru/forum/showthread.php?t=56277)

Squirrel 26.03.2004 19:47

Можно ли сделать массив из элементов класса?
 
Можно ли сделать массив из элементов класса?

Nucer 26.03.2004 20:33

1) В смысле из экземпляров?
2) Конечно можно, почему нет.
3) Ты не пробовал попробовать?

Squirrel 26.03.2004 21:46

я создала класс line, в него заносятся координаты начальной и конечной точки, и в нем есть разные методы, например посчитать расстояние от некой точки до этой прямой.

потом я создаю элемент этого класса, например
new_line: line = new line(x,y); - что-то в этом духе.

но когда я пытаюсь запихнуть этот элемент в массив, флеш мне выдает ошибку. Такая запись считается неверной:

lines = new Array();
lines[1] = new_line;

или

lines[1] = new line(x,y); //естественно вместо х и у какие-то числа

Что я делаю неправильно?

mishinaelle 26.03.2004 22:22

давай исходник

Squirrel 27.03.2004 01:42

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

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

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

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

ЗЫ. с классами работаю в первый раз...

Nox Noctis 27.03.2004 02:31

lines[1] = new line(x,y);

эта запись ошибки не вызывает :)
зуб даю :)

только это называется не элемент класса а экземпляр класса

silin 27.03.2004 21:24

lines.push(new line(x,y));

Squirrel 29.03.2004 13:00

to Nox Noctis
Давай зуб, эта запись не работает :)

Если написать так:

lines[i] = new line(x, y);
trace(lines[i].angle());
var line_1:line = new line(x, y);
trace(line_1.angle());

То в первом случае все время выдает undefined, а для line_1 все считает нормально. То же самое для записи:

lines.push(new line(x, y));
trace(lines[i].angle());

Естественно, x, y и i определены до этого.

silin 29.03.2004 19:28

function line(x,y){ this.angle=Math.atan(x/y);}
lines=new Array();
lines.push(new line(1, 2));
trace(lines[0].angle);//0.463647609000806
lines[1] = new line(2, 1);
trace(lines[1].angle);//1.10714871779409

Nox Noctis 29.03.2004 20:15

Цитата:

Оригинал написал(а) Squirrel
to Nox Noctis
Давай зуб, эта запись не работает :)

минутку, не эта запись не работает, а твой код не работает - почувствуйте разницу :))

silin, речь о АС2 и импортированном классе, я так понял

Squirrel 29.03.2004 20:33

Да, речь как раз идет о AS2 и импортированном классе.

to Nox Noctis
Пусть код не работает, а не запись, но вопрос-то остается..

У меня почему-то не получается запихнуть экземпляры класса в массив. Причем если просто создать новый экземпляр, то все методы работают, я проверяла.

Создавала я новые экземпляры так, как сказано в хелпе:

var line_1: line = new line(x,y);

Можно конечно создать псевдо массив, но это будет очень неудобно.

Что же я делаю не так?

iLoveYou 29.03.2004 20:47

Squirrel
 
может, выложишь неработающую часть исходника? :)

Nox Noctis 29.03.2004 20:50

в файле с классом:
Код:

dynamic class line {
        var x:Number;
        var y:Number;
        function line (x,y) {
                trace(arguments);
                this.x = x;
                this.y = y;               
        }
}

в основном файле:
Код:

import line;
//
var a = [];
for (var i = 0; i<10; i++) {
        var new_line:line = new line(i, random(100));
        // можно так
        // a[i] = new_line;
        //
        // или так:
        // a.push(new_line);
        //
        // или так:
        a[i] = new line(i, random(100));
        //       
}

...всё работает :)

silin 29.03.2004 21:04

а в чем собственно разница импортированный класс или сдешний, че-то не въеду (в смысле делает-то тоже самое)

Squirrel 30.03.2004 12:39

Спасибо, что разрулили :)

Получается, это я где-то наглючила.. Буду разбираться.

Squirrel 31.03.2004 13:04

Честно говоря, я так и не поняла, почему у меня раньше не работало..

Получилось так, что в начале ничего не работало, а когда я зашла на комп на следующий день, все заработало. Хотя я ничего вроде бы не меняла.. (Естественно, я перед проверкой кода сохраняла свои файлы..)


Часовой пояс GMT +4, время: 15:18.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.