Форум 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=211136)

бакуард 01.07.2015 20:26

добавление кнопки через класс
 
Доброго времени суток!!!

В графическом редакторе Adobe Flash CS4 нарисовал кнопку и преобразовал её в Button и в строке Class задал имя нового класса для этой кнопки BuildVertical, после строки Base Class указал flash.display.SimpleButton. На сцене экземпляр этой кнопки не размещал.
Далее создал файл as с названием BuildVerticalClass со следующим содержанием:
Код AS1/AS2:

package CellAndRoadPG.gameButtonsPG{
 
        import flash.display.Sprite;
        import flash.events.MouseEvent;
 
        public class BuildVerticalClass extends BuildVertical{
 
                private var buildVertical = new BuildVertical;
 
                public function BuildVerticalClass(){
                        buildVertical.x = 30;
                        buildVertical.y = 860;
                }
        }
}


В главном классе прописал (главный класс называется Main):
Код AS1/AS2:

package cellAndRoadPG{
 
        import cellAndRoadPG.cellPG.*;
        import cellAndRoadPG.roadPG.*;
        import CellAndRoadPG.gameButtonsPG.*;
        import flash.display.MovieClip;
        import flash.events.Event;
        import flash.events.MouseEvent;
 
        //какой-то код
 
      /////////////////////////////СТРОИТЕЛЬСТВО ДОРОГИ/////////////////////////////////////////////
        internal function fPlaceButtons(e:Event){
                        var buildVertical:BuildVerticalClass = new BuildVerticalClass();
                        main.addChild(buildVertical);
                    main.removeEventListener(Event.ENTER_FRAME, fPlaceButtons);
            }
        }
}

На этапе компиляции появляются следующие ошибки:
1046: Type was not found or was not a compile-time constant: BuildVerticalClass.
1180: Call to a possibly undefined method BuildVerticalClass.

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

Wolsh 01.07.2015 23:06

Непонятно, зачем Вы в экземпляре BuildVerticalClass создаете новый экземпляр BuildVertical, если BuildVerticalClass расширяет BuildVertical, то есть по сути им и является.
К тому же этому экземпляру BuildVertical задаются координаты, но в список отображения он не добавляется (где addChild() ?)

dimarik 01.07.2015 23:38

Меня тоже поначалу смутили эти обстоятельства, но я за него отвечу: а почему бы и нет? Ничего ломаться не должно.

Wolsh 02.07.2015 00:36

Я тоже себе отвечу: нет addChild(), потому что SimpleButton не контейнер.
Насчет ошибок — надо бы структуру пакетов сверить, например вот:
package CellAndRoadPG.gameButtonsPG
но
import cellAndRoadPG.cellPG.*;
там что, две папки с почти одинаковым названием?

бакуард 02.07.2015 11:09

Изменил структуру папок: класс BuildVerticalClass находится в папке с именем gameButtonsPG, которая в свою очередь находится в папке с именем сellAndRoadPG.

Теперь в классе BuildVerticalClass прописано:
Код AS3:

package сellAndRoadPG.gameButtonsPG{
 
        import flash.display.Sprite;
        import flash.events.MouseEvent;
 
        public class BuildVerticalClass extends BuildVertical{
 
                public function BuildVerticalClass(){
                        buildVertical.x = 30;
                        buildVertical.y = 860;
                }
        }
}

А в классе Main:
Код AS3:

package cellAndRoadPG{
 
        import cellAndRoadPG.cellPG.*;
        import cellAndRoadPG.roadPG.*;
        import сellAndRoadPG.gameButtonsPG.*;
        import flash.display.MovieClip;
        import flash.events.Event;
        import flash.events.MouseEvent;
 
//какой-то код
 
/////////////////////////////СТРОИТЕЛЬСТВО ДОРОГИ/////////////////////////////////////////////
        internal function fPlaceButtons(e:Event){
                        var buildVertical:BuildVerticalClass = new BuildVerticalClass();
                        main.addChild(buildVertical);
                    main.removeEventListener(Event.ENTER_FRAME, fPlaceButtons);
            }
        }
}

Добавлено через 7 минут
Теперь появилась ошибка 1172: Definition сellAndRoadPG.gameButtonsPG could not be found.

caseyryan 02.07.2015 11:34

Чтобы таких конфузов не возникало, надо именовать все по конвенциям. Названия пакетов нужно всегда писать только маленькими буквами слитно

Wolsh 02.07.2015 11:43

Когда одну букву с заменяешь, главное чтобы русская раскладка не стояла)))

бакуард 02.07.2015 12:28

Спасибо Wolsh! И вправду, когда заменял большую "С" на маленькую, стояла русская раскладка)))
Исправил. Ошибок больше не выдаёт, но на сцене кнопка не отображается.Хотя в классе Main присутсвует метод addChild.
Выше вы здесь писали:
Цитата:

Я тоже себе отвечу: нет addChild(), потому что SimpleButton не контейнер.
Я так понял мне следует заменить SimpleButton на Button, т.е. прописать в флеш библиотеке у символа кнопки с классом BuildVertical, в строке Base Class flash.display.Button (если я правильно ввел имя этого класса)))


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

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