Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Создание экземпляров классов: работа с пакетами (http://www.flasher.ru/forum/showthread.php?t=115053)

DenKoren 17.08.2008 21:14

Создание экземпляров классов: работа с пакетами
 
Есть описание класса:

Код:

package FlashModels3D.Objects3D{
        import FlashModels3D.Vertex3D;
        class Cube3D extends Vertex3D {

        ...

        }
}

И есть главный класс:

Код:

package Classes{
        ...
        import FlashModels3D.ObjectsArea3D;
        import FlashModels3D.Objects3D.Cube3D;
        ...

        public class MainClass extends Sprite {
                public var workArea:ObjectsArea3D;
                public function MainClass() {
                        workArea = new ObjectsArea3D("WA",60,60);
                        addChild(workArea);
                        var p:Cube3D;
                }
        }
}

В нем без проблем создается экземпляр класса ObjectsArea3D. При попытке создания экземпляра класса Cube3D выдает ошибку в описании класса Cube3D:
1017: The definition of base class Vertex3D was not found.

При убирании в описании класса Cube3D package:
Код:

import FlashModels3D.Vertex3D;
class FlashModels3D.Objects3D.Cube3D extends Vertex3D {

        ...

}

Вылезает другая ошибка, относящаяся уже к строке var p:Cube3D класса MainClass:
1046: Type was not found or was not a compile-time constant: Cube3D.
Замена строки
Код:

var p:Cube3D;
на
Код:

var p:FlashModels3D.Objects3D.Cube3D;
пользы не принесла.
Судя по тому, что объект класса ObjectsArea3D создается успешно - пути classpath в настройках Flash указаны верно.

Если такие проблемы уже обсуждались на форуме - киньте прямой линк. Тучу времени угробил на поиск - не нашел.
Заранее благодарен за помощь.

wvxvw 17.08.2008 21:43

1. имена пакетов - все строчные буквы (маленькие).
2. в объявлении класса нужно использовать только локальное имя т.е.:
Код:

package mypackage.mysubpackage.mysubsubpackage
{
public class MyClass
{

}

3. в extends можно писать как полное так и локальное имя класса, писать полное имя нужно только в том случае, если у вас есть 2+ пакетов с классами с одинаковыми названиями (но лучше исправить названия классов, если это возможно).
4. аналогично с объявлениями переменных, использовать полное имя класса нужно только если могут возникнуть конфликты имен. Пример:
Код:

import flash.display.Sprite;
import my.graphicpackage.Sprite;
var mySprite:my.graphicpackage.Sprite = new my.graphicpackage.Sprite();
var flashSprite:flash.display.Sprite = new flash.display.Sprite();

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

DenKoren 31.08.2008 17:52

Помогло описание класса Vertex3D как publiс. Остальное действия не имело. Спасибо за помощь.


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

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