PDA

Просмотр полной версии : extends MovieClip


TbIKBA
02.11.2007, 16:01
MovieClip в библиотеке жёстко привязывается к классу.
А если у меня несколько визуально разных MovieClip'ов должны управляться одинаково?! тупо создавать несколько одинаковых as файлов с разными названиями?!

etc
02.11.2007, 16:11
Указать им один и тот же базовый класс, а свой класс пусть генерируется исходя из имени.

Yuliy
02.11.2007, 18:16
Вопрос к ___etc о MovieClip в библиотеке.

Клас мувика: Symbol3
Базовый: flash.display.MovieClip

Я создаю объект:


package Sources
{
import flash.display.MovieClip;
import flash.events.*;
import flash.utils.*;

dynamic public class Enemy extends MovieClip
{
public static var df:Symbol3;

function Enemy() { }

function CreateEnemy():void
{
df = new Symbol3();
addChild(df);
df.stop();


df.visible = true;
df.x = 100;
df.y = 100;
trace(df);
}
}
}

Мне компилятор постоянно выдаёт фразу:
1046: Type was not found or was not a compile-time constant: Symbol3.

Почему я никак не могу создать нужным мне Мувик? Мне всё время пишут - что такого класса нет. (((

Мне не нужно чтобы класс Мувика совпадал с классом, мне нужно создать в классе Enemy .. около 10 разных Мувиков. Выход кончно есть - сделать один базовый класс. Но я посмотрел тему: "Знакомство с Flash 9 и ActionScript 3.0 на примере создания аркадной игры" и там у человека есть Мувик - HPline, котрый он спокойно инициализирует в классе basic_object так:
HP_mc = new HPline(); // создаем мувик полоски жизни

при этом у него нет класса HPline и базовый класс - flash.display.MovieClip
И всё работает.. я пробывал уже по разному писать.. у меня не работает (((

etc
02.11.2007, 18:25
Автогенерация классов включена?

Yuliy
02.11.2007, 19:33
:eek: ....а где эту опцию можно найти и отключить?

etc
02.11.2007, 19:34
Её включить как раз надо.
Впрочем, она должна работать и так.
Исходник в студию.

librio
02.11.2007, 20:26
Не глядя исходников видно, что нету строчки импорта класса Symbol3. Можно конечно предположить, что он лежит в том же пакете, но не уверен.
Возможно проблема в этом.

+ Не совсем по теме: Используя тот же FlexBuilder таких ошибок бы не было.

Yuliy
02.11.2007, 20:40
Хорошо... смотри.

librio
02.11.2007, 21:00
Об этом я и говорил...
Где класс Symbol3? Я его не вижу в пакете Sources
И компилятор не видит.
И правильно делает :)

Yuliy
02.11.2007, 21:18
Ещё раз для librio:

я не хочу создавать класс - Symbol3. Я хочу получить обычный Мувик на основе его базового стандартного класа - flash.display.MovieClip, таким образом:

var myMovic:Symbol3 = new Symbol3(); // и дальше
addChild(myMovic);
myMovic.visible = true;
.....
без написание своего класса - Symbol3.

aQuestion
02.11.2007, 22:04
если єкспортировать в первый фрейм, то работает (после приписки public function CreateDragonFly())

etc
02.11.2007, 22:46
librio, речь идет об автогенерации классов, Symbol3.as быть не должно.

Yuliy, необходимо обозначить метод CreateDragonFly (название которого, кстати, должно начинаться с маленькой буквы) публичным и поставить галочку экспорта в первый фрейм для Symbol3.

aQuestion
02.11.2007, 23:50
(название которого, кстати, должно начинаться с маленькой буквы)это, кстати, я от модеров этого форума уже дважды слышал (первый раз от Nirth, если не ошибаюсь). что, есть какой-то code convention от flasher.ru?

etc
02.11.2007, 23:56
Никакого code convetion от flasher.ru, это давно давноизвестный общепринятый стандарт именования для Java/ActionScript.

Yuliy
03.11.2007, 02:24
не увидел сразу, что вторая страничка с ответами появилась.

aQuestion, __etc - спасибо. Да. trace(df) - пишет что объект создан. Только почему я этот квадрат не вижу на сцене? Там он то и нужен.. в этом вся соль.

__etc у меня синтаксис из С++ - это моя основная специлизация.

aQuestion
03.11.2007, 02:28
почему я этот квадрат не вижу на сцене?some_clip_on_stage.addChild(your_new_clip)

Snut
03.11.2007, 02:29
addChild(); addChildAt();

Yuliy
03.11.2007, 03:00
...
public static var df:Symbol3 = new Symbol3();
....
public function CreateDragonFly():void
{
df.x = 100;
df.y = 100;
addChild(df);

trace(df);
}

И на экране пусто...:(

Snut
03.11.2007, 03:06
эээ нее, addChild надо задавать в Document class

Yuliy
03.11.2007, 03:29
Snut
всё.. наконец-то.. класс mEnemy тоже нужно было добавить - addChild(mEnemy);

Ура... победа.

Хотя это ужасно))))).... куча разных неудобств. Без галочки "Export in first frame" - ничего не работало.. и кучка этих addChild() - меня это на 2 дня задержало.

А то что объект df должен быть public static - мне вообще не нравится. Это же нарушение ООП - инкапсуляция данных!

И мало того... в MainTimeline я не могу сделать так:


stop();

import flash.display.MovieClip;
import flash.events.*;
import flash.utils.*;

import Sources.*;

var mEnemy:Enemy = new Enemy();
mEnemy.CreateDragonFly();
addChild(mEnemy);
//--------------------------------------------
this.addEventListener(Event.ENTER_FRAME, SceneUpdate);
function SceneUpdate(ev:Event):void
{
mEnemy.df.x = 10;
}

Мне это не нужно.... но всё равно.

etc
03.11.2007, 13:35
__etc у меня синтаксис из С++ - это моя основная специлизация.
И что? А в ActionScript другой стандарт. Хочешь или нет, а следовать нужно.

aQuestion
03.11.2007, 14:04
Хочешь или нет, а следовать нужно.мне вот интересно, извините за оффтоп, есть ли тут какая аргументация кроме стадного инстинкта? я бы ещё понял, скажем, нечто вроде "пишите методы с маленькой буквы, чтобы некая стандартная тулза отличала их от не-методов"... но если речь идет о других программерах, читающих код, по-моему трудно заподозрить в xxx.DoSomething() что-либо иное, кроме метода?

etc
03.11.2007, 14:12
MyClass — класс.
myMethod — метод.
myVariable — переменная или геттер/сеттер. И т.п.
Если вы хотите идти против правил, придуманных ещё для java бог знает когда (стандарты же не просто так придумывают, так ведь?), то вас не возьмут ни в одну серьезную компанию. Почему? Потому что ваше «да тут и так же все понятно» никто разбирать не будет, когда в конторе работает сотня программистов и все пишут так, как им удобно, то ничего дельного из этого не выйдет. Поэтому и был придуман стандарт (одобренный Adobe, кстати!), которому нужно следовать, чтобы код любого программиста мог без проблем прочитать другой программист и чтобы в целом код проекта не был разномастным. Это не стадный инстикт, а необходимость. Тем более, никакой принципиальной сложности в следовании стандарту нет, я не понимаю, чего все воротят нос. Если бы я после ActionScript пришёл на C# и стал бы всюду писать методы с маленькой буквы, вы бы сделали мне замечание? Ещё как. Поэтому, со своим уставом в чужой монастырь… а дальше вы сами знаете.

aQuestion
03.11.2007, 15:12
Поэтому и был придуман стандарт (одобренный Adobe, кстати!)линк в студию. пожалуйста?

...не, оно то понятно в общем и целом, но я ещё не видел людей, которые имели бы реальные трудности с чтением кода по причине других конвеншенов.

etc
03.11.2007, 15:58
http://www.adobe.com/devnet/flash/articles/as_bestpractices_02.html

Не видеть и работать с этими людьми постоянно — разные вещи.
Нельзя допускать разношерстности кода, код должен быть един по внешнему виду у всех программистов. Не детали реализации той или иной вещи, а нейминг, ASDoc-и и т.п.

Например, у нас, потенциальный кандидат значительно снизит шансы приема на работу, если у него методы зовутся с прописной. Если и будет принят на работу, то пройдет курс жесткого следования стандартам. Либо ты пишешь как все (и как принято в мире Java/AS) и работаешь с нами, либо пишешь как хочешь, но сам по себе.

Yuliy
03.11.2007, 18:16
__etc

Я с тобой согласен, что стандарт это важно, и на твой синтаксис будут смотерть в каждой солидной конторе.

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

Могут и отказать в работе.. работать с кем-то.. это не самому. И разгадывать чужой код.. где и как оно написанно - ужжжасное знаятие.

etc
03.11.2007, 18:21
Нет, не стандарт главного программиста, а общепринятый мировой стандарт. Если программист о нем не знает, значит его можно сразу не брать.

Snut
03.11.2007, 21:29
а еще DEFAULT_CONSTANT

aQuestion
03.11.2007, 22:12
Если программист о нем не знает, значит его можно сразу не брать.Не хочу нарываться на грубость, но фразы вроде этой навеивают образ этакого молодого менеджера, который на собеседовании не слушает кандидата, а смотрит на то, как начищены его туфли, и правильно ли подобран галстук к костюму.

DarkLight
03.11.2007, 22:32
2 aQuestion
Не могу с Вами согласиться. Представьте ситуацию, что Вам нужен человек для забивания гвоздей. Он приходит и говорит что будет забивать их отверткой. При упоминании о молотке он говорит, что это не нужно, у него есть большой опыт использования отвертки и на результат это не повлияет. Вы возьмете этого человека?

etc
03.11.2007, 22:33
aQuestion, ты упорно меня не хочешь понять, очень жаль. Причем тут туфли? Речь идет о том, что этот самый кандидат может и гениален, но оформляет рамку чертежа не так, как все делают, а так, как ему хочется, разместив её в другой части листа и перевернув. Плюс к этому делает сноски на другой чертеж.

†‡Paladin‡†
03.11.2007, 22:39
2 aQuestion
Не могу с Вами согласиться. Представьте ситуацию, что Вам нужен человек для забивания гвоздей. Он приходит и говорит что будет забивать их отверткой. При упоминании о молотке он говорит, что это не нужно, у него есть большой опыт использования отвертки и на результат это не повлияет. Вы возьмете этого человека?
Я возьму ибо нацелен на результат.

DarkLight
03.11.2007, 22:45
...а то что он разобьет отвертки, и другим нечем будет винты закручивать не волнует? [Взаимодействие с другими программистами и поддержка кода] Хотя при этом гвозди будут честно забиты...

Nirth
03.11.2007, 23:31
Ой, не спорьте вы с aQuestion, себе дороже.

Насчет code convention. Надо сказать что соблюдать ее трудно.

Сейчас у нас есть проект, где сервер сайд на python (там переменные именуються так property_name, как в Ruby и PHP).

Код для серверной части генерируеться генератором. Тоесть генератор просто бегает по серверу, шлет запросы и автогенерирует ValueObject'ы и Фасады/Контролеры на ActionScript. В таких случаях соблюдать конвенцию ActionScript практически не возможно. Не рефакторить же 100+ моделей и фасад.

DarkLight
03.11.2007, 23:45
...ну разговор идет чтобы соблюдать вначале разработки:) Понятно что рефакторить тонны работющего кода уже практически бессмыслено

