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

MAGISTRS 06.02.2012 16:03

из кода в кадрах в код "человеческий"
 
Всем привет. Вопрос может выглядеть тупо, но всё же...
Посоветуйте как в самые кратчайшие строки научиться кодить "в файлах", а не в каждом кадре, как я это делал...? Допустим если в каждых кадрах я мог нарисовать и анимировать всё на сцене, то как это сделать теперь? Отдельно рисовать объект с анимацией а потом кодом его добавлять? Или как вешать события если кадров нет?
поделитесь опытом пожалуйста, очень нужно..

Bgg 06.02.2012 16:24

Цитата:

Сообщение от MAGISTRS (Сообщение 1061243)
Всем привет. Вопрос может выглядеть тупо, но всё же...
Посоветуйте как в самые кратчайшие строки научиться кодить "в файлах", а не в каждом кадре, как я это делал...? Допустим если в каждых кадрах я мог нарисовать и анимировать всё на сцене, то как это сделать теперь? Отдельно рисовать объект с анимацией а потом кодом его добавлять? Или как вешать события если кадров нет?
поделитесь опытом пожалуйста, очень нужно..

Все очень просто. Просто купите и прочитайте книгу: http://www.ozon.ru/context/detail/id/4121608/

Tails 06.02.2012 16:31

Bgg
Святая библия )

MAGISTRS 06.02.2012 16:44

Bgg, знаю такую) всё руки не доходят)
а более простой путь? основные отличия и прочее?

Bgg 06.02.2012 16:47

Цитата:

Сообщение от MAGISTRS (Сообщение 1061255)
Bgg, знаю такую) всё руки не доходят)
а более простой путь? основные отличия и прочее?

Для лентяев одна дорога — кодинг в кадрах.

Jewelz 06.02.2012 16:48

основные отличия - перестать думать кадрами,
возможно это перевернет для вас все представление о программировании на as, а чтобы это сделать нужно изучить основы ооп

MAGISTRS 06.02.2012 16:58

Jewelz, ссылку какую-нибудь не кинете? или кроме как справочника официального больше никак?
P.S. база программирования была до изучения as, так что думаю америку не открою)

Inet_PC 06.02.2012 17:06

Цитата:

P.S. база программирования была до изучения as, так что думаю америку не открою)
Тогда как Вы вообще стали в кадрах писать? Значит все таки не база...

MAGISTRS 06.02.2012 17:07

Inet Pc, не знаю..как-то с простого начал и "понесло".. )

NikolyA 06.02.2012 17:12

MAGISTRS ну как тебя научить кодить не в кадрах? создаешь класс, и описываешь в нем что тебе надо - как тебе еще объяснить? не бойся пробовать

Tails 06.02.2012 17:30

MAGISTRS
Цитата:

Все очень просто. Просто купите и прочитайте книгу: http://www.ozon.ru/context/detail/id/4121608/
Этого будет достаточно с лихвой, что ещё вам нужно ?

udaaff 06.02.2012 18:16

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

MAGISTRS 06.02.2012 18:29

udaaff, ну зачем же говорить того, чего не знаешь? я про желание. просто я написал изначально - на ваш взгляд самый быстрый способ изучить.. речь идет о времени. тем более что если бы у меня не было желания - я бы сюда не писал.
Всем спасибо за советы =)

Котяра 06.02.2012 19:31

Надо уже книжку написать:
"Как бросить писать в кадрах и научиться программировать."

alatar 06.02.2012 19:49

Цитата:

просто я написал изначально - на ваш взгляд самый быстрый способ изучить..
Самый быстрый способ изучить — начать изучать. Все остальные способы, более медленные.

Vitalya 06.02.2012 21:23

пишешь в кадре
Код AS3:

new MyClass(this);//в данный момент мы создаем ОБЪЕКТ класса с помощью Конструктора, передавая в конструктор ссылку на сцену

Создаешь файл *.AS и там пишешь
Код AS3:

public class MyClass extends Sprite //создаем класс MyClass и наследуем его от класса Sprite
{
      var stage:Object;// ссылка на сцену в классе
 
      public function MyClass(stage:Object)//реализация конструктора, которым мы создаем ОБЪЕКТ класса
      {
          this.stage = stage; // Получили ссылку на сцену
          /*
          передавая ссылку на сцену, в принципе  здесь програмите как и в кадре))
          */

      }
}


Inet_PC 06.02.2012 21:39

to Vitalya
Ваш код вообще не рабочий) Зачем советовать так? Чтобы лишний раз отбить желании писать код нормальо?

Vitalya 06.02.2012 21:44

У меня работает

Inet_PC 06.02.2012 21:51

