Вход

Просмотр полной версии : Удаление самого себя


zhenya_new
18.04.2007, 16:05
В общем, создаю программно ролик (из библиотеки), а потом хочу удалить его, щелкнув на нем мышкой. Что-то через removeMovieClip() не получается. Как быть? Может, кто пример набросает? Заранее спасибо

etc
18.04.2007, 16:07
Какая глубина у клипа? Покажите код.

0xFFFFFF
18.04.2007, 16:19
может с адресацией проблемы?
попробуйте
var mc = // далее как вы обращаетесь к клипу
trace(mc);
mc.removeMovieClip();

zhenya_new
18.04.2007, 16:21
level=0;
attachMovie("33333","newcli"+level+2,level+2);

_root["newcli"+level+2]._x = _root. _xmouse;
_root["newcli"+level+2]._y = _root. _ymouse;

// increase level
level++;

etc
18.04.2007, 16:24
zhenya_new, оформите свой код в посте.

zhenya_new
18.04.2007, 16:31
В посте - это как???

iNils
18.04.2007, 16:45
Кнопка http://www.flasher.ru/forum/images/russian/style3/buttons/edit.gif

zhenya_new
18.04.2007, 18:07
Хотелось бы услышать мнение __etc

motor4ik
18.04.2007, 18:08
покажите код то, как мнение высказывать, мыже не экстрасексы

iNils
18.04.2007, 18:10
Хотелось бы услышать мнение __etcВы проверили то, что сказала Белая? С адресацией все нормально? И Моторчик тоже прав, покажите полный код загрузки и выгрузки, а лучше исходник.

zhenya_new
18.04.2007, 18:29
Таким образом:
Код в главной временной шкале:
/ initialize level
level = 0;
stop();
butt.onPress = function()
{
butt.enabled = false;
}

Код на кнопке:
on (press) {
// duplicate first clip
attachMovie("myMovieClip","newclip"+level,level);
// set a random position
_root["newclip"+level]._x = int(Math.random()*550);
_root["newclip"+level]._y = int(Math.random()*400);
// increase level
level++;
}

etc
18.04.2007, 18:35
Ну в первой строке вовсе не комментарий.
На кнопке код убрать.
В первом кадре сцены написать:
level = 0;
stop();
butt.onPress = function()
{
var mc = _root.attachMovie("myMovieClip","newclip"+level,level);
mc._x = Math.floor(Math.random()*550);
mc._y = Math.floor(Math.random()*400);
level++;
this.enabled = false;
}
Если требуется блокировка кнопки, конечно.

zhenya_new
18.04.2007, 18:44
Не выходит. После щелчка мышью на кнопке клип появляется, кнопка блокируется, но после щелчка мышью на появившемся клипе он не исчезает.

motor4ik
18.04.2007, 18:48
я просто все никак не могу увидеть removeMovieClip() )))) что то у вас тут явно не так в разговоре ))

etc
18.04.2007, 18:50
zhenya_new, а с чего он должен исчезать, если никакого кода, даже намека на какие-то действия клипа вообще не было приведено?

zhenya_new
18.04.2007, 18:59
Вообще-то, я в первом сообщении этой темы указал, что хотел бы получить именно этот результат. Другое дело, что не знаю как, поэтому и спрашиваю.

motor4ik
18.04.2007, 19:01
level = 0;
stop();
butt.onPress = function()
{
var mc = _root.attachMovie("myMovieClip","newclip"+level,level);
mc._x = Math.floor(Math.random()*550);
mc._y = Math.floor(Math.random()*400);
mc.onPress=function():Void{this.removeMovieClip();};
level++;
this.enabled = false;
}

etc
18.04.2007, 19:02
Моторчик, уж типизацию можно и убрать.

motor4ik
18.04.2007, 19:07
почему? зачем привыкать к плохому? согласен то что парит с большой буквы писать

zhenya_new
18.04.2007, 19:13
Попробовал предложенный код.
Не выходит. Такое сообщение вылезает:

Сцена=Scene 1, Слой=Layer 1, Кадр=1: Линия 8: '{'
mc.onPress=function():Void{this.removeMovieClip();};

Сцена=Scene 1, Слой=Layer 1, Кадр=1: Линия 11: '}'
}
Что у меня не так?