aQuestion
03.11.2007, 23:48
2etc: я имел ввиду, что код конвеншнз - административная мера. Вы приняли кандидата, и обязали его следовать таким-то правилам - и вопрос исчерпан. Почему кандидат обязан знать Ваши правила заранее?

Может в области флеша в России (в мире ?) дела обстоят иначе, но - к примеру - наша контора аутсорсит на marvell (http://www.marvell.com/) (который делает разработки для брендов Dell, HP, 3Com, Cisco/Linksys, DLink... ну и т.д.) , и за полтора года в ней я насмотрелся на достаточное количество их исходников, чтобы понять что такой весчи как "общепринятые стандарты программирования в мировой практике" не существует. Отсюда мои вопросы. Я только рад, если в Вашей области дела обстоят лучше.

Nirth
04.11.2007, 00:05
Ключевое слово - аутсорсит=)

aQuestion
04.11.2007, 00:09
Ну да. У нас - на Украине - все работают в роли индусов (а в нашем случае - на индусов), которые индусят на развитые страны. На внутреннем рынке програмеры почти никому не нужны :(

Nirth
04.11.2007, 03:00
которые индусят на развитые страны. На внутреннем рынке програмеры почти никому не нужны
Я в свое время, когда понял что я никому в россии не нужен (там были другие причины), упаковал вещи и смотался, туда где я нужен. Страшно было да, но зато какой эффект=).

