воскресенье, 27 октября 2013 г.

Самое главное во всех фреймворках это то, что все они диктуют правила создания приложения. Если ты никогда не использовал никакого фреймворка в своих приложениях, то либо они слишком малы и ты не сталкивался с проблемой нарастающего хаоса в коде, либо просто не пришло твоё время :) И в конце концов приложение созданное по правилам фреймворка однозначно обретёт правильную форму. А разве не этого все мы хотим? Новичок в программировании начав изучение какого-либо фреймворка автоматически начинает правильно мыслить, тем самым перенимая опыт предыдущих поколений и открывая себе более гладкую дорогу вперёд. В любом случае единственная возможность создания больших, расширяемых и модульных приложений это использование фреймворка.

Итак начнём…

MVC «Модель-представление-поведение» === «Модель-представление-контроллер».

А теперь закрой глаза и представь себе работу своего приложения. Представил?… так вот, попробуй условно разбить этот процесс на три абстрактые логические части: 

Собери все методы своего приложения которые занимаются обработкой всех визуальных компонентов, методы которые имеют знания о визуальном элементе, которые занимаются перемещением их по экрану и т.д. Мысленно объедини их в одну часть программы, это и будет (Представление).

Далее. Собери все методы своего приложения которые занимаются логикой приложения, методы которые имеют знания о том, что и как делать. Модель поведения компонентов приложения. Мысленно объедини их в одну часть программы, это и будет (Модель). 

Третья, но не менее важная часть, это те методы в которых реализовано само поведение модели. Так называемый «Контроллер». Вообщем это любые методы, которые вызываются к примеру событием проигрыша игры, допустим: function onLoseLevel(e:SomeEvent):void. В данном случае этот метод является поведением модели вашего приложения в случае проигрыша. Как только вы проиграли уровень вызывается конкретный метод, которые реализует поведение приложения в конкретном случае. Так вот, собери все методы, реализующие поведение в одну кучу 
это и будет третья логическая часть концепции MVC, (Контроллер).

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

Реализация концепции MVC на примере приложения HellowWorld

HelloWorld.as:

package
{ 
     import flash.display.Sprite;
     import flash.events.Event;
     import flash.text.TextField;
  
  public class HelloWorld extends Sprite
     {
       private var viewComponent            :TextField;
          
          public static var model                   :Model;
          public static var view                     :View;
          public static var controller              :Controller;
          
       /**
           * Constructor 
           * 
           */
          public function HelloWorld()
          {
            /*Add listener to catch an event to add to stage
                * */

               addEventListener(Event.ADDED_TO_STAGE, showTextHandler);
               
               /* Creation one view component as TextField
                * */

               viewComponent = new TextField();
               addChild(viewComponent);
               
               /*Creation the Model
                * */

               model = new Model();
               
               /*Creation the View and giving viewComponent into constructor
               * */

               view  = new View(viewComponent);
               
               /*Creation the Controller
                * */

               controller  = new Controller();
          }
          
          /*Set the command to handling on the event
           * */

           protected function showTextHandler(event:Event):void
          {
            controller.showTextFieldCommand();
          }
          
    }
}



Model.as

package 
{
  public class Model
     {
      
       private var _textString  :String = "Hello World!";
          
          public function Model()
          {
          }


          public function get textString():String
          {
            return _textString;
          }


          public function set textString(value:String):void
          {
            _textString = value;
          }


     }
}


View.as:

package 
{
  import flash.text.TextField;


     public class View
     {
       private var _view:Object;
          
          public function View(viewObj:Object)
          {
            view = viewObj;
          }
          
          /*Method to change text field in the view component
           * */ 
          public function changeView(str:String):void
          {
            view.text = str;
          }
          
          
          public function set view(value:Object):void
          {
            _view = value; 
          }
          
          public function get view():Object
          {
            return _view; 
          }
     }
}


Controller.as:

package 
{ 
     public class Controller
     {
     
       public function showTextFieldCommand():void
          {
            var str:String = HelloWorld.model.textString;
               HelloWorld.view.changeView(str);
          }
     }
}