etc
18.04.2007, 19:14
Моторчик, потому что см. пост выше. Не вижу смысла применять типизацию в AS1.

zhenya_new, убери «:Void» (без кавычек).

motor4ik
18.04.2007, 19:17
почему в AS1?

iNils
18.04.2007, 19:21
Денис хватит придираться. Если ты не видишь смысла, это твои проблемы, не надо делать это стандартом для всех.

zhenya_new
18.04.2007, 19:23
О чудо из чудес!!! Наконец-то получилось! Благодарствую, уважаемые!!!

etc
18.04.2007, 19:24
почему в AS1?
Потому что это AS1. AS2 — в классах. В кадрах — AS1.

iNils, пост выше говорит о том, что типизация лишняя была. И то, что код AS1, по-моему, объяснять не нужно. Тем более, могут работать в шестерке.

iNils
18.04.2007, 19:25
Это проблемы автора и ему надо об этом говорить, а не Моторчику.

zhenya_new
18.04.2007, 19:31
Если автор - это я, то не знаю, какие там у меня проблемы. Сейчас я доволен как никогда. А до классов, чувствую, мне еще далеко...

etc
18.04.2007, 19:35
Это проблемы автора и ему надо об этом говорить, а не Моторчику.
Код можно было написать более совместимым со старыми версиями, если это возможно. В данном случае это возможно и сложностей не представляет.

wvxvw
18.04.2007, 21:50
Это... не спорьте, горячие финские парни =) Для недоверчивых есть кнопка "автоформат" (сверху над редактором для скриптов). Если флешу не нравится типизация в каком-то конкретном месте - он ее сам от туда и уберет.

etc
18.04.2007, 22:09
Тут даже дело не совсем в этом. Просто либо типизация везде в коде, либо вообще нигде.

wvxvw
18.04.2007, 22:17
Во все том же AS2 в классфайлах разработчики ММ посчитали, например, не правильным ставить строгую типизацию для итератора в цикле for... in (вне всякой связи с тем, существует ли типизация в остальном коде). Так что... не знаю, я бы не стал по этому поводу препираться =)

etc
18.04.2007, 22:28
Знаешь, про макромедийные классы, написанные индусами, уже много чего говорили, о том, что них плохие, по-моему, говорить не нужно.
Поэтому, если писать AS1 код, то либо он типизирован от и до (если очень хочется), либо вообще не типизирован. AS2 — типизирован. Про AS3 вообще не говорю, хотя там тоже можно нетипизировать код. Полутипизированный код, на мой взгляд, говорит о невысоком уровне разработчика. Повышать качество надо.

wvxvw
18.04.2007, 22:31
Не-не, я не об этом, попробуй
for(var s:String in _obj){
....
} И нажми на автоформат - флеш сам уберет типизацию, хотя итератор и является стрингом.

etc
18.04.2007, 22:43
Ну это, судя по всему, баг автокомплита. Что теперь, не будем типизировать код?

Ariel
19.04.2007, 00:16
Уберет, потому что The only type allowed for a for-in loop iterator is String. Сам же Вам это и напишет, ежели попробуете чего другого.. А в классическом for (var i:Number = 0; i < 10; i++) {
my_array[i] = (i + 5) * 10;
} уже не уберет!

etc
19.04.2007, 00:17
А это и не for…in, собственно. Налицо явный баг автокомплита.

Ariel
19.04.2007, 00:25
Имеется ввиду, что в for...in убирает, т.к. там один единственный поддерживаемый тип. А в стандартном for тип может быть любой. Так что все правильно он там убирает, раз так ему нравиццо. Хотя я бы лично оставил... Для внятности и наглядности..

etc
19.04.2007, 00:35
Так что все правильно он там убирает, раз так ему нравиццо.
Неправильно убирает.

wvxvw
19.04.2007, 02:26
По-идее, если объект - это массив, то итератор может и не быть стрингом. Так что не знаю, что уж тут правельнее. Вряд ли это баг, очень уж как-то не похоже, это все-тки, скорее специально сделано.

Смысл не в этом =) Модераторы, не ссорьтесь =) И вообще, бывают случаи, когда проще сделать без типизации, и вообще, зачем себя ограничивать какими-то придуманными рамками: существует возможность - так почему бы ее не использовать?

