Помощь · Поиск · Пользователи · Календарь
Полная версия этой страницы: Как сделать короче?
Flash Zone Forum > Macromedia Flash > Начинающим
Makcimm
Код
package
{
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    
    public class zona extends MovieClip
    {
        public function zona()
        {
            z1.addEventListener(MouseEvent.MOUSE_OVER, prozrach1);
            z2.addEventListener(MouseEvent.MOUSE_OVER, prozrach2);
        }
        private function prozrach1(evt:MouseEvent):void
        {    
            z1.alpha=1;
        }
        private function prozrach2(evt:MouseEvent):void
        {
            z2.alpha=1;
        }
    }
}

Я для каждого мувика вызываю свою функцию.
А как в одной функции написать например alpha=1 и чтобы она вызывалась для разных мувиков.
chingachgoog
Код
package
{
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    
    public class zona extends MovieClip
    {
        public function zona()
        {
            this.addEventListener(MouseEvent.MOUSE_OVER, prozrach)
        }
        private function prozrach(evt:MouseEvent):void
        {    
            z1.alpha=1;
            z2.alpha=1;
        }
    }
}
Makcimm
Может я вопрос непонятно задал...(
Можно ли написать как то в функции alpha=1
И чтобы при наведении на клип z1 эта функция вызывалась только для z1
а при наведении на z2 только для z2
Цитата
public function zona()
{
this.addEventListener(MouseEvent.MOUSE_OVER, prozrach)
}
private function prozrach(evt:MouseEvent):void
{
z1.alpha=1;
z2.alpha=1;
}

а здесь при наведении на любой клип, alpha=1 становиться сразу для обоих клипов, а не только для того на котором мышка.
chingachgoog
Код
public function zona()
{
this.addEventListener(MouseEvent.MOUSE_OVER, prozrach)
}
private function prozrach(evt:MouseEvent):void
{
evt.target.alpha=1;
}
Makcimm
Супер  smile.gif
Именно это и надо было.
chingachgoog
Event
dimaho
 а такой код как правильно и коротко написать в AS2 ?
CODE
var t = 0;
_root.onEnterFrame = function() {

if (t>=10) {
_root.звезда1.play();
_root.звезда3.play();
_root.звезда5.play();
_root.звезда7.play();
_root.звезда9.play();
_root.звезда11.play();
_root.звезда1._alpha = 10;
_root.звезда3._alpha = 10;
_root.звезда5._alpha = 10;
_root.звезда7._alpha = 10;
_root.звезда9._alpha = 10;
_root.звезда11._alpha = 10;
_root.звезда2.stop();
_root.звезда4.stop();
_root.звезда6.stop();
_root.звезда8.stop();
_root.звезда10.stop();
_root.звезда12.stop();
_root.звезда2._alpha = 90;
_root.звезда4._alpha = 90;
_root.звезда6._alpha = 90;
_root.звезда8._alpha = 90;
_root.звезда10._alpha = 90;
_root.звезда12._alpha = 90;
}
if (t>=20) {
_root.звезда2.play();
_root.звезда4.play();
_root.звезда6.play();
_root.звезда8.play();
_root.звезда10.play();
_root.звезда12.play();
_root.звезда2._alpha = 10;
_root.звезда4._alpha = 10;
_root.звезда6._alpha = 10;
_root.звезда8._alpha = 10;
_root.звезда10._alpha = 10;
_root.звезда12._alpha = 10;
_root.звезда1.stop();
_root.звезда3.stop();
_root.звезда5.stop();
_root.звезда7.stop();
_root.звезда9.stop();
_root.звезда11.stop();
_root.звезда1._alpha = 90;
_root.звезда3._alpha = 90;
_root.звезда5._alpha = 90;
_root.звезда7._alpha = 90;
_root.звезда9._alpha = 90;
_root.звезда11._alpha = 90;
}
t += 1;
if (t>=30) {
t = 0;
}
};

Помогите. Это только часть. sad.gif
MustLive
Цитата
а такой код как правильно и коротко написать в AS2 ?

dimaho

Этот код будет работать. Тебя смущаем его длина (тем более, что многократно приходится обращаться к группам объектов) - тогда используй циклы. Обращайся к объектам в цикле for (в итоге у тебя будет два цикла для объектов с чётными и нечётными номерами).

О том как это сделать мы уже не раз писали на форуме, так что поиск поможет. Вкратце напомню - синтаксис будет следующим: _root["звезда"+i].play() (точно также для любых методов и свойств объектов).
dimaho
Цитата(MustLive @ 3.09.2011 - 01:33) *
Этот код будет работать. Тебя смущаем его длина (тем более, что многократно приходится обращаться к группам объектов) - тогда используй циклы. Обращайся к объектам в цикле for (в итоге у тебя будет два цикла для объектов с чётными и нечётными номерами).

О том как это сделать мы уже не раз писали на форуме, так что поиск поможет. Вкратце напомню - синтаксис будет следующим: _root["звезда"+i].play() (точно также для любых методов и свойств объектов).

Спасибо за подсказку. А с помощъю Массивов это сделать нельзя? В дальнейшем хочу обращаться к разным группам клипов 'Звезда' кликая на определённые клипы (счётчик t уберу). smile.gif Если писать так как я писал - очень много строк получается!
MustLive
Пожалуйста, dimaho. Разберись с данным синтаксисом (с использованием оператора []).

Цитата
А с помощъю Массивов это сделать нельзя?

В данном случае используется метод подобный массивам. Поэтому в массивах как таковым нет надобности, ты создаёшь множество объектов с практически одинаковым именем - они отличаются лишь индексом. И используешь специальный синтаксис (с оператором []) для обращения к этим объектам.

Что позволяет в цикле работать с большими группами объектов, подобно тому как работают с массивами в цикле. Т.е. здесь используется аналогичный подход. И в итоге без использования массивов, но используя обращение к объектам "как к массиву" (хэшевый метод), ты создаёшь компактный код (посмотри приведённые примеры кода).
dimaho
Цитата(MustLive @ 4.09.2011 - 01:34) *
Пожалуйста, dimaho. Разберись с данным синтаксисом (с использованием оператора []).

Спасибо большое, MustLive. Уже изучаю. smile.gif Думаю, всё получится.
dimaho
 ещё раз спасибо, получилось примерно так:
CODE
var t = 0;
var i;
_root.onEnterFrame = function() {
if (t>=1) {
for (i=1; i<=13; i++) {
_root["звезда"+i].stop();
_root["звезда"+i]._alpha = 20;
}
for (i=1; i<=12; i++) {
_root["звызда"+i].play();
_root["звызда"+i]._alpha = 90;
}
}
if (t>=10) {
for (i=1; i<=13; i++) {
_root["звезда"+i].play();
_root["звезда"+i]._alpha = 90;
}
for (i=1; i<=12; i++) {
_root["звызда"+i].stop();
_root["звызда"+i]._alpha = 20;
}
}
t += 1;
if (t>=20) {
t = 0;
}
};]