etc
04.11.2007, 12:23
2etc: я имел ввиду, что код конвеншнз - административная мера. Вы приняли кандидата, и обязали его следовать таким-то правилам - и вопрос исчерпан. Почему кандидат обязан знать Ваши правила заранее?
Ещё раз: это НЕ МОИ правила. Не я их придумал, не придумали их в компании. Это общемировые правила, ещё раз об этом говорю. Если программист об этом не знает, значит он недостаточно компетентен.

И речь идет не об аутсорсинге, где каждый программер как раз волен писать так, как ему вздумается, даже не задумываясь о том, что его код кто-то смотреть будет. Его дело — быстренько и кривенько (быстренько = кривенько) написать, получить бабло и смотаться. Всё.

iNils
04.11.2007, 12:37
Если программист об этом не знает, значит он недостаточно компетентен.Дениса иногда заносит в крайности. Главное какой код он пишет, а не как он его пишет. И объяснить стандарты совсем не проблема.

etc
04.11.2007, 12:47
Я не говорю, что из-за незнания его сразу не возьмут и не будут дальше смотреть его код.
Но если ты считаешь себя хорошим программистом — пиши соответственно.
У меня сложилось впечатление, что aQuestion предлагает просто забить на стандарты, потому как «да ладно, ведь всё и так понятно, разберетесь».