Можно пример?
По идее не скомпилится так как свойство stage уже есть у Sprite. И как вы через this Stage передаете? (Единственный вариант который я знаю, просто ужасен.) Ну и плюс, если уж и передаете ссылку на Stage, по почему она не типизирована?

HardCoder 06.02.2012 22:05

Цитата:

Сообщение от Inet_PC (Сообщение 1061321)
По идее не скомпилится так как свойство stage уже есть у Sprite.

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

Inet_PC 06.02.2012 22:12

Цитата:

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

\test\src\MyClass.as(6): col: 9 Error: A conflict exists with inherited definition flash.display:DisplayObject.stage in namespace public.
Тоесть с настройками по умолчанию это не компилится. Возможно нужно strict mode выключить или Flash использовать хз, у меня пока не работает.

carrotoff 06.02.2012 22:19

Vitalya, даже, если ваш код является рабочим, то он, как минимум, служит ярким примером, как делать не надо. Медвежья услуга вопрошающему.

zerAlex2 06.02.2012 22:21

Нифига Мук - это не выход. У Мука я не понял как совмещать Flash и AS3. Там хорошо описан процесс создания кода на чистом AS3.
Сейчас тоже парюсь, думаю как совмещать нарисованное во Флеше с классами... Не видел ни одного внятного простого примера. Может в ближайшее время появится )
http://www.flasher.ru/forum/showthread.php?t=174969

Автору вопроса - попробуй написать что-то очень простое. Сначала в кадрах, потом попробуй это перевести на ООП.

HardCoder 06.02.2012 22:29

Цитата:

Сообщение от Inet_PC (Сообщение 1061325)
Цитата:

\test\src\MyClass.as(6): col: 9 Error: A conflict exists with inherited definition flash.displayisplayObject.stage in namespace public.

Это, наверное, потому что вы stage в классе сделали public. Отсюда и конфликт между public var stage:Object (класса MyClass) и public function get stage():Stage (класса DisplayObject). Вы не умеете! Вот как надо правильно писать, скажу деликатно дабы никого не обидеть: "нехороший код":
Код AS3:

public class MyClass extends Sprite //создаем класс MyClass и наследуем его от класса Sprite
{
      var stage:Object;// ссылка на сцену в классе
 
      public function MyClass(stage:Object)//реализация конструктора, которым мы создаем ОБЪЕКТ класса
      {
          this.stage = stage; // Получили ссылку на сцену
          /*
          передавая ссылку на сцену, в принципе  здесь програмите как и в кадре))
          */

      }
}


carrotoff 06.02.2012 22:34

Я, наверно, что-то не понимаю. Зачем этот ужас? Зачем классу, который наследуется от Sprite передавать ссылку на Stage? Да еще и в таком диком виде без идентификатора доступа?

Inet_PC 06.02.2012 22:34

Цитата:

Это, наверное, потому что вы stage в классе сделали public.
Ни строчки отсебятины, скопировал, что привел автор и все. Никаких пабликов не добавлял.

Добавлено через 1 минуту
Конфликт из-за одинакового свойства. HardCoder не предумывайте.

HardCoder 06.02.2012 22:39

А может здесь совсем другое. Это же код ля флеша, а не других IDE. Эта ссылка - вообще не на Stage, а на флешевский класс MainTimeline. Потому и работает, а стайджем здесь и подавно не пахло...

Добавлено через 2 минуты
Цитата:

Сообщение от Inet_PC (Сообщение 1061333)
Ни строчки отсебятины, скопировал, что привел автор и все. Никаких пабликов не добавлял.

Каюсь...

Tails 06.02.2012 22:44

Цитата:

Сообщение от zerAlex2 (Сообщение 1061328)
Сейчас тоже парюсь, думаю как совмещать нарисованное во Флеше с классами... Не видел ни одного внятного простого примера. Может в ближайшее время появится )

Связанные классы для символов Movie Clip (Клип) - стр. 913

Inet_PC
Индуский код ?

HardCoder 06.02.2012 22:52

Цитата:

Сообщение от zerAlex2 (Сообщение 1061328)
Нифига Мук - это не выход. У Мука я не понял как совмещать Flash и AS3. Там хорошо описан процесс создания кода на чистом AS3.

Я думаю, раз человек уже писал код в кадрах, то он должен был когда-то добавлять мувиклипы из библиотеки на сцену. Так что именно вопрос о связи графики и кода здесь не стоит. Совет - если код писал в кадрах - садись за книжку (можно Мука). Прочитай страниц 50 там где он рассказывает про классы. Пойми что такое ООП и спокойно пиши свое приложение. Время от временя заглядывай к Муку, когда что-то не знаешь.

Добавлено через 2 минуты
Цитата:

Сообщение от Tails (Сообщение 1061339)

Вот слово, которое я не мог подобрать к творению Vitalya

