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

DDDBest 30.05.2014 19:50

что в переменной
 
Здравствуйте, я когда то занимался делфи, писал там что то, все понятненько мне было вродь, сейчас заморочился экшнскриптом, читаю Колина Мука, прочитал что там доходчиво все, так вот не понимаю многого, постарел видать, начну с самого начала:

файл x1.as

Код AS3:

package x {
        public class x1 {
                public function x1() {
                        var y = new y1;
                }
        }
}

файл y1.as

Код AS3:

package x {
        internal class y1 {
        }
}

вот блин, создание объекта класса y1 - new y1, присваивание переменной "y" объекта класса y1 - var y = new y1;
Вот не пойму, чем стала переменная игрек? Если к примеру, как в делфях там было что то типо
string var y = "woohu";
Label1Text = y; тобишь отображаем значение переменной y на label1. Так вот, если подобным примером в экшнскрипте отобразить значение переменной y на экран в формате string (строки), то что это будет? Вот не пойму во что превратилась y при var y = new y1;
Спасибо!

Wolsh 30.05.2014 20:14

Переменная "стала" экземпляром класса у1.
На самом деле переменная хранит ссылку(!) на экземпляр.
Если бы Вы присвоили ей строковое значение, она хранила бы значение (строки и числа передаются по значению, а не по ссылке).
Если Вы попытаетесь "вывести на экран в формате string (строки)" экземпляр класса у1, будет автоматически вызван метод toString() класса у1 (унаследованный от Object), который вернет строковое представление экземпляра (скорее всего "[Object y1]").

caseyryan 30.05.2014 20:15

Ну так сделайте так
Код AS3:

trace(y);

И в консоль выведет, что это [Object y1]
Так как переменная является экземпляром класса y1. AS3 типизированный язык, и каждая переменная имеет свой тип данных

Добавлено через 49 секунд
Wolsh, опередил )

MikroAcse 30.05.2014 23:48

Код AS3:

var y:y1 = new y1();

Код AS3:

var название_переменной:Тип = new Класс();

Если будете писать так, то точно будете знать, что переменная имеет конкретный тип.

caseyryan 30.05.2014 23:53

Тогда уж правильнее писать
Код AS3:

var название_переменной:Тип = new Тип();


MikroAcse 30.05.2014 23:57

А если так?
Код AS3:

var vehicle:Vehicle = new Tank()


in4core 31.05.2014 00:09

Цитата:

А если так?
Код AS3:
var vehicle:Vehicle = new Tank()
Не так, а так
Цитата:

var vehicle:IVehicle = new Tank()
Тогда так :)

MikroAcse 31.05.2014 00:22

Цитата:

Тогда так
Это как-то изменило мой ответ? :)

Wolsh 31.05.2014 00:28

Кейси, Типом может быть и Интерфейс, который, как известно, не может породить экземпляров))

во, in4core уже продемонстрировал.
И нет, не изменило)

DDDBest 31.05.2014 03:33

Спасибо! А вот:
Код AS3:

trace(y);

это где прописать? А вот:
Цитата:

И в консоль выведет, что это [Object y1]
В какую консоль?=)
У меня FlashDevelop
И вот что не понятно еще, в книге описан чисто код, без компиляции, в делфи там было сразу форма главная, там прописано что нужно уже, и ты с нее начинаешь, в FlashDevelop же чтоб откомпилировать нужно проэкт новый, а там main.as, и никуда без него, как мне компилировать те простенькие примеры из книги, которые там приводятся? Основным файлом с точкой входа какой то=) с основным классом брать main.as а не тот файл, который автор советует создавать в книге?

ZackMercury 31.05.2014 04:08

DDDBest, плохо вы Delphi учили, всё же ООП, как-никак, там присутствует.
Консоль имеется в виду OUTPUT. Включается в меню View -> Output Panel.
Если вы про примеры зоопарка, то там всё по порядку идёт, и позже вы дойдёте до той главы, где рассказывается, как скомпилировать проект во Flash IDE.
Во FlashDevelop почти то же самое, только главный класс приложения по умолчанию сразу создаётся и называется Main.

DDDBest 31.05.2014 05:25

Ага с мэйном вродь разобрался, туда все фигачу=) А вот с trace(x); не получается, не выводит значение, пишу так:
Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.Event;
        import xxx.y;
 
        /**
        * ...
        * @author xxx
        */

        public class Main extends Sprite
        {
                public var  x = new y;
                trace(x);
 
                public function Main():void
                {
 
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
                }
 
        }       
}

файл y.as

Код AS3:

package xxx {
        public class y {
                public function y() {
                }
        }
}


ZackMercury 31.05.2014 05:48

Пишите после коммента "entry point", не зря же он там написан.
Код AS3:

