PDA

Просмотр полной версии : создание кнопок с картинками, запись звуков


Анонимщик1
17.06.2005, 11:47
Здравствуйте.
Прошу особо не ругать и сразу не пинать.
Вот хочу сделать следующее: чтобы был у меня swf-файл, а в нем две кнопки с картинками в них (или правильно говорить - на них?), при нажатии по первой кнопке нужно проигрывать звук (который тоже содержится в этом же swf-файле), а по нажатии на вторую - проигывание останавливалось бы.
Но я совершенно нулевой во флеше.
По идее, нужно бы сделать следующее:
1. Создать клип.
2. Создать две кнопки.
3. Загрузить в них картинки (если это возможно - или это как-то по-другому делается).
4. Предварительно (как-то, не знаю как) конвертировать wav (или mp3 ) - файл во что-то, что в виде ресурса подшить к будущему swf-файлу.
5. Навесить на кнопки события.

Начинаю делать - файл Butts.as:

class Butts {
function Butts() {
_root.createEmptyMovieClip("startButton", 0);
// все, приехали, я не знаю, как создать кнопки и, тем более, загрузить в них картинки
}


// точка входа здесь
static function main() {
var p = new Butts();
}
}


Я не знаю даже как создать кнопки, связать с ними переменные и загрузить в них картинки.

Сказать, что перерыл хелп - не могу, но искал. Я принципа не понял - что к чему. Поэтому прошу ответить, как это сделать.

DOG-Paul
17.06.2005, 12:02
вообщем звук помещаешь в библотеку, даёшь ему Linkage допустим "mySound"...
На кнопку PLAY вешаешь:
on (release) {
mySound = new Sound();
mySound.attachSound("mySound");
mySound.start ("mySound", 999);
}
На кнопку STOP:
on (release) {
mySound.stop ();
}

Жень Шень
17.06.2005, 12:29
я не знаю даже как создать кнопки...
привет!
а, уже ответили...
но, тем не менее лови пример. правда я две кнопки в одну соместил. может понравиться :)

Анонимщик1
17.06.2005, 16:16
Очень благодарен за столь быстрые ответы, но очень сильно прошу меня простить, поскольку у меня задача немного другая. Я, прежде всего, не могу открыть файлы *.fla - у меня нет для этого никаких редакторов. Мне нужно, имея только один или несколько исходных текстов, которые понимает компилятор mtasc, создать эти кнопки, загрузить в них рисунки, причем не из внешних каких-то файлов, а из ресурсов самого будущего swf-файла; то же самое и для звуков.

Анонимщик1
17.06.2005, 19:29
так если это нетривиально, то скажите об этом, буду хотя бы знать.

Жень Шень
18.06.2005, 11:52
...так если это нетривиально, то скажите об этом...
Привет!
Синонимы слова "тривиальный": банальный, затасканный, заурядный, избитый, неоригинальный, пошлый, шаблонный. Я даже не знаю, что и сказать. :cool:
А про компилятор mtasc, увы не слышал. :confused:

Король
18.06.2005, 12:09
анонимщик, да, это нетривиально.

Анонимщик1
22.06.2005, 11:59
ну хорошо.
прошу тогда подсказать, что и где нужно почитать, чтобы я мог видеть пути решения проблемы.

KUZEN
22.06.2005, 13:26
ну хорошо.
прошу тогда подсказать, что и где нужно почитать, чтобы я мог видеть пути решения проблемы.
Тут и проблемы то нет как таковой, всё что тебе нужно это создавать мувики вместо кнопок (createEmptyMovieClip) ... затем аттачить туда нужные картинки (attachMovie) ... потом вешаешь события на мувики, чтобы они вели себя как кнопки (my_mc.onPress, my_mc.onRelease и т.д.) ...

Анонимщик1
22.06.2005, 17:36
Вам может и легко "аттачить", а я могу сделать только с внешним файлом, а как этот самый внешний файл всунуть в виде ресурса в сам swf, а потом оттуда их загружать?

DOG-Paul
22.06.2005, 17:48
ну просто в мувик грузи сам файл допустим
_root.mc.loadMovie ('my.jpg');

MaxLife
22.06.2005, 20:28
Парень, тебе что за кнопки нужны? Есть два пути - если стандартные плей, стоп, вперёд/назад - то можешь поглядеть в коллекции Buttons, расположенной в меню Window/Other panels/Common libraries/Buttons. Естественно, в меню Flash. Погляди в папке Playback.