Ок. Разберём что же здесь происходит. Есть Главный класс приложения: HelloWorld.as который ответственный за всё. В нём мы создаём один единственный визуальный компонент типа TextField (текстовое поле), а также экземпляры Model.as, View.as и Controller.as. Теперь как это всё связать?

Для начала передадим визуальный компонент в управление нашему View путём передачи его в конструктор:
  view  = new View(viewComponent);


artemfedorov.com/?p=64
Теперь наша View знает о компоненте.
Далее, добавим метод во View с помощью которого она сможет влиять на компонент:

                public function changeView(str:String):void
               {
                      view.text = str;
               }


здесь всего лишь происходит присвоение текстовому полю компонента нового значения типа String.

Наша Model в этом примере содержит лишь знания о значении строковой переменной и на это бизнес логика ограничивается.

                private var _textString  :String = "Hello World!";


Controller содержит тоже лишь одну команду, которая получает значение из Model и сообщает View что нужно сделать:

                public function showTextFieldCommand():void
                {
                       var str:String = HelloWorld.model.textString;
                      HelloWorld.view.changeView(str);
                }


Далее заключительный штрих без которого ничего не будет работать это событие. Здесь для примера события я выбрал событие, которое возникает когда происходит добавление на stage и добавил слушатель:
addEventListener(Event.ADDED_TO_STAGE, showTextHandler);

К этому событию я привязал команду реализуя поведение моего приложения:

                protected function showTextHandler(event:Event):void
               {
                      controller.showTextFieldCommand();
               } 


пятница, 14 сентября 2012 г.

{ВИДЕО УРОК} Flash Builder 4.6 (Урок 13)


Продолжение создания нашей flash игры "Total Recall".  Жанр игры - "Найди совпадения". Достаточно простая игра, на примере которой мы и дальше с вами будем разбираться с программированием на Action Script 3.0 во Flash Builder 4.6.
В этом видео уроке мы реализуем показ елементов перед игрой посредством паузы.  Каждый раз мы будем усложнять части кода, меняя их на более разумные и целесообразные с точки зрения дальнейшей расширяемости.  Этот урок является продолжением предыдущего.


{ВИДЕО УРОК} Flash Builder 4.6 (Урок 12 - 2)


Продолжение создания нашей flash игры "Total Recall".  Жанр игры - "Найди совпадения". Достаточно простая игра, на примере которой мы и дальше с вами будем разбираться с программированием на Action Script 3.0 во Flash Builder 4.6.
В этом видео уроке мы реализуем показ елементов перед игрой посредством паузы.  Каждый раз мы будем усложнять части кода, меняя их на более разумные и целесообразные с точки зрения дальнейшей расширяемости.  Этот урок является продолжением предыдущего.

{ВИДЕО УРОК} Flash Builder 4.6 (Урок 12 - 1)


Продолжение создания нашей flash игры "Total Recall".  Жанр игры - "Найди совпадения". Достаточно простая игра, на примере которой мы и дальше с вами будем разбираться с программированием на Action Script 3.0 во Flash Builder 4.6.
В этом видео уроке мы реализуем показ елементов перед игрой посредством паузы.  Каждый раз мы будем усложнять части кода, меняя их на более разумные и целесообразные с точки зрения дальнейшей расширяемости.  Этот урок является продолжением предыдущего.

пятница, 7 сентября 2012 г.

{ВИДЕО УРОК} Flash Builder 4.6 (Урок 11)


Продолжение создания нашей flash игры "Total Recall".  Жанр игры - "Найди совпадения". Достаточно простая игра, на примере которой мы и дальше с вами будем разбираться с программированием на Action Script 3.0 во Flash Builder 4.6.
В этом видео уроке мы реализуем показ елементов перед игрой посредством паузы.  Каждый раз мы будем усложнять части кода, меняя их на более разумные и целесообразные с точки зрения дальнейшей расширяемости.  Этот урок является продолжением предыдущего.