А вот такой код как сделать короче? Подскажите пожалуйста.
CODE
var t = 0;
звезда1._alpha = 15;
звезда2._alpha = 15;
звезда3._alpha = 15;
звезда4._alpha = 15;
звезда5._alpha = 15;
звезда6._alpha = 15;
звезда7._alpha = 15;
звезда8._alpha = 15;
звезда9._alpha = 15;
звезда10._alpha = 15;
звезда11._alpha = 15;
звезда12._alpha = 15;
звезда13._alpha = 15;
звезда14._alpha = 15;
звезда15._alpha = 15;
звезда16._alpha = 15;
звезда17._alpha = 15;
звезда18._alpha = 15;
звезда19._alpha = 15;
звезда20._alpha = 15;
звезда21._alpha = 15;
звезда22._alpha = 15;
звезда23._alpha = 15;
звезда24._alpha = 15;
звезда25._alpha = 15;
_root.onEnterFrame = function() {
/* 1 */
if (t>=1) {
_root.звезда1.play();
_root.звезда1._alpha = 90;
}
if (t>=255) {
_root.звезда1.stop();
_root.звезда1._alpha = 20;
}
/* 2 */
if (t>=10) {
_root.звезда2.play();
_root.звезда2._alpha = 90;
}
if (t>=260) {
_root.звезда2.stop();
_root.звезда2._alpha = 20;
}
/* 3 */
if (t>=20) {
_root.звезда3.play();
_root.звезда3._alpha = 90;
}
if (t>=265) {
_root.звезда3.stop();
_root.звезда3._alpha = 20;
}
/* 4 */
if (t>=30) {
_root.звезда4.play();
_root.звезда4._alpha = 90;
}
if (t>=270) {
_root.звезда4.stop();
_root.звезда4._alpha = 20;
}
/* 5 */
if (t>=40) {
_root.звезда5.play();
_root.звезда5._alpha = 90;
}
if (t>=275) {
_root.звезда5.stop();
_root.звезда5._alpha = 20;
}
/* 6 */
if (t>=50) {
_root.звезда6.play();
_root.звезда6._alpha = 90;
}
if (t>=280) {
_root.звезда6.stop();
_root.звезда6._alpha = 20;
}
/* 7 */
if (t>=60) {
_root.звезда7.play();
_root.звезда7._alpha = 90;
}
if (t>=285) {
_root.звезда7.stop();
_root.звезда7._alpha = 20;
}
/* 8 */
if (t>=70) {
_root.звезда8.play();
_root.звезда8._alpha = 90;
}
if (t>=290) {
_root.звезда8.stop();
_root.звезда8._alpha = 20;
}
/* 9 */
if (t>=80) {
_root.звезда9.play();
_root.звезда9._alpha = 90;
}
if (t>=295) {
_root.звезда9.stop();
_root.звезда9._alpha = 20;
}
/* 10 */
if (t>=90) {
_root.звезда10.play();
_root.звезда10._alpha = 90;
}
if (t>=300) {
_root.звезда10.stop();
_root.звезда10._alpha = 20;
}
/* 11 */
if (t>=100) {
_root.звезда11.play();
_root.звезда11._alpha = 90;
}
if (t>=305) {
_root.звезда11.stop();
_root.звезда11._alpha = 20;
}
/* 12 */
if (t>=110) {
_root.звезда12.play();
_root.звезда12._alpha = 90;
}
if (t>=310) {
_root.звезда12.stop();
_root.звезда12._alpha = 20;
}
/* 13 */
if (t>=120) {
_root.звезда13.play();
_root.звезда13._alpha = 90;
}
if (t>=315) {
_root.звезда13.stop();
_root.звезда13._alpha = 20;
}
/* 14 */
if (t>=130) {
_root.звезда14.play();
_root.звезда14._alpha = 90;
}
if (t>=320) {
_root.звезда14.stop();
_root.звезда14._alpha = 20;
}
/* 15 */
if (t>=140) {
_root.звезда15.play();
_root.звезда15._alpha = 90;
}
if (t>=325) {
_root.звезда15.stop();
_root.звезда15._alpha = 20;
}
/* 16 */
if (t>=150) {
_root.звезда16.play();
_root.звезда16._alpha = 90;
}
if (t>=330) {
_root.звезда16.stop();
_root.звезда16._alpha = 20;
}
/* 17 */
if (t>=160) {
_root.звезда17.play();
_root.звезда17._alpha = 90;
}
if (t>=335) {
_root.звезда17.stop();
_root.звезда17._alpha = 20;
}
/* 18 */
if (t>=170) {
_root.звезда18.play();
_root.звезда18._alpha = 90;
}
if (t>=340) {
_root.звезда18.stop();
_root.звезда18._alpha = 20;
}
/* 19 */
if (t>=180) {
_root.звезда19.play();
_root.звезда19._alpha = 90;
}
if (t>=345) {
_root.звезда19.stop();
_root.звезда19._alpha = 20;
}
/* 20 */
if (t>=190) {
_root.звезда20.play();
_root.звезда20._alpha = 90;
}
if (t>=350) {
_root.звезда20.stop();
_root.звезда20._alpha = 20;
}
/* 21 */
if (t>=200) {
_root.звезда21.play();
_root.звезда21._alpha = 90;
}
if (t>=355) {
_root.звезда21.stop();
_root.звезда21._alpha = 20;
}
/* 22 */
if (t>=210) {
_root.звезда22.play();
_root.звезда22._alpha = 90;
}
if (t>=360) {
_root.звезда22.stop();
_root.звезда22._alpha = 20;
}
/* 23 */
if (t>=220) {
_root.звезда23.play();
_root.звезда23._alpha = 90;
}
if (t>=365) {
_root.звезда23.stop();
_root.звезда23._alpha = 20;
}
/* 24 */
if (t>=230) {
_root.звезда24.play();
_root.звезда24._alpha = 90;
}
if (t>=370) {
_root.звезда24.stop();
_root.звезда24._alpha = 20;
}
/* 25 */
if (t>=240) {
_root.звезда25.play();
_root.звезда25._alpha = 90;
}
if (t>=375) {
_root.звезда25.stop();
_root.звезда25._alpha = 20;
}
t += 1;
if (t>=380) {
t = 0;
}
};