package 
{
        import flash.display.Sprite;
        import flash.events.Event;
        import xxx.y;
 
        /**
        * ...
        * @author xxx
        */

        public class Main extends Sprite
        {
                public var  x:y;
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
 
                        x = new y();
                        trace(x);
                }
 
        }       
}

Ещё должен стоять Debug mode.

caseyryan 31.05.2014 09:48

Цитата:

А вот с trace(x); не получается, не выводит значение, пишу так:
Потому что в этом месте переменная x не инициализирована. Хоть там и написано new y, но в реальности инициализация произойдет только в конструкторе.

П.с. не надо учиться сразу плохому. Во-первых, названия классов нужно всегда писать с большой буквы, а названия переменных с маленькой, во-вторых, при создании нового экземпляра, принято всегда ставить скобки после вызова конструктора, даже если туда не передается никаких аргументов new y();

Wolsh 31.05.2014 13:34

А создавать в наследнике Спрайта public свойство х это нормально?) Никто не ругается?

DDDBest 31.05.2014 13:35

Вложений: 1
Ничего не выходит=( Вот тут дело наверное в дебагере=) Как проверить, стоит он (дебагер:D), или нет? А про то, что не нужно сразу учиться плохому, делать все по человечески - так я раздолбай, и для меня это ничего не изменит, я уверен, а мои гениальные коды изучать я думаю никто не будет, я занимаюсь для "покурочить мозги", не более. Вот вспомнил я игру, старенькую со старенькой нокии еще, там кубы цветные много их, по ним клацаешь и смежные такого цвета убираются, поискал - не нашел, вот задумал написать=) На делфи самый "маштабный" проэкт - игра свара или сэка, где как называется=))) Помню очень много строк почти одинаковых ушло на оценку компом комбинации, хоть и был уверен, что можно найти какой то алгоритм и сделать это поменьше чтоб занимало, но хотелось все самому, что там не моего - обложка карт - с AdultPoker'а. Вот она собственно.

DDDBest 31.05.2014 13:37

Цитата:

Сообщение от Wolsh (Сообщение 1167070)
А создавать в наследнике Спрайта public свойство х это нормально?) Никто не ругается?

Ну я откомпилировал так как он написал - все норм, как по маслечку=) Только ничего оно мне не показывает=(
Аха, не так понял, ты про мой пример
Код AS3:

public class Main extends Sprite  {
 public var  x = new y;
 trace(x);

Таки да, я не правильно написал, оно не компилируется, я перенес потом, суть моего вопроса не в этом=))

ZackMercury 31.05.2014 14:44

Цитата:

Только ничего оно мне не показывает=(
Debug mode on?
P.S. Мои попытки вложить скрин из Dropbox оказались неудачными, не понимаю, с чего вы его так ненавидите.(К админам) С ним удобно.

Wolsh 31.05.2014 14:54

Цитата:

Чтобы обратиться к предыдущему, достаточно написать super.x, к текущему - this.x.
Изобразите, как Вы обратитесь к "супер" х экземпляра извне?
Впрочем, сначала Вам придется скомпилиться в игноре.

ZackMercury 31.05.2014 14:57

Цитата:

Впрочем, сначала Вам придется скомпилиться в игноре.
Да я уже попробовал скомпилиться, не компилится. Раньше думал, что так можно.

caseyryan 31.05.2014 15:42

Цитата:

P.S. Мои попытки вложить скрин из Dropbox оказались неудачными, не понимаю, с чего вы его так ненавидите.(К админам) С ним удобно.
Все просто. Ты потом из дропбокса удалишь файл, и он исчезнет с форума. А если зальешь сюда, то пока работает форум, и файл будет доступен

ZackMercury 31.05.2014 15:48

Цитата:

Сообщение от caseyryan (Сообщение 1167076)
Все просто. Ты потом из дропбокса удалишь файл, и он исчезнет с форума. А если зальешь сюда, то пока работает форум, и файл будет доступен

Чтобы залить сюда, мне нужно сначала нажать Ctrl+PrtScrn, потом открыть Dropbox, оттуда загрузить файл на сервер flasher.ru, и после этого уже вставлять картинку.
Вместо того, чтобы нажать Ctrl + PrtScrn, потом Ctrl+V, дождаться, пока автор темы посмотрит скрин и всё поймёт, и удалить файл. Что же в этом противоестественного?
Ну да, в интернете ведь так мало типов, как включить Debug mode.

DDDBest 31.05.2014 17:05

Ребятки, ребятушки, ну как, как сделать Debug mode on? Я хочу чтоб оно мне показало(значение:)) И вот я кажется понял что меня сбило с толку и чего не было (или было но не так или я не помню, не важно) в делфи,
Код AS3:

var x = new y();

Это выходит что это всего лишь для того, чтоб как то обратиться к образцу, или объекту, как его там, класса у??
То есть в делфи если я создавал переменную, то присваивал ей определенное значение для определенных целей, а тут выходит что просто переменной присваивается (она ссылается на) объект (образец класса) класса у просто для возможности в дальнейшем обратиться к этому объекту?? Так?

