PDA

Просмотр полной версии : Изменение альфа канала в разных кадрах


Rot pfeffer
04.11.2006, 14:58
Привет всем, народ, подскажите как написать такую ситуацию:
на первом кадре ставлю 4ре мувика, нужно чтобы с 1 по 10й кадр альфа канал первого мувика увеличился с 0 до 100, с 10 по 20й кадр 2го мувика и тд...

BigDan
04.11.2006, 15:15
Используй Motion Tween, меньше проблем будет.

Rot pfeffer
04.11.2006, 15:26
нет, Motion Tween использовать не хочу, надо программно сделать

Wolsh
05.11.2006, 01:52
Ну дык запрашивай _currentframe и пиши поведение

Хемуль
05.11.2006, 02:56
Пример с рекурсией (LoL) и обьектом Tween...

import mx.transitions.Tween;
import mx.transitions.easing.*

var movieClipsDissolveSpeed:Number = 10;
var movieClipsBaseName:String = "mc";
var movieClipsNumber:Number = 4;
var movieClipsLeft:Number = 100;
var movieClipsTop:Number = 100;
var movieClipsInterval:Number = 20;

var currentMovieClipX:Number = movieClipsLeft;
for (var index:Number = 1; index <= movieClipsNumber; index++)
{
var newMovieClipName:String = movieClipsBaseName + index;
var newMovieClip:MovieClip = this.attachMovie(newMovieClipName, newMovieClipName, this.getNextHighestDepth(), {_x:currentMovieClipX, _y:movieClipsTop});
currentMovieClipX += newMovieClip._width + movieClipsInterval;
newMovieClip._alpha = 0;
}

createTweenForClip(1);

function createTweenForClip(clip:Number)
{
var clipToTweenName:String = movieClipsBaseName + clip;
var clipToTween:MovieClip = this[clipToTweenName];
var newTween:Tween = new Tween(clipToTween, "_alpha", None.easeNone, 0, 100, movieClipsDissolveSpeed, false);
if (clip < movieClipsNumber)
{
newTween.onMotionFinished = function()
{
createTweenForClip(clip + 1);
};
}
}

На сцену из библиотеки вставляется 4 мувиклипа и с ними уже работает скрипт.
Пример прикрепляю...

Kikasso
05.11.2006, 03:18
В руте clip0, clip1, clip2 и clip3

function alphaMaster(frameNumba){
var clipId = Math.floor(frameNumba/4);
var alphaVal = frameNumba % 10 * 10 + 10;
this["clip"+clipId]._alpha = alphaVal;
if(clipId == 3 && alphaVal == 100 ) _root.onEnterFrame = null;
}
_root.onEnterFrame = alphaMaster(_root._currentframe);

Вообще-то куррентфрейм нам тут не особо нужен, можно обойтись каким-нибудь i++, да и функцию вызывать не на ентерфрейм, а по интервалу. Принцип тот же.

Kikasso
05.11.2006, 03:27
В руте clip0, clip1, clip2, clip3 и все буквы ниже.

var i = 0, rate = 40;
clip0._alpha = clip1._alpha = clip2._alpha = clip3._alpha = 0;
function alphaMaster(){
clearInterval( alphaInt );
var clipId = Math.floor( i/4 );
var alphaVal = ( 1 + i%10 ) * 10;
_root["clip"+clipId]._alpha = alphaVal;
if( i++ < 39 ) alphaInt = setInterval(alphaMaster, rate);

}
//в нужный момент:
alphaMaster();
PS: Примерно так. Если пишешь под 8-ку, можно юзать setTimeout - строчка кода уберется.
PS2: Не проверял, мог напутать.

Rot pfeffer
05.11.2006, 12:55
Kikasso спасибо за ответ...
Хемуль, у вас всегда такие подробные ответы=)...большеваты немного конечно, помогите разобраться, если не сложно пояснения написать...
Что сдесь отвечает за появления мувика в определенных координатах, например мне надо, чтоб мувики по заданным координатам в разных местах появлялись

Rot pfeffer
05.11.2006, 19:55
разобрался что где и как появляется, обясните лучше вот эту чать кода
function createTweenForClip(clip:Number)
{
var clipToTweenName:String = movieClipsBaseName + clip;
var clipToTween:MovieClip = this[clipToTweenName];
var newTween:Tween = new Tween(clipToTween, "_alpha", None.easeNone, 0, 100, movieClipsDissolveSpeed, false);
if (clip < movieClipsNumber)
{
newTween.onMotionFinished = function()
{
createTweenForClip(clip + 1);
};
}

Rot pfeffer
05.11.2006, 20:17
и еще. попытался вместо мувиков использовать кнопки, но почему то они все слевом вверхнем углу создаются? какой метод отвечате за создание кнопок?

Хемуль
05.11.2006, 21:33
Да, чего-то инициализация обьектом не проходит для кнопок... Ну, можно всегда так переписать:

for (var index:Number = 1; index <= movieClipsNumber; index++)
{
var newMovieClipName:String = movieClipsBaseName + index;
var newMovieClip:MovieClip = this.attachMovie(newMovieClipName, newMovieClipName, this.getNextHighestDepth());
newMovieClip._x = currentMovieClipX;
newMovieClip._y = movieClipsTop;
currentMovieClipX += newMovieClip._width + movieClipsInterval;
newMovieClip._alpha = 0;
}

Поясняю вышеуказанный код:

// Описываем функцию создания Tween'а по _alpha для мувиклипа с номером clip.
function createTweenForClip(clip:Number)
{
// Получаем имя мувиклипа, для которого нужно создать изменение прозрачности.
var clipToTweenName:String = movieClipsBaseName + clip;
// Получаем ссылку на мувиклип, для которого нужно создать изменение прозрачности.
var clipToTween:MovieClip = this[clipToTweenName];
// Создаём обьект Tween для изменения прозрачности мувиклипа от 0 до 100 за movieClipsDissolveSpeed кадров.
var newTween:Tween = new Tween(clipToTween, "_alpha", None.easeNone, 0, 100, movieClipsDissolveSpeed, false);
// Если функция выполняется не для последнего мувиклипа, то...
if (clip < movieClipsNumber)
{
// ...по окончании проявления мувиклипа...
newTween.onMotionFinished = function()
{
// ...проделать то же самое для следующего мувиклипа.
createTweenForClip(clip + 1);
};
}
}

Как видите, начинается проявление с первого мувиклипа:

createTweenForClip(1);

А проявление всех остальных подхватывается рекурентно... ^_^