Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Управление графикой с помощью классов - без addChild() (http://www.flasher.ru/forum/showthread.php?t=185358)

dvrbear 10.10.2012 22:22

Управление графикой с помощью классов - без addChild()
 
Есть SWC подключенный к FD.
В SWC зашита графика Main(Мувиклип) в которой вручную добавлены три объекта(Мувика) Clon1, Clon2, Clon3.
Для Main и для каждого из Clon есть AS файлы с их классами.
Main после прелодинга успешно попадает на сцену и ведет себя в соответсвие с Main.as
Мувики (Clon1 2 3) также стоят на своих местах - как я их и расставил внутри Main.

Нигде никаких ошибок не выдается - но почемуто поведение описанное для ClonX не срабатывает

Подозреваю что их необходимо также через код addChild() на сцену - но вопрос в том:
Разве нельзя обойтись без добавления на сцену программно так, чтоб Мувиклипы автоматом подхватывали и исполняли предписамные им классы в библиотеке?

Например у меня есть игра в которой целая куча предметов (ящики, столы, стулья) расставленные мной в ручную для каждой стадии, при этом программно (ВСЛЕПУЮ) расставлять хаотично разбросанные объекты былобы очень сложно

in4core 11.10.2012 01:59

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

dvrbear 11.10.2012 11:11

"управляемый класс extends ваш графический класс"

Вот это уже ближе к делу.
Но при этом нужно будет добавлять на сцену управляющие классы?

Больше интересует даже вопрос как заставить эти Clons начать двигаться, если все они расставлены в ручную ?

И в дагонку немного позаковырестей вопрос - Если все Clonx будут extends некий MoveClon
в котором описано движение и каждый в super(50); передает скорость своего движения.
Вот как тогда прописать в библиотеке?
класс - Clon1 ?
базовый - MoveClon ?
И как всё это дело запустить ?

caseyryan 11.10.2012 11:27

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

Пишем где-то класс MoveClone в нем описываем движение объектов. Сам этот класс пусть расширяет мувиклип.
Например:
Код AS3:

package {
    import flash.display.MovieClip;
 
    public class MoveClone extends MovieClip {
        public function MoveClone() {
 
        }
        public function move(posX:Number, posY:Number):void { // этот метод можно будет вызывать у всех клонов у которых базовый класс MoveClone, не зависимо от того к какому классу они принадлежат сами
              this.x = posX;
              this.y = posY;
        }
    }
}

Потом в библиотеке придумываем им названия Clone1, Clone2 , а в базовый класс пишем наш MoveClone

вот, собственно, и всё

dvrbear 11.10.2012 11:37

Вложений: 1
Ну вот у меня так и с сделано.
Есть 3 клона в каждом из них одинаковый мувик с анимацией (клоны закрашены в разный цвет)

Каждому клону прописал в библиотеке класс Clon1, базовый MoveClon (также для 2 3)
В MoveClon присутвует цикл(setInterval) с движением по X
Все клоны лежат внутри Main

Cоздаю SWC, подключаю, добавляю Main на сцену.
Все отображается но в клонах не срабатывает даже trace
как в Clon1 конструкторе так и в MoveClon

На простых примерах никак не могу понять более глубокий принцип работы.
Чтоже и где делаю не так?

Поубирал все лишнее
Clon1 не хочет работать даже с базовым классом MovieClip
Код AS3:

package  
{
        import flash.display.MovieClip;
 
        public class Clon1 extends MovieClip
        {
 
                public function Clon1()
                {
                        this.x = 400;
                }
 
        }
 
}

Вообще беда какаято - всю вину на свою криворукость постоянно беру
а быть может все правильно делаю и подводит Flash или FD

Если не сложно протестируйте на вашем ПО - сдвинется ли синенький клон на 400? (((

подозрения усиливаются - так как с рядом лежащими graphics.fla и ClonClass
Clon1
не хочет добавляться в базовый класс - ClonClass (((

udaaff 11.10.2012 12:07

Используйте композицию и не мучайтесь.

dvrbear 11.10.2012 12:08

Ахренеть можно!!!!!
Разобрался!

Вообщем класс в библиотеке Clon1 не должен был присутвовать в раельном Clon1.as
Тупо убил это файл и Flash позволил указать Clon1 с базовым ClonClass

Запустил в FD и Clon1 стал вести себя как предписанно в ClonClass

Надеюсь эта темка пригодится комуто из новичков )))

Добавлено через 3 минуты
Аааа стоп :))

А как тогда быть если всетаки требуются 3 клона и каждый должен указать свою скорость?
До того как все заработало предпологал делать так
Код AS3:

package  
{
        public class Clon3 extends ClonClass
        {
                public function Clon3()
                {
                        super(30);
                }
        }
}

или тупо в кадр каждого клона поставить некую переменную - подскажите как правильно это сделать?


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

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