Добавлено через 19 минут
а вот еще что оно внизу пишет: waiting for flash player to connect to debugger а потом No debug Flash player connection request в окне аутпута, что ему не так?

ZackMercury 31.05.2014 18:45

Вложений: 1
Debug.

ZackMercury 31.05.2014 18:48

Цитата:

а тут выходит что просто переменной присваивается (она ссылается на) объект (образец класса) класса у просто для возможности в дальнейшем обратиться к этому объекту?? Так?
Именно так.
Это называется экземпляр класса.
В классе y вы можете создать публичную переменную, например someVar.
Так вот, при повторном создании экземпляра класса y второй переменной присвоится ссылка на экземпляр класса, который имеет уже другое значение someVar. Вы можете его поменять, и посмотреть, что будет с первым.
А вообще, раз вы такое выдаёте, советую хотя-бы видеокурс от easyflash.org посмотреть по ActionScript3.0 с нуля, чтобы получить хоть какую-то основу.
А потом уже можно и Мука читать.

DDDBest 31.05.2014 18:54

Вложений: 1
Ребята, появилось вот такое окно слева, и в аутпуте пишет что объект y1, я что то шаманил, флеш плеер обновил, что то клацал, но я вам КЛЯНУСЬ такого раньше не было, не окошка этого слева как на картинке, ни записи в аутпуте! и писало waiting for flash player to connect to debugger а потом No debug Flash player connection request, что это могло быть? Чтоб больше такого не было?

ZackMercury 31.05.2014 19:12

DDDBest, это именно то, что нужно. Включился отладчик, который поначалу вам не нужен.
А
Код:

[object y1]
это тот trace, который у вас в Main.
Вы ведь писали там
Код AS3:

trace(x);

, он и вывел вам, что это экземпляр класса(объект класса) y1.
trace() - Это директива, может даже функция, которая выводит содержимое скобок(передаваемые аргументы, перечисленные через запятую) в консоль Output через пробел. Это как
Код:

writeln()
в Паскале.
Если вы напишете
Код AS3:

trace("Hello, world!");

, то в консоль выведется
Код:

Hello, world!
строка.
Если вы напишете
Код AS3:

trace("Hello, world!", x);

Выведется
Код:

Hello, world! [object y1]
trace() используется для отладки(в обычных флешках нет никакой консоли, она есть только в дебаггере IDE).

DDDBest 31.05.2014 19:36

SuriTheAngel, спасибо! видеокурс от easyflash.org обязательно гляну! а вот про отладчик все равно не пойму почему раньше его не было и тут появился, он так же загадочным образом и исчезнуть же может, и я не буду знать что делать=(

ZackMercury 31.05.2014 19:52

DDDBest, в Debug mode он сам появляется при запуске проекта, и сам исчезает при закрытии. В Release его нет.

MikroAcse 31.05.2014 21:57

Цитата:

пока автор темы посмотрит скрин и всё поймёт, и удалить файл. Что же в этом противоестественного?
Это же не чатик какой-то. Зачем лишний раз лезть в гугл, если можно прямо здесь посмотреть?

caseyryan 31.05.2014 22:10

Цитата:

Сообщение от DDDBest (Сообщение 1167088)
видеокурс от easyflash.org обязательно гляну!

Вот этого делать не нужно) Видеокурс там, кхм.., как бы помягче выразиться, не очень :D Глянул парочку примеров как-то раз. Поржал.
Лучше книжки читать.

ZackMercury 31.05.2014 23:04

caseyryan, видеокурс учит языку, а не приёмам. А к остальному ТС придёт в процессе практики.
Кроме того, после курса Мук самое то.

caseyryan 31.05.2014 23:14

Там даже конвенции не соблюдают, чему такой курс может научить. Курсы надо смотреть нормальные, от lynda.com или digitaltutors.com, но не эту шнягу

MikroAcse 31.05.2014 23:26

Цитата:

easyflash.org
фуфуфу
Смотрел однажды. Хорошо, что там уже ничего вроде как не добавляют больше)

ZackMercury 01.06.2014 00:37

И всё же это самое то для новичка.
Сам с него начал, поэтому не могу не посоветовать его.
По крайней мере, его смотреть не скучно, он не занудствует и всё довольно хорошо разжёвывает настолько, что всё становится понятным.
А после него и Мук подойдёт, который больше идёт как справка, чем как учебник для новичка.

MikroAcse 01.06.2014 01:25

Есть более хорошие сайты для уроков, в предыдущих постах уже упоминали.

DDDBest 01.06.2014 04:17

Да ладно вам, вот я уже 12 уроков глянул, вродь норм рассказывает, наоборот так углубляется, аж нудно до перемотки, прям для детей, что еще нужно? Конкретнее, почему фуфуфу?


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

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