Если тебе же надо какие-то разэтакие картинки обязательно грузить, это можно сделать так - кинуть в ролик две кнопки, импортировать в библиотеку (или нарисовать) картинки, в свойствах linkage выдать им идентификаторы, скажем, image1 и image2, после чего в брошенных кнопках в инспекторе свойств засадить те же самые строчки - image1 и image2 в свойство icon и повесить на кнопки обработчики, которые тебе дали.

В принципе, конечно, можешь сделать присваивание также программно.

Ответил я на твой вопрос?

KUZEN
23.06.2005, 12:02
Ответил я на твой вопрос?
А ты его вообще читал :D

KUZEN
23.06.2005, 12:04
короче в ситуации с внешними файлами ... загрузить в библиотеку и от туды их аттачить неполучится, но ни что нам не мешает создавать мустые мувики и подгружать в них картинки ;)

Анонимщик1
25.06.2005, 12:11
Вы меня простите, но, если не знаете, вообще не отвечайте.
Еще раз говорю. У меня, елки палки, нет ничего, кроме компилятора mtasc, который компилирует флешовые исходники в swf. У меня нет никаких FlashMX, библиотек, каких то Other panels и т.д.
Чтобы совсем было понятно, разъясняю. Мне нужно написать программу (например, на с, паскале, бэйсике или т.п., это наважно на чем, хоть на языке bat-файлов), которая бы создавала исходник флеша, скомпилировав который, мы бы получили swf-файл, при запуске которого на просмотр видели бы следующее: есть две кнопки, одна запускает проигрывание некоего звука, вторая его останавливает. swf-файл должен быть самодостаточным, т.е. в нем должны быть и картинки для кнопок, и звуки. bmp-файлы для кнопок задаются из этой самой моей программы, то же самое для звука.
Пожалуйста, если будете отвечать, прошу вас, приведите хоть какой-нибудь код.

MaxLife
25.06.2005, 15:41
Вы бы, батенька, чуть терпимее. Используемый вами компилятор отнюдь не стандартен, чтоб вы знали, так что не удивляйтесь. Это во-первых. Во-вторых, в работе вам нужен класс MovieClip, как минимум, его описание лежит по адресу http://flashcodersny.org/assets/Flash_MX_2004_Classes/, если уж так не хочется ставить Flash.

Интересуйтесь также методами createEmptyMovieClip, loadMovie, attachMovie, Sound. Учтите, что любой метод может быть определён примерно таким способом:

obj.draw = function()
{
this.clear;
this.moveTo(0, 10);
this.lineTo(10, 10);
}

картинки можете грузить через obj.loadMovie. Также обратите на onMouseDown, onMouseUp, onKeyPress и так далее. Переопределить можете аналогично. Не теряйте только параметры при описании функции-перехватчика.

MaxLife
25.06.2005, 15:56
Сорри, не метод, а объект Sound.

Анонимщик1
25.06.2005, 16:26
Спасибо, извините.
Можно узнать, какой компилятор предпочтительнее?
А по ссылке уже смотрю. Для меня, при моем "знании" флеша, очень полезно.
Еще раз извините, но Вы не могли бы буквально в трех абзацах рассказать принцип работы флеша (как программист программисту), а то я, честно сказать, совсем ничего не понял.
Флешовые объекты - это объекты в том же смысле, что и в объектно-ориентированных (или в объектных) языках программирования? Есть ли наследоание, инкапсуляция и т.д.?
Я так понял, что MovieClip - какой-то контейнер, что ли, совершенно необходимый для работы? Может их быть несколько? Какая логика работы в этом случае?

MaxLife
25.06.2005, 16:56
Чаще всего Flash воспринимается не как компилятор, а как средство разработки медиа-контента, который (контент) может содержать, а может и не содержать скрипты. Поэтому вопрос с точки зрения "swf с помощью компилятора" звучит экзотически. Я, например, ещё никогда не использовал сторонних систем :).

Используемый в скриптах ActionScript имеет две версии - первую и вторую. Мой пример использует первую, до икоты близкую к JavaScript и отвечающую тому же стандарту ECMA-262 (кажется). Вторая версия - реализованная скорее ближе к обёртке - более объектно-ориентированна. Все принципы ООП поддерживаются. Различие между версиями достаточно слабое - использовать можно обе, не замечая даже, где граница.

