![]() |
MVC, ООП, AS3 учусь на примере 2D движка
Вложений: 1
Цели:
понять что такое MVC и ООП научиться кодить на AS3 Решение: написать скрипт/проект по следующему ТЗ: Цитата:
mvc/Main.as Код AS3:
Код AS3:
mvc/Model.as Код AS3:
Код AS3:
Код AS3:
Вопросы: как все поняли в AS я новичок, хотел бы, чтобы меня тыкнули носом в мои ошибки (все, кроме физики объекта), и услышать как бы вы реализовали с точки зрения MVC данный проект, какие есть направления MVC и т.п. P. S. "движка" громко сказано =) |
1) Могу пока только сказать, что свойства принято начинать со строчных.
2) Класс Шар у Вас унаследован от sprite и его название говорит, что ЭТО ШАР, а на деле получается, что ЭТО КОНТЕЙНЕР ДЛЯ ШАРА, ведь шар, который является больше _view, у Вас назван _obj. 3) Сами себя инициализируете через сеттеры, хотя в этом нет необходимости. 4) Graphics размазан по всему классу, это тоже не айс. 5) Жуткие названия, пишите лучше полными именами. Добавлено через 1 час 8 минут И модель у Вас выполняет сразу много обязанностей - загружает, рассчитывает, что-то ещё. Это нарушает Принцип единственной обязанности. |
Цитата:
|
1) опять затупил, давно не ООПешил, спасибо
2) ну да, он наследует спрайт чтобы рисовать шар и менять его свойсвтва непосредственно + если будет много таких шаров/экземпляров класса. я так понимаю тут достаточно переменовать в SharBox ? 3) действительно, спасибо. 4) а как подругому? ну скажем на сцене текстовое поле и человек ввел туда цвет. он должен значит изменить и у шара, в мое случае через оболочку класс Shar. 5) вот че тока не ожидал но не этого, вроде и так очень полно пишу, ну в любом случае спасибо. 6) ну да, модель это и должна делать, вот только перересовку я хотел во вьювер отдать в метод UpdateObj, но это геморно. Добавлено через 2 минуты Цитата:
см. 6) пункт ответа. это еще одна причина почему я перересовку не вынес во вьювер. "оч плохо" - очень прошу как можно подробней. спасибо! |
Цитата:
> отскок (вместо него костыль который обнуляет скорость, когда шарик касается "пол" сцены) сначала программировать научись, потом уже разбирайся в паттернах проектирования. иначе заработаешь себе ооп головного мозга. https://ru.wikipedia.org/wiki/KISS_(...6%D0%B8%D0%BF) и архивируй в zip. |
2) Сейчас ещё посмотрел на класс Шар и могу сказать, что посоветовать мне особо нечего из-за того,
что я не понимаю, что означают свойства, могу лишь догадываться. 2) Вы не понимаете, что такое дисплей лист. 2) Вы не понимаете, что значит наследовать и ещё нужно знать, что такое композиция. 6) Нет, она должна объединять работу классов-модулей, но не быть всем сразу и при том одновременно. Напишите, что означают все свойства в классе Шар, я покажу, как будет лучше. Добавлено через 4 минуты Цитата:
Цитата:
Ему не хватает знаний. Добавлено через 16 минут nubideus, а что Вы думаете по поводу модели ТС? |
Gerbert - а в чем собственно резон защищать ТС, если ты даже сам понимаешь, что ему не хватает знаний даже на дисплейЛист, самое основное и первое в АС! Нужно нагло отправлять читать книжки и все тут. Я лично замечаю небольшую болезнь полубога.
|
Цитата:
> а что Вы думаете Код AS3:
Цитата:
private var _X:Number; private var _Y:Number; private var _M:Number; // масса private var _E:Number; // эластичность private var _R:uint; // радиус private var _C:uint; // цвет private var _V:Number=1; // наверное скорость private var _A:Number; // хз, прозрачность поди, если цвет есть private var _direc:Number=1.5*Math.PI; // направление |
Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
private var _A:Number; // в школе буквой a обозначали ускорение. Цитата:
Цитата:
Цитата:
события она не слушает, отображение не занимается (за исключением непосредственного изменения координат), вы имеете ввиду загружать данные (из set.txt) можно в самом контроллере? Цитата:
P.S. мне от вас нужно просто получить знания ГДЕ у меня бред (вот как nubideus вырезал кусок кода и сказал что ***** полное, я понял и исправлюсь), и как сделать правильно, и через 2-3 проекта я буду писать код более приемлемый. Не которые вещи я знаю что бред, но не достаточно знаний языка AS для того чтобы сделать правильно как я считаю, вот немного "костылю" в надежде что вы скажите: "у вас там костыль ***, надо делать так ***". P.S.S. покажите мне человека у которого есть знания и он пишет на форуме вопросы? Иначе по вашей логике всех нужно посылать читать книжку, только после прочтения ваш форум не нужен будет в 99.99% случаев. Всем спасибо, жду ваших ответов, советов и дальнейших обоснованных обсираний моего кода. |
Цитата:
Объяснить Вам, значит пересказать несколько глав книги. Покажите мне, где Вы в Shar обращаетесь к graphics унаследованного Sprite? |
ntro123123, совет простой. Читайте форум.Многократно написано и про MVC и ООП на классах. Сэкономите много времени себе и другим. Обсирать г/k неполиткорректно.
|
Цитата:
Ладно, в любом случае спасибо и так читаю потихоньку. |
Вы неправильно думаете! В шаре Вы создаете объект с типом Sprite и присваиваете свойству _obj.
У этого объекта есть свойство graphics, _object.graphics, к которому Вы и обращаетесь. Но вот только Ваше незнание какого-то языка вообще не дает уловить суть. Я не говорю, что Вы не знаете другие языки, возможно в других языках Вы даже что-то делали и это работает... Но вот саму работу языка Вы не понимаете. Что такое объект и его свойство, это самый-самый примитив. Вы обязательно это поймете, это просто, но для это нужно читать. И лучше всего, отложить написание кода на время, чтобы полностью посвятить себя чтению. Добавлено через 49 минут Вы упоминали, что мячей может быть больше одного, по этому вот код, как сделал бы я Код AS3:
Код AS3:
Код AS3:
Код AS3:
Вот на этом простом примере, можно понять, что я имел ввиду, когда говорил, что модель у Вас выполняет больше дозволенного в ООП. У меня есть класс мяч, этот класс ТОЛЬКО мяч. Есть класс данные, он ТОЛЬКО данные. Есть класс, который занимается ТОЛЬКО движением, да и то не движением, а по сути ТОЛЬКО соединяет данные из разных мест. У него обязанность, ТОЛЬКО соединять данные. Он НЕ ЗАГРУЖАЕТ, НЕ СОЗДАЁТ, НЕ РАССЧИТЫВАЕТ. Так же разбив все на отдельные классы, в любой момент можно с легкостью что-то поменять, заменить мяч на картинку и т.д. Добавлено через 14 минут И тут по сути ещё одного класса не хватает... Добавлено через 35 минут Код AS3:
Во вторых, если Вам понадобится добавить новое свойство, то придется изменять код, а это тоже неправильно. Сделайте в текстовом файле строку ключ:значение и потом распарсивайте эту строку в обжект типа Код AS3:
|
Цитата:
|
Цитата:
|
Цитата:
|
Я не помню где об этом читал и почему нельзя писать, но точно уверен, что читал об этом неоднократно
и если бы это были сомнительные статьи без объяснений, то я бы не запомнил... Хотя я и не помню.. Как в следующий раз увижу, то покажу Вам. А объясните, что значит "интерпретирует заново"? Это если я создам сто экземпляров класса, то после компиляции ссылки будут идти на методы класса ( как если бы они были статические ), а конструкторов создастся столько же сколько и инстенсов? |
Интерпретатор снова берет байткод конструктора и снова его переводит в понятные ему команды. Каждый раз, в отличие от методов, которые "кэшируются" при первом обращении.
|
Я бы добавил, что передавать параметры через конструктор тоже не очень правильно, хотя и красиво:)
|
КорДум, Спасибо!
Цитата:
|
В добавлении к тому, что написал Кордум, при использовании new происходит еще и выделение памяти.А это процесс относительно не быстрый.
|
А я как-то проверял, как будет быстрей new Class( args ) или new Class().setArgs( args ).
И оказалось, что первое немного пошустрей. |
И как вы это делали?
|
Цитата:
Лучший вариант: Код AS3:
|
Цитата:
Это было так давно, что я мог и в дебажной замер делать. |
MikroAcse а что такое super(); ? зачем он вызывается?
|
Цитата:
|
Цитата:
|
Цитата:
|
Мне почему-то кажется, что в as3 к слушателям нужно относится, как к обычному методу, который УЖЕ
как бы вызываются по имени в EventDispather. А отрицание этого ведет к созданию ЕЩЕ одного EventDispather по верх существующего. Разве это не очевидно? |
Это неочевидно хотя бы потому, что есть еще и сигналы.
|
Тогда может вообще писать, а потом её дергать по желанию. Должно ещё быстрее ведь чем сигнал сработать.
А Function можно как объект создать? Код AS3:
Почему на это время ООП отключают? И если я не ошибаюсь, то сигнал это же жесткая связка объектов? |
Вы очень зациклены на слове "объект". Начните проектировать систему с данных, создаете датапровайдеры к ним тогда вопрос сколько нужно геттеров и сетеров отпадет сам собой.
|
| Часовой пояс GMT +4, время: 23:05. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.