zerAlex2 06.02.2012 23:16

Связанные классы для символов Movie Clip - это мы и так знаем )) Я не могу понять, как взаимодействуют экземпляры между собой, потому как приёмы, которые я использовал, нибирая код в кадрах, частенько не работают в ООП варианте. Я теперь даже не пойму, с какой стороны зайти к проблеме.
http://www.flasher.ru/forum/showthre...24#post1061324

ЗЫ индусский код - это по- нашему )) чисто интуитивный, на уровне подсознания кодинг, а потом мучаешься, разгребаешь.

Vitalya 07.02.2012 00:07

Игра, КАМЕНЬ НОЖНИЦЫ БУМАГА ДЛЯ КОНТАКТА
моя первая работа, не судите строго!)
Код AS3:

package sps {
        import  vk.*;
        import flash.display.Sprite;
        import flash.events.*;
        import flash.net.*;
 
        public class CWorkingPHP extends Sprite
        {
            private var r_i:Object;//сцена
                private var host:String = 'http://vitgame11.guru-hosting.ru/phpGame';//сервер
                private var wins:uint=0;//количество побед
        private var losses:uint=0;//количество поражений
            private var uidString:String; //текущий пользователь
                private var uid:uint;
                private var xml:XML;// обьект который будет хранить информацию полученную из БД в XML формате
                private var flashVars: Object;//данные из VK
 
                private var flag:Boolean=true;
 
                private var WIN:String = "WIN";
                private var LOOSE:String = "LOOSE";
                private var DRAW:String = "DRAW";
 
//-----------------------------------------------------------------------------------------------конструктор с параметрами
                public function CWorkingPHP(r:Object)
                {
                                r_i = Object(r);//делаем ссылку на сцену
                                flashVars = r_i.stage.loaderInfo.parameters as Object;//получаем данные о user
                                uidString = flashVars['viewer_id'];//uid текущего пользователя 
                                this.uid = uint(uidString);
                                r_i.btn_newgame.visible = false;//кнопка start не видна
                                takeData();//загружаем данные из БД
                                Game();//процесс игры
                }
//-----------------------------------------------------------------------------------------------настройка видимости кнопок на сцене
                private function hidingButtons(stone:Boolean, scissors:Boolean, paper:Boolean, message:String, flag:Boolean):void
                {
                                r_i.btn_stone.visible = stone;
                                        r_i.btn_scissors.visible = scissors;
                                        r_i.btn_paper.visible = paper;
                                        r_i.txt_message.text = message;
                                        this.flag = flag;
                }
//-----------------------------------------------------------------------------------------------отправка данных на сервер через PHP
                private function sendData(outcomeGame:uint):void
                {
                        var loader:URLLoader = new URLLoader();
                        var req:URLRequest = new URLRequest(host+'/setPHP.php');
                        var variables :URLVariables = new URLVariables();
                        variables.methot = URLRequestMethod.GET;
                        variables['uid'] = uid; 
                        variables['score_res'] = outcomeGame;
                        req.data = variables;
                        loader.load(req);
                        loader.addEventListener(Event.COMPLETE, updateForms);
                }
//-----------------------------------------------------------------------------------------------получение данных с сервера
                private function dataLoaded(e:Event):void
                {
                xml = new XML(e.target.data);
                        //парсим XML и сохраняем в глобальные переменные
                        this.wins=xml..wins;
                        this.losses=xml..losses;
                        //полученные данные о победах и поражениях текущего польз. заполняем в формы 
                        r_i.txt_wins.text = String(this.wins);
                        r_i.txt_losses.text = String(this.losses);
 
                }
 
                private function takeData():void
                {
                        var loader:URLLoader = new URLLoader();
                        loader.load(new URLRequest(host+'/getPHP.php?uid='+uid));//загружаем php, и походу дела XML
                        loader.addEventListener(Event.COMPLETE, dataLoaded);
                }
 
                private function updateForms(e:Event):void
                {
                        takeData();
                }
//-----------------------------------------------------------------------------------------------процесс игры
                private function Game():void
                {
                                r_i.btn_stone.addEventListener(MouseEvent.CLICK, pushStone);
                                function pushStone(e:MouseEvent):void
                                {
                                  if(flag)
                                  {               
                                        var temp:uint = randRange(1, 3);//решение компьютера
                                        if(temp==2)
                                        {
                                                wins++;
                                                sendData(1);//обновление данных в БД
                                                hidingButtons(true,true,false,WIN,false);//исчезает кнопка не выбранная ни компьютером ни пользователем
                                                r_i.btn_newgame.visible = true;//появляется кнопка новой игры
                                        }
                                        else if(temp==3)
                                        {
                                                losses++;
                                                sendData(0);
                                                hidingButtons(true,false,true,LOOSE,false);
                                                r_i.btn_newgame.visible = true;
                                        }
                                        else//ничия
                                        {
                                                hidingButtons(true,false,false,DRAW,false);
                                                r_i.btn_newgame.visible = true;
                                        }
                                        //обновляем значения в формах
                                        r_i.txt_wins.text = String(wins);
                                        r_i.txt_losses.text = String(losses);
                                  }
                                }
                                r_i.btn_scissors.addEventListener(MouseEvent.CLICK, pushScissors);
                                function  pushScissors(e:MouseEvent):void
                                {
                                if(flag)
                                {
                                        var temp:uint = randRange(1, 3);//решение компьютера
                                        if(temp==1)
                                        {
                                                losses++;
                                                sendData(0);
                                                hidingButtons(true,true,false,LOOSE,false);
                                                r_i.btn_newgame.visible = true;
                                        }
                                        else if(temp==3)
                                        {
                                                wins++;
                                                sendData(1);
                                                r_i.btn_stone.visible = false;
                                                r_i.txt_message.text = WIN;
                                                hidingButtons(false,true,true,WIN,false);
                                                r_i.btn_newgame.visible = true;
                                        }
                                        else
                                        {
                                                hidingButtons(false,true,false,DRAW,false);
                                                r_i.btn_newgame.visible = true;
                                        }
 
                                        r_i.txt_wins.text = String(wins);
                                        r_i.txt_losses.text = String(losses);
                                }
                                }
 
                                r_i.btn_paper.addEventListener(MouseEvent.CLICK, pushPaper);
                                function pushPaper(e:MouseEvent):void
                                {
                                  if(flag)
                                  {
                                        var temp:uint = randRange(1, 3);//решение компьютера
                                        if(temp==1)
                                        {
                                                wins++;
                                                sendData(1);
                                                hidingButtons(true,false,true,WIN,false);
                                                r_i.btn_newgame.visible = true;
                                        }
                                        else if(temp==2)
                                        {
                                                losses++;
                                                sendData(0);
                                                r_i.btn_stone.visible = false;
                                                r_i.txt_message.text = LOOSE;
                                                hidingButtons(false,true,true,LOOSE,false);
                                                r_i.btn_newgame.visible = true;
                                        }
                                        else
                                        {
                                                hidingButtons(false,false,true,DRAW,false);
                                                r_i.btn_newgame.visible = true;
                                        }
 
                                        r_i.txt_wins.text = String(wins);
                                        r_i.txt_losses.text = String(losses);
                                  }
                                }
                                r_i.btn_newgame.addEventListener(MouseEvent.CLICK, newGame);//по нажатию кнопки start, все выставляется по умолчанию
                                function newGame(e:MouseEvent):void
                                {
                                        r_i.btn_stone.visible = true;
                                        r_i.btn_scissors.visible = true;
                                        r_i.btn_paper.visible = true;
                                        r_i.txt_message.text = '';
                                        hidingButtons(true,true,true,'',true);
                                        r_i.btn_newgame.visible = false;
                                }
                }
//-----------------------------------------------------------------------------------------------генерируем цифру
                private function randRange(minNum:uint, maxNum:uint):uint
                {
                        return (Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum);
                }
 
        }//class
}//package

