PDA

Просмотр полной версии : имитация клавиш рояля: улучшить сценарий.


artpiano
31.07.2005, 22:33
В прилагаемом файле есть 2 клавиши. При клике они нажимаются и издают звук. Функции опускания и подъёма клавиш построены таким образом, что пока одна из них не вернулась в исходное положенее, то другую нажимфть нельзя. Если этоу условие отменить, то двигающаяся клавиша остановится там, где её застал другой клик. Вопрос вот в чём: можно ли сделать так, чтобы двигающаяся клавиша при нажатии на другую тут же возвращалась в исходное положенеие, а та другая, двигалась, как её попросили?

Заодно ещё вопрос: При озвучке использую метод mySound.start, который имеет 2 параметра: задержка перед проигрыванием, и loop. У меня, почему-то, если я ставлю задержкой любую цифру, кроме нуля - звука нет. В чём ошибка?

iNils
31.07.2005, 22:57
А уменя MX 2004 нет:) Либо перегони в формат mx либо жди чейто другой ответ.

artpiano
31.07.2005, 23:13
Mx мне надо ставить. кстати, очень нравится твой сайт.
спасибо за ответ.

Король
31.07.2005, 23:29
iNils, к слову - сайт в ФФ не пашет. просто - если ты не был в курсе

iNils
01.08.2005, 00:05
2artpiano: не надо ставить, просто в mx2004 выбираешь SAve as и внизу выбери формат mx.

2король: спасибо за информацию. в скором буду делать редизайн и поэтомй если не трудно скинь в приват подробности если они есть.

artpiano
01.08.2005, 19:27
Хорошо, прикладываю исходник в MX. (Кстати, неужели у flash MX 2004 нет преимуществ перед MX? Одна система вкладок только - уже удобно.)
И ещё тоже к слову про с caйт www.inils.ru - (вчера постеснялся сказать) - если в Опере рисунки отключены, то swf файла вообще не видно. Я сначала ничего не понял.
Спасибо.

iNils
01.08.2005, 19:50
Грубый вариант:
key1_mc.a = key2_mc.a = 0;
key1_mc.b = key2_mc.b = 25;
function keyDown (key_mc:MovieClip) {
if (key_mc.a == 0) {
key_mc.onEnterFrame = function () {
if (key_mc.b != key_mc.a) {
key_mc._y += 5;
key_mc.a += 5;
} else {
delete key_mc.onEnterFrame;
keyUp (key_mc, keyverh_mc);
}
};
}
}
function keyUp (key_mc:MovieClip) {
key_mc.onEnterFrame = function () {
if (key_mc.a != 0) {
key_mc._y -= 5;
key_mc.a -= 5;
} else {
delete key_mc.onEnterFrame;
}
};
}
var e:Sound = new Sound ();
var d:Sound = new Sound ();
e.attachSound ("e");
d.attachSound ("d");
key1_mc.onPress = function () {
keyDown (key1_mc);
e.start (0, 0);
};
key2_mc.onPress = function () {
keyDown (key2_mc);
d.start (0, 0);
};

У тебя для каждой кнопки должный быть собственные переменные и обработчики, а ты использовал одни и те же, что вызывало конфликт.

По поводу mx 2004.
Его интерфейс вызвает у меня много вопросов:
1. Слишком громоздкий, все тулбары широкие и менее компактные чем в mx. Как следствие меньше полезной площади.
2. Отсутсвует независимая история для каждого мувиклипа. Это самое существенное замечание, работать с линейной историей во флеше это на мой взгляд изврат.
3. Библиотека... Каждый раз я вытягиваю ее на то место где мне удобно, и каждый раз при запуске библиотека упорно лезет в столбик со всеми остальными панелями.

Если и 8-ой флеш будет такой же, то боюсь придется искать мне новую работу.

artpiano
01.08.2005, 21:02
1. Огромное спасибо. Надо же: так просто, и это не могло прийти мне в голову! (я про переменные). А вот то, что EnterFrame можно присвоить параметру, до этого, я бы точно не догадался (не смейтесь, мастера!).
На своём сайте размещу отдельную благодарность для тебя.

2. Зачем же так трагично? То, что можно сделать о flash MX, будет ещё оооооооочень долго востребовано.
А MX щас прямо поставлю, посмотрю, сравню.