Просмотр полной версии : extends MovieClip
MovieClip в библиотеке жёстко привязывается к классу.
А если у меня несколько визуально разных MovieClip'ов должны управляться одинаково?! тупо создавать несколько одинаковых as файлов с разными названиями?!
Указать им один и тот же базовый класс, а свой класс пусть генерируется исходя из имени.
Вопрос к ___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
И всё работает.. я пробывал уже по разному писать.. у меня не работает (((
Автогенерация классов включена?
:eek: ....а где эту опцию можно найти и отключить?
Её включить как раз надо.
Впрочем, она должна работать и так.
Исходник в студию.
Не глядя исходников видно, что нету строчки импорта класса Symbol3. Можно конечно предположить, что он лежит в том же пакете, но не уверен.
Возможно проблема в этом.
+ Не совсем по теме: Используя тот же FlexBuilder таких ошибок бы не было.
Об этом я и говорил...
Где класс Symbol3? Я его не вижу в пакете Sources
И компилятор не видит.
И правильно делает :)
Ещё раз для 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())
librio, речь идет об автогенерации классов, Symbol3.as быть не должно.
Yuliy, необходимо обозначить метод CreateDragonFly (название которого, кстати, должно начинаться с маленькой буквы) публичным и поставить галочку экспорта в первый фрейм для Symbol3.
aQuestion
02.11.2007, 23:50
(название которого, кстати, должно начинаться с маленькой буквы)это, кстати, я от модеров этого форума уже дважды слышал (первый раз от Nirth, если не ошибаюсь). что, есть какой-то code convention от flasher.ru?
Никакого code convetion от flasher.ru, это давно давноизвестный общепринятый стандарт именования для Java/ActionScript.
не увидел сразу, что вторая страничка с ответами появилась.
aQuestion, __etc - спасибо. Да. trace(df) - пишет что объект создан. Только почему я этот квадрат не вижу на сцене? Там он то и нужен.. в этом вся соль.
__etc у меня синтаксис из С++ - это моя основная специлизация.
aQuestion
03.11.2007, 02:28
почему я этот квадрат не вижу на сцене?some_clip_on_stage.addChild(your_new_clip)
addChild(); addChildAt();
...
public static var df:Symbol3 = new Symbol3();
....
public function CreateDragonFly():void
{
df.x = 100;
df.y = 100;
addChild(df);
trace(df);
}
И на экране пусто...:(
эээ нее, addChild надо задавать в Document class
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 у меня синтаксис из С++ - это моя основная специлизация.
И что? А в ActionScript другой стандарт. Хочешь или нет, а следовать нужно.
aQuestion
03.11.2007, 14:04
Хочешь или нет, а следовать нужно.мне вот интересно, извините за оффтоп, есть ли тут какая аргументация кроме стадного инстинкта? я бы ещё понял, скажем, нечто вроде "пишите методы с маленькой буквы, чтобы некая стандартная тулза отличала их от не-методов"... но если речь идет о других программерах, читающих код, по-моему трудно заподозрить в xxx.DoSomething() что-либо иное, кроме метода?
MyClass — класс.
myMethod — метод.
myVariable — переменная или геттер/сеттер. И т.п.
Если вы хотите идти против правил, придуманных ещё для java бог знает когда (стандарты же не просто так придумывают, так ведь?), то вас не возьмут ни в одну серьезную компанию. Почему? Потому что ваше «да тут и так же все понятно» никто разбирать не будет, когда в конторе работает сотня программистов и все пишут так, как им удобно, то ничего дельного из этого не выйдет. Поэтому и был придуман стандарт (одобренный Adobe, кстати!), которому нужно следовать, чтобы код любого программиста мог без проблем прочитать другой программист и чтобы в целом код проекта не был разномастным. Это не стадный инстикт, а необходимость. Тем более, никакой принципиальной сложности в следовании стандарту нет, я не понимаю, чего все воротят нос. Если бы я после ActionScript пришёл на C# и стал бы всюду писать методы с маленькой буквы, вы бы сделали мне замечание? Ещё как. Поэтому, со своим уставом в чужой монастырь… а дальше вы сами знаете.
aQuestion
03.11.2007, 15:12
Поэтому и был придуман стандарт (одобренный Adobe, кстати!)линк в студию. пожалуйста?
...не, оно то понятно в общем и целом, но я ещё не видел людей, которые имели бы реальные трудности с чтением кода по причине других конвеншенов.
http://www.adobe.com/devnet/flash/articles/as_bestpractices_02.html
Не видеть и работать с этими людьми постоянно — разные вещи.
Нельзя допускать разношерстности кода, код должен быть един по внешнему виду у всех программистов. Не детали реализации той или иной вещи, а нейминг, ASDoc-и и т.п.
Например, у нас, потенциальный кандидат значительно снизит шансы приема на работу, если у него методы зовутся с прописной. Если и будет принят на работу, то пройдет курс жесткого следования стандартам. Либо ты пишешь как все (и как принято в мире Java/AS) и работаешь с нами, либо пишешь как хочешь, но сам по себе.
__etc
Я с тобой согласен, что стандарт это важно, и на твой синтаксис будут смотерть в каждой солидной конторе.
При написании больших проектов - в группе разработчиков устнавливаются жёсткие правила каким должен быть синтаксис .. не всегде эти правила полностью соответствуют стандарту.. :) ..они соответствуют стандарату главного программиста. Если бы это был __etc - то стандарт бы выдерживался))))
Могут и отказать в работе.. работать с кем-то.. это не самому. И разгадывать чужой код.. где и как оно написанно - ужжжасное знаятие.
Нет, не стандарт главного программиста, а общепринятый мировой стандарт. Если программист о нем не знает, значит его можно сразу не брать.
aQuestion
03.11.2007, 22:12
Если программист о нем не знает, значит его можно сразу не брать.Не хочу нарываться на грубость, но фразы вроде этой навеивают образ этакого молодого менеджера, который на собеседовании не слушает кандидата, а смотрит на то, как начищены его туфли, и правильно ли подобран галстук к костюму.
DarkLight
03.11.2007, 22:32
2 aQuestion
Не могу с Вами согласиться. Представьте ситуацию, что Вам нужен человек для забивания гвоздей. Он приходит и говорит что будет забивать их отверткой. При упоминании о молотке он говорит, что это не нужно, у него есть большой опыт использования отвертки и на результат это не повлияет. Вы возьмете этого человека?
aQuestion, ты упорно меня не хочешь понять, очень жаль. Причем тут туфли? Речь идет о том, что этот самый кандидат может и гениален, но оформляет рамку чертежа не так, как все делают, а так, как ему хочется, разместив её в другой части листа и перевернув. Плюс к этому делает сноски на другой чертеж.
†‡Paladin‡†
03.11.2007, 22:39
2 aQuestion
Не могу с Вами согласиться. Представьте ситуацию, что Вам нужен человек для забивания гвоздей. Он приходит и говорит что будет забивать их отверткой. При упоминании о молотке он говорит, что это не нужно, у него есть большой опыт использования отвертки и на результат это не повлияет. Вы возьмете этого человека?
Я возьму ибо нацелен на результат.
DarkLight
03.11.2007, 22:45
...а то что он разобьет отвертки, и другим нечем будет винты закручивать не волнует? [Взаимодействие с другими программистами и поддержка кода] Хотя при этом гвозди будут честно забиты...
Ой, не спорьте вы с 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... ну и т.д.) , и за полтора года в ней я насмотрелся на достаточное количество их исходников, чтобы понять что такой весчи как "общепринятые стандарты программирования в мировой практике" не существует. Отсюда мои вопросы. Я только рад, если в Вашей области дела обстоят лучше.
Ключевое слово - аутсорсит=)
aQuestion
04.11.2007, 00:09
Ну да. У нас - на Украине - все работают в роли индусов (а в нашем случае - на индусов), которые индусят на развитые страны. На внутреннем рынке програмеры почти никому не нужны :(
которые индусят на развитые страны. На внутреннем рынке програмеры почти никому не нужны
Я в свое время, когда понял что я никому в россии не нужен (там были другие причины), упаковал вещи и смотался, туда где я нужен. Страшно было да, но зато какой эффект=).
2etc: я имел ввиду, что код конвеншнз - административная мера. Вы приняли кандидата, и обязали его следовать таким-то правилам - и вопрос исчерпан. Почему кандидат обязан знать Ваши правила заранее?
Ещё раз: это НЕ МОИ правила. Не я их придумал, не придумали их в компании. Это общемировые правила, ещё раз об этом говорю. Если программист об этом не знает, значит он недостаточно компетентен.
И речь идет не об аутсорсинге, где каждый программер как раз волен писать так, как ему вздумается, даже не задумываясь о том, что его код кто-то смотреть будет. Его дело — быстренько и кривенько (быстренько = кривенько) написать, получить бабло и смотаться. Всё.
Если программист об этом не знает, значит он недостаточно компетентен.Дениса иногда заносит в крайности. Главное какой код он пишет, а не как он его пишет. И объяснить стандарты совсем не проблема.
Я не говорю, что из-за незнания его сразу не возьмут и не будут дальше смотреть его код.
Но если ты считаешь себя хорошим программистом — пиши соответственно.
У меня сложилось впечатление, что aQuestion предлагает просто забить на стандарты, потому как «да ладно, ведь всё и так понятно, разберетесь».
Но если ты считаешь себя хорошим программистом — пиши соответственно.Денис, это исправляется в течении пары вводных дней в работу.
Но тебе не кажется как минимум странным, что программист не знает или специально не использует стандарты?
Ведь в их соблюдении нет ничего сложного (случай Nirth-а не в счет).
Но тебе не кажется как минимум странным, что программист не знает или специально не использует стандарты?Мне нет. Может быть потому, что я никогда не понимал, почему снижают оценку за оформление, не за расклад расчетов, а именно за общее оформление контрольных работ или экзаменов по математике. Для меня важно содержимое, а не фасад и поэтому, если ты говоришь программисту, что методы надо называть с маленькой буквы и он говорит "Не вопрос", то я не вижу проблемы.
В этой теме «не вопрос» не прозвучало. Прозвучало «а нафига?».
Ты стрелки не переводи :D
Я начал с твоей фразы "Если программист об этом не знает, значит он недостаточно компетентен", а не с того, что он знает и игнорирует .
Если бы знал — применял бы на практике. Если не знает — плохо, но ещё не смертельно.
да тут бурная дисскуссия)))) ... единого мнения всё равно не будет!
Для __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 - молодец, на форуме должен быть стандарт
Правильно нужно писать так:
Это «правильно» — правильно в C++. В ActionScript это совершенно неправильно и в корне неверно.
Я понимаю, что вы пришли из C++, но вот когда я к вам приду из ActionScript, то мое заявление «Правильно нужно писать так:» с тем вариантом, который вы терпеть не можете, будет тут же отвергнуто сишниками, как и ваше заявление сейчас.
Поэтому, то, что для вас правильно, применяйте в C++, ибо там это стандарт. Для ActionScript/Java стандарт иной. Достаточно посмотреть названия методов, констант, классов встроенного фреймворка плеера, чтобы понять, как именно нужно писать код. Смесь двух стандартов неприемлима ни разу.
aQuestion
05.11.2007, 20:22
Кстати, var - это вообще из Пасакля.. хорошо что хоть end и begin оттуда не взяли, а то пришлось бы везде тыкать их.var появился из необходимости обозначить локальные переменные в функции. такая же фигня есть в жаваскрипте. в РНР зашли с другой стороны, там есть global. все перечисленные языки не имеют отношения к паскалю.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.