iNils
19.04.2007, 02:45
По-идее, если объект - это массив, то итератор может и не быть стрингом. Так что не знаю, что уж тут правельнее. Вряд ли это баг, очень уж как-то не похоже, это все-тки, скорее специально сделано.Из хелпа
for (variableIterant in object) {
statement(s);
}
...
variableIterant:String - The name of a variable to act as the iterant, referencing each property of an object or element in an array.

motor4ik
19.04.2007, 10:49
на самом деле я AS1 не застал, вернее очень мало застал, а в AS2 я сразу писал с типизацией, так что это даже больше привычка моя так писать, в любом случае, сразу видишь что функция ничего не возвращает, или возвращает число или булево значение, ну это просто очень даже удобно работать с кодом

etc
19.04.2007, 11:15
на самом деле я AS1 не застал, вернее очень мало застал, а в AS2 я сразу писал с типизацией, так что это даже больше привычка моя так писать, в любом случае, сразу видишь что функция ничего не возвращает, или возвращает число или булево значение, ну это просто очень даже удобно работать с кодом
Ну я же говорю, либо все типизировать, либо ничего, а не ободрано, где-то есть, а где-то нет. Некрасиво это.

wvxvw
19.04.2007, 12:18
Ну, ок, хорошо, другой вариант:
function someFunc(obj):String {
if(typeOf(obj) == "string") {return "Yes mylord!";} else { return "No mylord!";}
} Можно сделать все то же самое и с типизацией, но так _проще_. И, по моему скромному мнению, чем проще, тем лучше.

2iNils: Я боюсь, что точка зрения того, кто писал мануал именно по этому вопросу не совпадала с точкой зрения того, кто делал автокомплит =)

etc
19.04.2007, 12:35
И, по моему скромному мнению, чем проще, тем лучше.
Понятнее ли — сомнительно.

0xFFFFFF
19.04.2007, 12:41
писать в одну строку тоже просто. и не комментировать код - проще некуда. только разбираться потом будет долго и неприятно. дальновиднее надо быть.

iNils
19.04.2007, 13:46
писать в одну строку тоже просто. и не комментировать код - проще некуда. только разбираться потом будет долго и неприятно. дальновиднее надо быть.Даешь весь код внутри __bytecode__()!!!

2 wvxvw: typeOf != typeof

Kikasso
19.04.2007, 14:26
Можно я словечко про типизацию вставлю?
function f1():Void{}; // нормально
someObj.f1 = function():Void{} // ЕГГОГ

upd: нет еррора. Сидиотничал. можно удалять (( И мне стыдно.
Я перепутал с
someObj.f1:String = "";
Вот тут точно ошибка.

etc
19.04.2007, 14:36
Не вижу ошибок.

iNils
19.04.2007, 14:37
У меня нет еррора.

etc
19.04.2007, 14:52
ЕГГОГа тоже нет.

iNils
19.04.2007, 15:04
Я перепутал с
someObj.f1:String = "";
Вот тут точно ошибка.Конечно ошибка, только не компилятора, а твоя :) Вспомни для чего можно указывать типизацию.

wvxvw
19.04.2007, 15:07
Это уже какой-то дикий флейм начался с вовлечением всего модераторского состава онлайн :D

iNils, сорь, опечатался, конечно typeof.

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

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

Простите за многобуков, и вообще, пора закрывать этут тему, а то полемика ушла в совсем не то русло.

etc
19.04.2007, 15:40
Знаешь, тут возникает просто ситуация, либо у тебя есть время и ты делаешь правильно, либо нет и лишь бы работало.

wvxvw
19.04.2007, 15:51
__etc:
нет, это не только вопрос времени, хотя это тоже важно. Я, например предпочту получить те же деньги и сходить на море, вместо того, чтобы писать _лишнее_ =) Но (!), немаловажный момент, избыточные структуры, приведущие к написанию комментариев сделают код более громоздким и хуже понимаемым. А это уже займет не только мое время (ну ладно, не пойду один раз на пляж, переживу как-нибудь), но еще и другой человек, который будет читать мою писанину потратит лишнее время, а как знать, а вдруг у него дома семья и дети не кормлены? %) И я вообще чуть ли не преступником окажусь :D