sad.gif
MustLive
Всегда пожалуйста, dimaho.

Молодец, что разобрался с этим кодом и изучил упомянутый мною метод. Только ты не совсем верно записал код - у тебя ведь не подряд идут мувиклипы (при t>=10 и при t>=20 - которые у тебя стали "t>=1" и "t>=10"), а через раз. Вот тебе правильный сокращённый код согласно приведённому тобою коду (это для t>=1, а для t>=10 сделай аналогично).
Код
if (t>=1) {
    for (i=1; i<=11; i+=2) {
        _root["звезда"+i].stop();
        _root["звезда"+i]._alpha = 20;
    }
    for (i=2; i<=12; i+=2) {
        _root["звызда"+i].play();
        _root["звызда"+i]._alpha = 90;
    }
}

Замечу, что блоки условного оператора у тебя поставлены в неверном порядке (что в длинном, что в коротком коде). Т.к. условия t>=1 стоит первым, то оно срабатывает всегда, на каждом показе кадра, а второе условие уже срабатывает лишь когда t>=10 (т.е. первое условие и код в блоке if делают лишнюю работу). Поэтому тебе нужно или поменять их местами, или переделать условные операторы, чтобы каждый блок кода срабатывал лишь в нужное время.

Цитата
А вот такой код как сделать короче?