iNils
04.11.2007, 12:51
Но если ты считаешь себя хорошим программистом — пиши соответственно.Денис, это исправляется в течении пары вводных дней в работу.

etc
04.11.2007, 12:54
Но тебе не кажется как минимум странным, что программист не знает или специально не использует стандарты?
Ведь в их соблюдении нет ничего сложного (случай Nirth-а не в счет).

iNils
04.11.2007, 13:06
Но тебе не кажется как минимум странным, что программист не знает или специально не использует стандарты?Мне нет. Может быть потому, что я никогда не понимал, почему снижают оценку за оформление, не за расклад расчетов, а именно за общее оформление контрольных работ или экзаменов по математике. Для меня важно содержимое, а не фасад и поэтому, если ты говоришь программисту, что методы надо называть с маленькой буквы и он говорит "Не вопрос", то я не вижу проблемы.

etc
04.11.2007, 13:12
В этой теме «не вопрос» не прозвучало. Прозвучало «а нафига?».

iNils
04.11.2007, 13:21
Ты стрелки не переводи :D
Я начал с твоей фразы "Если программист об этом не знает, значит он недостаточно компетентен", а не с того, что он знает и игнорирует .

etc
04.11.2007, 13:27
Если бы знал — применял бы на практике. Если не знает — плохо, но ещё не смертельно.

Yuliy
05.11.2007, 18:02
да тут бурная дисскуссия)))) ... единого мнения всё равно не будет!

Для __etc - фирме, которая делает конечный продукт - прямо скажу, наплевать на мировые стандарты.

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

Примеров: комитет стандартизации разработал стандарт ANSI для С++. Корпорация Майкрософт разработала свой стандарт и в компиляторах стоят перемычки - потому что стандарты не совместимы.

Стандарты - это хорошо, их лучше соблюдать и знать, тогда есть большая вероятность всем угодить!

К примеру я терпеть не могу этого синтаксиса:
public function testFunction(num:Number): void {
var myVariable:Number = new Number();
}

Правильно нужно писать так:
public function TestFunction(): void
{
var nVariable:Number = new Number(); // n - обозначает тип переменной
}

Если новый Flash будет слит с С++, тогда синтаксис будет такой:

class Testing
{
public: // ниже идёт объявление(можно сразу с телом) функций - public
void TestFunction(Number num)
{
Number nVariable = 0;
}
void NextFuntion();
}
Объявление классов - идёт в одном файле, а описание функций - в другом.
С++ - это минимализм, зачем писать каждый раз function? Компилятор не в силах понять где переменная а где функция? Зачем каждый раз писать new для переменной или var - это должен делать компилятор!
Кстати, var - это вообще из Пасакля.. хорошо что хоть end и begin оттуда не взяли, а то пришлось бы везде тыкать их.

__etc - молодец, на форуме должен быть стандарт

etc
05.11.2007, 19:55
Правильно нужно писать так:
Это «правильно» — правильно в C++. В ActionScript это совершенно неправильно и в корне неверно.

Я понимаю, что вы пришли из C++, но вот когда я к вам приду из ActionScript, то мое заявление «Правильно нужно писать так:» с тем вариантом, который вы терпеть не можете, будет тут же отвергнуто сишниками, как и ваше заявление сейчас.

Поэтому, то, что для вас правильно, применяйте в C++, ибо там это стандарт. Для ActionScript/Java стандарт иной. Достаточно посмотреть названия методов, констант, классов встроенного фреймворка плеера, чтобы понять, как именно нужно писать код. Смесь двух стандартов неприемлима ни разу.

aQuestion
05.11.2007, 20:22
Кстати, var - это вообще из Пасакля.. хорошо что хоть end и begin оттуда не взяли, а то пришлось бы везде тыкать их.var появился из необходимости обозначить локальные переменные в функции. такая же фигня есть в жаваскрипте. в РНР зашли с другой стороны, там есть global. все перечисленные языки не имеют отношения к паскалю.