etc
19.04.2007, 16:00
Как раз таки типизируя и комментируя, ты облегчаешь дальнейший разбор своего кода через пару лет, например.

0xFFFFFF
19.04.2007, 16:12
да ладно через пару лет.. а когда ас1 код становится непонятным уже через неделю - вот начинается веселье. надо доделать, а не понятно даже как оно работает.

wvxvw
19.04.2007, 16:12
а я думаю, что писать коментарий к функции в 2-3 строчки — лишнее, и ни в коем случае не облегчает, а наоборот, затрудняет понимание. Извини, но я останусь при своем мнении =) И, все, пора с этим на сегодня заканчивать.

0xFFFFFF
19.04.2007, 16:14
зря. комментарий к функции в 2-3 строчки тоже может очень помочь.
не придется думать и читать чего это там код делает, а можно просто описание прочитать.

wvxvw
19.04.2007, 16:22
ну, ок, давайте жизненный пример, и все!!! на сегодня, точно =)
/********** The Short User Guide to Function __theFunction *******/
// This function was intended to bring the brightest example
// of how the functions are not to be commented. DO NOT EVER-DISEVER
// try to comment tham the way I did!!!
// For the people might want to sue you and, probably sentence you
// to be exequted trough being hung with you seventh left rib on the hook
// mounted on the seventyeighth floor of Chicago's Empire State Building!
// And you know what!? They might, probably be right!
//
// FUNCTION NAME: '__theFunction'
// RETURNED VALUE TYPE: 'String'
// NUMBER OF ACCEPTED ARGUMENTS: 1
// ARGUMENTS TYPE IN RESPECTIVE ORDER: 'String'
function __theFunction(_str:String):String{
var r_str:String = "";
_str == "yes" ? r_str = "Yes, Mylord!" : r_str = "No, Mylord!";
return r_str;
} // END of the FUNCTION

etc
19.04.2007, 17:07
Смотреть код надо не в блокноте, а в нормальном редакторе кода, где, если что, можно свернуть комменты.

wvxvw
19.04.2007, 17:12
Нет, ну вы хотите чтобы я написал The Complet, Friendly and COMPREHENSIVE User Guide to Function __theFunction? :D
А если у человека нету продвинутого редактора в котором можно свернуть комменты?

0xFFFFFF
19.04.2007, 17:30
ну собственно от тебя никто ничего не хочет.
а если у человека нет продвинутого редактора, то это, видимо, его проблемы.

Kikasso
19.04.2007, 17:31
Можно было функцию и покороче написать..
function __theFunction(_str:String):String{
return _str == "yes" ? "Yes, Mylord!" : "No, Mylord!";
}

etc
19.04.2007, 17:32
Не видимо, а точно его проблемы.
Я сам никогда не пишу комменты к своему коду, если только не показываю его людям. Т.е., для себя пишите как хотите, а для публики писать кривой код, имхо, неудобно.

wvxvw
19.04.2007, 17:47
Еще раз, я не думаю, что типизация _всегда_ необходима. Без нее иногда гораздо проще и понятнее. Кроме того, это существующая документированая возможность. И не вижу никаких причин ею не пользоваться. И я не говорю о коде для себя, а о коде, как продукте за который в итоге кто-то заплатит. И если кто-то предложит вариант с типизацией понятнее и короче чем пример, который я приводил выше, я скажу, что ошибся.
function __func(obj):String {
return typeof(obj)=="string"?"yes":"no";
}

etc
19.04.2007, 17:55
function __func(obj:Object):String {
return typeof(obj)=="string"?"yes":"no";
}
Либо везде, либо нигде.

wvxvw
19.04.2007, 18:00
Ну вот, возникает путаница, во-первых, человеку не понятно почему нужно давать тип Object аргументу, который таковым не является (а является его наследником). А во-вторых, если мы будем следовать духу этой функции, то вызывая ее должны будем привести аргумент к требуемому типу, что, естесственно, приведет к тому, что функция будет выполнять совсем не то, для чего она задумывалась.
Так что, увы, _ничего_ хорошего в данном случае типизация не добавила.