четверг, 6 сентября 2012 г.

{ВИДЕО УРОК} Flash Builder 4.6 (Урок 10)


Продолжение создания нашей flash игры "Total Recall".  Жанр игры - "Найди совпадения". Достаточно простая игра, на примере которой мы и дальше с вами будем разбираться с программированием на Action Script 3.0 во Flash Builder 4.6.

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


воскресенье, 26 августа 2012 г.

{ВИДЕО УРОК} Flash Builder 4.6 (Урок 9)

Продолжение создания нашей flash игры "Total Recall".  Жанр игры - "Найди совпадения". Достаточно простая игра, на примере которой мы и дальше с вами будем разбираться с программированием на Action Script 3.0 во Flash Builder 4.6.
В этом видео уроке мы реализуем часть предметной логики, устраним возможность появления багов на этапе выбора элементов, а также создадим правильную последовательность принятия решения.  Каждый раз мы будем усложнять части кода, меняя их на более разумные и целесообразные с точки зрения дальнейшей расширяемости.  Этот урок является продолжением предыдущего.

{ВИДЕО УРОК} Flash Builder 4.6 (Урок 8)


Продолжение создания нашей flash игры "Total Recall".  Жанр игры - "Найди совпадения". Достаточно простая игра, на примере которой мы и дальше с вами будем разбираться с программированием на Action Script 3.0 во Flash Builder 4.6.
В этом видео уроке мы реализуем часть предметной логики, расширим базовый класс методом  delay().  Каждый раз мы будем усложнять части кода, меняя их на более разумные и целесообразные с точки зрения дальнейшей расширяемости.  Этот урок является продолжением предыдущего.

{ВИДЕО УРОК} Flash Builder 4.6 (Урок 7)


Продолжение создания нашей flash игры "Total Recall".  Жанр игры - "Найди совпадения". Достаточно простая игра, на примере которой мы и дальше с вами будем разбираться с программированием на Action Script 3.0 во Flash Builder 4.6.
В этом видео уроке мы реализуем часть предметной логики - проверку открытых элементов и принятие решения.  Каждый раз мы будем усложнять части кода, меняя их на более разумные и целесообразные с точки зрения дальнейшей расширяемости.  Этот урок является продолжением предыдущего.

пятница, 24 августа 2012 г.

{ВИДЕО УРОК} Flash Builder 4.6 (Урок 6-2)

Продолжение создания нашей flash игры "Total Recall".  Жанр игры - "Найди совпадения". Достаточно простая игра, на примере которой мы и дальше с вами будем разбираться с программированием на Action Script 3.0 во Flash Builder 4.6.
В этом видео уроке мы рассмотрим визуализацию игрового процесса - создания игровых элементов и взаимодействия с ними.  Каждый раз мы будем усложнять части кода, меняя их на более разумные и целесообразные с точки зрения дальнейшей расширяемости.  Этот урок является продолжением предыдущего.


{ВИДЕО УРОК} Flash Builder 4.6 (Урок 6-1)


Продолжение создания нашей flash игры "Total Recall".  Жанр игры - "Найди совпадения". Достаточно простая игра, на примере которой мы и дальше с вами будем разбираться с программированием на Action Script 3.0 во Flash Builder 4.6.
В этом видео уроке мы рассмотрим визуализацию игрового процесса - создания игровых элементов и взаимодействия с ними.  Каждый раз мы будем усложнять части кода, меняя их на более разумные и целесообразные с точки зрения дальнейшей расширяемости.  Этот урок является продолжением предыдущего.

среда, 22 августа 2012 г.

{ВИДЕО УРОК} Flash Builder 4.6 (Урок 5)

flash games

Продолжение создания нашей flash игры "Total Recall".  Жанр игры - "Найди совпадения". Достаточно простая игра, на примере которой мы и дальше с вами будем разбираться с программированием на Action Script 3.0 во Flash Builder 4.6.
В этом видео уроке мы рассмотрим создание собственных событий, создание глабального диспетчера событий, также начнем процесс создания игровых элементов взаимодействуя в концепции MVC.  Каждый раз мы будем усложнять части кода, меняя их на более разумные и целесообразные с точки зрения дальнейшей расширяемости.  Этот урок является продолжением предыдущего.