Здесь воспользуйся тем же хэшевым методом. Первые 26 строк ты замени на следующие строки (а как другую часть кода укоротить, то это уже тебе домашнее задание):
Код
var t = 0;
for (i=1;i<=25;i++) {
    _root["звезда"+i]._alpha = 15;
}
dimaho
Цитата(MustLive @ 7.09.2011 - 01:19) *
Всегда пожалуйста, dimaho.

Молодец, что разобрался с этим кодом и изучил упомянутый мною метод. Только ты не совсем верно записал код - у тебя ведь не подряд идут мувиклипы (при t>=10 и при t>=20 - которые у тебя стали "t>=1" и "t>=10"), а через раз.

Не так. Мувики разделены на две группы - через один ( звЕзда - чётные, и звЫзда - нечётные ), но твой пример мне нравится больше, так как он грамотнее. Код уже изменён  smile.gif .

Цитата(MustLive @ 7.09.2011 - 01:19) *
..... (а как другую часть кода укоротить, то это уже тебе домашнее задание):

А подскажи, MustLive, пожалуйста, про вторую часть, которую надо сделать короче. sad.gif
MustLive
Цитата
Код уже изменён smile.gif.

Молодец, используй только грамотные подходы wink.gif. Таким образом код будет оптимизированным (для более быстрого исполнения) и более читабельным.

dimaho, я тебе уже объяснил для первого примера кода как оптимизировать, а также показал на примере второго кода (оптимизировав его часть) как это нужно делать. За тебя твою работу делать никто не будет smile.gif - или сам оптимизируй свой код, или изначально пиши его грамотно, тогда не придётся заниматься оптимизацией. Если ты видишь, что ты никак не можешь циклами код укоротить, значит полностью переписывай алгоритм (чтобы он изначально был лаконичным). Или же оставляй как есть, если тебя это устраивает.
dimaho
 что то типа этого (всё равно подсказали, а не сам додумался) huh.gif
CODE
var t = 0;
var i;
for (i=1; i<=25; i++) {
_root["звезда"+i]._alpha = 15;
}
_root.onEnterFrame = function(упс) {
for (var i = 1; i<=25; i++) {
if (t>=1) {
_root['звезда'+i].stop();
_root['звезда'+i]._alpha = 20;
}
if (t>=5+(i*4)) {
_root['звезда'+i].play();
_root['звезда'+i]._alpha = 90;
}
if (t>=180-(i*2)) {
_root['звезда'+i].stop();
_root['звезда'+i]._alpha = 20;
}
}
t += 1;
if (t>=180) {
t = 0;
}
};

А теперь, вот, хотелось бы кажатием какой либо кнопки остановить всю функцию, и запустиь другую... Тут, понятно, за меня не кто не чего делать не будет, но хоть подскажите, где почитать можно, или пример кода  huh.gif
MustLive
Цитата
всё равно подсказали, а не сам додумался