Почти все объекты, которые можно использовать, происходят от MovieClip. Это базовый класс. Существуют также стандартные глобальные объекты, нр, _root, _global.

От себя добавлю, что я бы рыл в направлении классов кнопки - Button, SimpleButton, у них есть практически всё что надо (текст, картинка, события и всё прочее), единственное, на что навскидку не могу сказать - как вцепить в неё внешнюю картинку.

Тут проблема в том, что наиболее общепринятая практика - создание шаблонов, по которым потом можно плодить экземпляры сколь угодно. Так вот, в стандартную кнопку (класс Button) можно легко посадить картинку, вложенную в такой шаблон - кнопка внутри себя сама создаст экземпляр объекта-иконки по шаблону и будет с ним распоряжаться, а картинку в иконку уже можно и перегружать (сам не пробовал, честно скажу, но не вижу, почему бы и нет).
А чтобы создать такой шаблон программно, надо использовать, как мне кажется, что-то вроде registerClass.

MaxLife
25.06.2005, 16:58
Хотя можно попробовать просто вызвать для объекта кнопки тот же attachMovie, перехватить события и реагировать соответственно. Если очень хочется, можно написать производный класс от кнопки.

MaxLife
25.06.2005, 17:06
loadMovie. Совсем внимание потерял.

Captain Crocus
25.06.2005, 17:20
>> Почти все объекты, которые можно использовать, происходят от MovieClip. Это базовый класс.

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

MaxLife
25.06.2005, 17:26
Хорошо, от Object :) Но для визуальных элементов MovieClip - базовый :) Я, например, не пытался бы что-то визуальное производить от Object.

Captain Crocus
25.06.2005, 17:26
>> различие между версиями достаточно слабое - использовать можно обе, не замечая даже, где граница.

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

Captain Crocus
25.06.2005, 17:30
>> Хорошо, от Object

Ну слава богу, празднуем возвращения джедая, пардон, Object'a.

MaxLife
25.06.2005, 17:33
да ради бога.

Captain Crocus
25.06.2005, 17:46
>> Но для визуальных элементов MovieClip - базовый

Хотелось бы спросить еще (может, еще чего изменилось, а я не в курсе), Button, TextField - это по Вашему визуальные элементы?

MaxLife
25.06.2005, 17:55
и какие же они? прошу просвещения :).

Буньков Максим
25.06.2005, 18:04
Берешь компилятор C++ и изобретаешь велосипед (Flash). А потом внедряешь в него mtasc и получаешь swf и все делов то...
З.Ы. ...

Captain Crocus
25.06.2005, 18:34
2MaxLife
Ну раз они визуальные, то Вам, наверное, будет полезно узнать, чьими наследниками они являются.

ActionScript Language Reference - это источник

The Button class inherits from the Object class.
The TextField class inherits from the Object class.

MaxLife
25.06.2005, 19:16
Ну, как вы сами ранее указали, самый первый класс в цепочке, действительно, Object.

Однако, осмелюсь процитировать справку:

Button class
Inheritance MovieClip > UIObject class > UIComponent class > SimpleButton class > Button

ActionScript Class Name mx.controls.Button

Но, опять признаю Вашу правоту, в основе всего действительно лежит Object. Предлагаю оставить полемику на эту тему :). (без стремления обидеть)

Nirth
25.06.2005, 19:30
ты говоришь о компоненте Button а мы о элементе Button (когда создаешь новый символ Button ,MovieClip , Graph) это совсем разные баттоны, просто название совпадает

MaxLife
25.06.2005, 20:08
Согласен, но, когда вы обращаетесь к ним из скрипта, вы всё равно обращаетесь к ним как к экземплярам MovieClip, не так ли?

Nirth
25.06.2005, 20:10
Согласен, но, когда вы обращаетесь к ним из скрипта, вы всё равно обращаетесь к ним как к экземплярам MovieClip, не так ли?

в корне не правильно
Мы обращаемся к MovieClip, Math, Button, LoadVars , XML и всем остальным как к Object'у

MaxLife
25.06.2005, 20:13
ну так шум, если я правильно понял, начался именно с того, что лежит в основе визаульных элементов. но нюанс есть, согласен.

MaxLife
25.06.2005, 20:16
хорошо, не прав.

OooTPaBKa
18.07.2007, 21:51
Я начинающий флешер.
Мне нужна помощь в одном дельце... Как записать звук с микрофона во флеш, а потом его проиграть. Нид хелп