Добавлено через 8 минут
Работа выполнялась в Adobe Flash Professional cs5. Я просто накидал сцену, создал кнопки и для того чтоб манипулировать созданной сценой, передаю ссылку на нее в класс...
Удивитесь вы или нет но такой подход описан именно в КОЛИН МУКЕ...

HardCoder 07.02.2012 00:28

1. То, что написано в этом коде не имеет никакого отношения к тому коду, который вы привели в начале. Название переменной "r_i" здесь как-то не похоже на название "stage" в предыдущем коде. Поэтому вариант со "stage" не работает, а вариант с "r_i" будет работать.
2. Речь шла не о сцене - рабочей области главной временной шкалы (экземпляр класса MainTimeline, который вы передаете в класс), а о сцене - экземпляре класса Stage. Отсюда и произошло непонимание и холивар.
Согласен - передавать ссылку на экранные обьекты в конструктор можно, но в конце концов: не называть же их "stage" :)

Vitalya 07.02.2012 00:31

ну по сути такая ссылка даст возможность делать так
Код AS3:

r_i.stage

.

Не на что не претендую, просто хотел показать человеку как можно оторваться от кадров...

anmelegov 07.02.2012 00:37

я бы посоветовал начать с перехода на flashdevelop

zerAlex2 07.02.2012 02:34

И как в FD привязывать рисованную графику?

in4core 07.02.2012 03:50

Цитата:

И как в FD привязывать рисованную графику?
Через swc, через подгружаемую swf . 2х вариантов хватит? :)


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

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