0xFFFFFF
19.04.2007, 18:02
wvxvw, мне кажется, или вы действительно плохо знакомы с типизацией как таковой?

etc
19.04.2007, 18:05
wvxvw, все наследуется от Object и если четко тип переменной не определяется, нужно указывать тип Object, т.е. тип супер-класса. Если вам что-то здесь непонятно, то это ваши проблемы. Остальные поймут правильно.

motor4ik
19.04.2007, 18:07
вот блин, надож было мне этот Void впихнуть, такую тему растянули, а вообще комментарии это просто хороший тон, запомните маленькие методы бывают только в школе или в институте, при серьезном проекте , метод как минимум делает что-то серьезное, и есть еще коллеги и продолжатели которые будут работать с этим кодом и им проще посмотреть на стандартизированые коменты (подчеркиваю стандартизированые) а не то что написал wvxvw и узнать что функция возвращает какие параметры в нее передавать итд! Да даже если вы один работаете в своем коде проще разобраться через месяц с комментами нежели без, ээто сейчас вы знаете что за переменная Х и для чего она нужна а через месяц забудете

wvxvw
19.04.2007, 18:57
Белая: вам кажется.

__etc: да нет же. Ну если хотите, можете продолжать упрямствовать. Вот, более наглядный пример: едите вы по междугородней трассе, пробили колесо. Случайно, на противоположной стороне оказался гараж, но нету пешеходного перехода. Близжайший пешеходный переход на расстоянии 20-30 км. А правила дорожного движения запрещают переходить дорогу там, где нет перехода. Ну так вы пойдете до зебры и обратно?

motor4ik:
Все хорошо в меру. И, если хотите, могу показать не придуманные случаи, когда комменты были только вредными. И, как человек давно работающий в области могу с уверенностью сказать, что не всегда функции даже в очень больших проектах длинные.
Вот, недавно принесли такую вот радость, надо было переделать:
// main vars
contactMail = "mailto:contact@*************.com";
moveOn = 0; //a Flag(1 or 0) var thet tell the body parts(main menu) when to "fade" out
bodySelect = "home"; //a var thet tells the body parts(main menu) witch parts will start the "fade" in next
bodyCenter = 0; //a Flag(1 or 0) var thet torns to 1 when current body part(main menu) as finished "fade" in
// special pieces vars
catBackNum = 1; //a var thet tells the current color for the stripe behind the special pieces (sub menu)
catBitNum = 1; //a var thet tells witch special pieces(sub menu) is loaded next
catBitFlag = 0; //a Flag(1 or 0) var thet torns to 1 when current special pieces(sub menu) part has finished loading
// technology vars
techCorent = "techmenu"; //a var thet tells the technology(sub menu) witch frame comes next
techMove = 0; //a Flag(1 or 0) var thet tell the technology(sub menu) when to "fade" out
techFlag = 0; //a Flag(1 or 0) var thet turns to 1 when the technology(sub menu) "fade" in has finished
// jewellery vars
jewlOverFlag = "alpesHome";
jewlStopFlag = "";
// about vars
textSpeed = 3;
aboutFlag = 0;
и дальше все в том же духе Мало того, что с ошибками, так еще и понять вообще чего хотел автор у меня заняло почти целый день. И это большой проект серьезной фирмы занимающейся ювелирными украшениями.

screamge
19.04.2007, 19:12
))Это чтоза индус писал?))
Ну этот пример говорит лишь о том что некоторые не умеет дулать комменты...вот и всё.
В умных книжках написанно что типизация рулит, я склонен верить..ибо причин не верить у меня нет.

etc
19.04.2007, 19:25
wvxvw, комментарии надо писать не для полных идиотов же. Краткий комментарий из пары-тройки слов. Не надо переходить в крайности.
Не надо полагать, что программист, читающий код — идиот, комментарии нужно писать к тем вещам, где могут возникнуть неясности. И к типизации это не имеет отношения. Типизация либо есть, либо нет. Boolean. Кусками её быть не должно и все тут.

motor4ik
19.04.2007, 19:36
закрывайте уже бред какой то пошел

etc
19.04.2007, 19:39
Видимо да.
Закрыто. Тем не менее, советую wxvxw переосмыслить свои взгляды.