{ВИДЕО УРОК} Flash Builder 4.6 (Урок 4)

Flash game
Продолжение создания нашей flash игры "Total Recall".  Жанр игры - "Найди совпадения". Достаточно простая игра, на примере которой мы и дальше с вами будем разбираться с программированием на Action Script 3.0 во Flash Builder 4.6.
В этом видео уроке мы рассмотрим создание собственных событий, создание глабального диспетчера событий, также начнем процесс создания игровых элементов взаимодействуя в концепции MVC.  Каждый раз мы будем усложнять части кода, меняя их на более разумные и целесообразные с точки зрения дальнейшей расширяемости. 


вторник, 21 августа 2012 г.

{ВИДЕО УРОК} Flash Builder 4.6 (Урок 3)


flash builder
Начало создание нашей флеш игры "Total Recall".  Жанр игры - "Найди совпадения". Достаточно простая игра, на примере которой мы и дальше с вами будем разбираться с программированием на Action Script 3.0 во Flash Builder 4.6.
В этом видео уроке мы рассмотрим создание меню, создание игровой формы. Управление переключением между формами. Создание и управление кнопками. Каждый раз мы будем усложнять части кода, меняя их на более разумные и целесообразные с точки зрения дальнейшей расширяемости. 


среда, 15 августа 2012 г.

вторник, 14 августа 2012 г.

Мои планы на август - сентябрь

Планирую записать серию видео уроков о том как я создаю свои приложения (игры).

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

Также вы можете дополнить этот список своими пожеланиями.

воскресенье, 12 августа 2012 г.

{ВИДЕО УРОК} Flash Builder 4.6 и Flash CS 5.5 вместе

flash builder
    Хочу рассказать как связать Flash Builder 4.6 и Flash CS 5.5 и разрабатывать удобно свои приложения на Action Script 3.0.
    Это удобство становится еще более очевидно, когда вы работаете не один. Когда вы сосредоточены на написании кода, а  графический контент - не ваша забота. Этот видео урок о том, как получить доступ к графическим классам из .SWC во Flash Builder 4.6.





пятница, 3 августа 2012 г.

Краткий обзор моей игры WARIATION в разработке

flash game
Всем привет, вот решил поделиться информацией. Здесь несколько фоток моей еще не законченной игры "Wariation". Это тактическая пошаговая игра, но с некоторой разницей в том, что ход производится одновременно с противником.
      Механизм игры заключается в следующем: управление мышь. Вы нажимаете на бойца в раскрывающемся меню выбираете режим прокладки маршрута и тыкаете по карте выбирая контрольные точки между которыми рисуется линия - это и будет маршрут бойца. Затем нажимает кнопку "Play" и картинка оживает:) ваши бойцы пошли по своим маршрутам одновременно с вашими врагами перестреливаясь в автоматическом режиме. 
      Большое количество укрытий, также различные положения бойца от бега до передвижения ползком. Дополнительно в игре присутствует возможность установки мин бойцами, а также вызов воздушной поддержки. Итак вы победили в нескольких сражениях, что дальше? А дальше - больше! Ваши бойцы превращаются из новобранцев в более опытных и вы это не сможете не заметить в своей казарме. У них изменится воиское звание и цена. Теперь ваши бойцы стали обладать расширенными возможностями. 
     Вот пока и все, а сейчас несколько скриншотов.

четверг, 2 августа 2012 г.

Математическая альтернатива hitTest'у

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




пятница, 27 июля 2012 г.

{ВИДЕО УРОК} кастомных событий в Action Script 3.0

Кастомные события в Action Script 3.0 обязательная штука если вы опытный разработчик, то без них вам не обойтись. Этот видео урок в доступной форме расскажет как это сделать и какие возможности открывает создание собственных событий.