Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   duplicate function defeniton (http://www.flasher.ru/forum/showthread.php?t=177449)

rustu 01.04.2012 13:01

duplicate function defeniton
 
у меня такой вопрос, если я вставляю вот такой код в один фрейм

Код AS3:

 stop();
    var b1:Timer = new Timer(30000, 1);
    b1.start();
    b1.addEventListener(TimerEvent.TIMER_COMPLETE, function(e:TimerEvent){
        play();
    });
 
var timer:Timer = new Timer(1000, 30);
 
// добавляем это ////////////////////////////////////////////////
timer.addEventListener(TimerEvent.TIMER, onTimer);
function onTimer(event:TimerEvent):void
{
        myTextField.text = getBeautifulCount();
}
/////////////////////////////////////////////////////////////////
 
function getCount():uint
{
        return 30 - timer.currentCount;
}
 
function getBeautifulCount():String
{
        var count:int = getCount();
        var m:String = String("0" + int(count / 60)).substr(-2, 2);
        var s:String = String("0" + (count % 60)).substr(-2, 2);
        return m + ":" + s;
}
 
timer.start()

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

RhPlus 01.04.2012 15:35

можно исходник?

-De- 01.04.2012 15:41

А нормально писать например, язык подучить, посмотреть как люди делают, не пробовали?

in4core 01.04.2012 16:00

пихи все в класс, и создавай новый инстанс класса на любом из кадров, раз уж такая тяга к кадрам )

RhPlus 01.04.2012 16:09

если очень хотите и кадры идут подряд - "растяните" ([SHIFT-LMB]) свой код на такое количество кадров, в котором он нужен. Ну и классы рулят, это да.

rustu 01.04.2012 16:20

я понимаю что это все не хорошо, но мне надо всего то маленькую модель для диплома и учить весь as3 и flash для этого не логично) а как растянуть код? шифт и левая кнопка мыши не тянут код что то, просто кейфрейм перемещают

in4core 01.04.2012 16:28

Зря вы так, диплом дипломом - а флеш это не плохой заработок

rustu 01.04.2012 16:33

я не говорю что флэш плохо, но пока мне надо сделать диплом, а то в армии будет у меня заработок=)))
это более приоритетно так сказать для меня, чем изучение флзш в настоящий момент

-De- 01.04.2012 16:33

Тут не весь надо, тут ближе к "что-нибудь".

wvxvw 01.04.2012 17:03

Кроме всего прочего:
Код AS3:

String("0" + int(count / 60)).substr(-2, 2);

эквиваленто:
Код AS3:

("0" + int(count / 60)).substr(-2, 2);

но не делает одной ненужной конвертации, т.как + использованый со строкой и другим параметром вернет строку.

fish_r 02.04.2012 01:41

Вложений: 1
Чтобы таки сделать то, что хотите можно поступить так: Создайте в библиотеке символ (MovieClip) добавьте туда свое текстовое поле, и в первый кадр ваш код ( с небольшими дополнениями ) :

Код AS3:

import flash.utils.Timer;
import flash.display.MovieClip;
 
 
MovieClip( this.parent ).stop();
    var b1:Timer = new Timer(30000, 1);
    b1.start();
    b1.addEventListener(TimerEvent.TIMER_COMPLETE, function(e:TimerEvent){
        MovieClip( this.parent ).play();
    });
 
var timer:Timer = new Timer(1000, 30);
 
// добавляем это ////////////////////////////////////////////////
timer.addEventListener(TimerEvent.TIMER, onTimer);
function onTimer(event:TimerEvent):void
{
 
        myTextField.text = getBeautifulCount();
}
/////////////////////////////////////////////////////////////////
 
function getCount():uint
{
        return 30 - timer.currentCount;
}
 
function getBeautifulCount():String
{
        var count:int = getCount();
        var m:String = String("0" + int(count / 60)).substr(-2, 2);
        var s:String = String("0" + (count % 60)).substr(-2, 2);
        return m + ":" + s;
}
 
timer.start()

В каждом новом кадре бросайте этот символ на сцену. Тогда получится именно так как вы хотите.

ЗЫ Решение конечно ужасное :), но вас извиняют причины по которым вы это делаете :)

В аттаче пример такой реализации.

rustu 02.04.2012 11:25

Спасибо!=)

fish_r 02.04.2012 13:35

Цитата:

Сообщение от wvxvw (Сообщение 1072393)
Кроме всего прочего:
Код AS3:

String("0" + int(count / 60)).substr(-2, 2);

эквиваленто:
Код AS3:

("0" + int(count / 60)).substr(-2, 2);

но не делает одной ненужной конвертации, т.как + использованый со строкой и другим параметром вернет строку.

Потестил ради интереса: в среднем, в 6х1 000 000 итераций такая конвертация через String медленнее на 5 - 10 мсек на 1 000 000 итераций. Т.е. безусловно - первый способ медленнее, но имеет ли какое либо значение такая разница в реальных программах? К слову, обработка забытого оператора trace() вызывает замедление на 2 (!) порядка больше :)

PS Интересно стало потому, что сам почти всё кастую и конвертирую, для автокомплита и чтобы через полгодика, например, побыстрее разобраться.

wvxvw 02.04.2012 15:06

Даже если бы на наносекунду медленнее было - зачем делать лишнее?

fish_r 24.04.2012 12:01

Цитата:

Сообщение от wvxvw (Сообщение 1072550)
Даже если бы на наносекунду медленнее было - зачем делать лишнее?

Не ради спора, а просто... чуства ) - просидел сегодня часа два в боевом тупняке потому, что в одном из мест программа с невозмутимым спокойствием обращалась к елементу массива "3", вместо 3, причем в предыдущих компиляциях этой проблемы не было :(.

* извиняюсь за некро.


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

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