Работай над собой, изучай AS и скоро сам сможешь додумываться до большинства вещей при программировании на AS.

Цитата
_root.onEnterFrame = function(упс) {

Что за "упс", убери его из кода, оставь там лишь пустые скобки.

Цитата
if (t>=1) {

Опять неверная с точки зрения производительности последовательность условных операторов. Ещё раз прочти то, о чём я писал ранее.

Цитата
А теперь, вот, хотелось бы кажатием какой либо кнопки остановить всю функцию, и запустиь другую

Касательно функции, я так понимаю ты имеешь в виду вышеупомянутую анонимную функцию установленную на onEnterFrame. Ибо если ты вообще о какой-либо функции (с именем), то можешь в коде вызывать её по имени. Укажи функцию function Zvezda() (с нужным кодом) и потом в обработчике нажатия на кнопку вызывай её Zvezda().

Чтобы решить данную задачу тебе нужно на кнопку установить обработчик нажатия (весь форум усыпан примерами кода обработчиков нажатия), а также удалить (или переопределить) функцию на onEnterFrame, что тоже уже рассматривалось. Поэтому, если ты не знаешь как сделать что-то из вышесказанного, то почитай примеры на форуме.

Подсказка: можешь использовать обработчик как onPress, так и onRelease - оба тебе подойдут smile.gif. Сделай нужные кпопки, присвой им имена в панели свойств (btn1 и т.д.) и указывай в кадре обработчики:
Код
_root.bnt1.onRelease = function() {
// код срабатывающий при нажатии на кнопку bnt1
}
dimaho
Спасибо, MustLive. Вот так получилось  smile.gif .
CODE
var t = 0;
var i;
for (i=1; i<=25; i++) {
_root["звезда"+i]._alpha = 10;
}
_root.fon._alpha = 80;
_root.звезда13.onRelease = function() {
_root.onEnterFrame = function() {
for (var i = 1; i<=25; i++) {
if (t<=180) {
_root['звезда'+i].stop();
_root['звезда'+i]._alpha = 10;
}
if (t>=5+(i*4)) {
_root['звезда'+i].play();
_root['звезда'+i]._alpha = 90;
}
if (t>=180-(i*2)) {
_root['звезда'+i].stop();
_root['звезда'+i]._alpha = 10;
}
}
t += 1;
if (t>=180) {
t = 0;
}
};
};
_root.звезда3.onRelease = function() {
_root.onEnterFrame = function() {
for (var i = 1; i<=25; i++) {
_root['звезда'+i].stop();
_root['звезда'+i]._alpha = 10;
}
};но
};

В общем этого и добивался... Теперь вот тут разобраться не могу  sad.gif . Или всё правильно? Работает, но сдаётся мне, написано как то кривовато  huh.gif
CODE
_root.звезда13.onRelease = function() {
_root.onEnterFrame = function() {
for (var i = 1; i<=25; i++) {
_root['звезда'+i].stop();
_root['звезда'+i]._alpha = 10;
}
for (var i = 11; i<=15; i += 1) {
_root['звезда'+i].play();
_root['звезда'+i]._alpha = 90;
}
for (var i = 3; i<=25; i += 5) {
_root['звезда'+i].play();
_root['звезда'+i]._alpha = 90;
}
};
};
dimaho
MustLive писал:
Цитата(MustLive @ 16.09.2011 - 23:29) *
Касательно функции, я так понимаю ты имеешь в виду вышеупомянутую анонимную функцию установленную на onEnterFrame. Ибо если ты вообще о какой-либо функции (с именем), то можешь в коде вызывать её по имени. Укажи функцию function Zvezda() (с нужным кодом) и потом в обработчике нажатия на кнопку вызывай её Zvezda().

Как назвать функцию именем и как её потом вызывать? Каков синтаксис написания кода? MustLive, подскажи пример, пожалуйста.
Lissabon
 помогите оптимизировать:

if (t>=156) {
_root.tekst3.textColor = 0xFB786A;
}
if (t>=157) {
_root.tekst3.textColor = 0xFA4330;
}
if (t>=158) {
_root.tekst3.textColor = 0xCF1A05;
}
if (t>=159) {
_root.tekst3.textColor = 0x8D1103;
}
Русская версия IP.Board © 2001-2017 IPS, Inc.