![]() |
|
||||||||||
|
|||||
|
Регистрация: Aug 2003
Сообщений: 90
|
Кто имеет желание помочь, пожалуйста помогите.
Делаю игру. Мне надо проделывать некие действия вместе с сообщениями в бегущей строке. Задавать когда именно проигрывать эти действия, я должен в самой бегущей строке. ПРИМЕР В бегущей строке есть символы 123456712345671234567 К 1234567 надо проиграть некий ролик за миг до того как буква "К" появится в бегущей строке. А саму букву из стринга удалить. Чтоб ее небыло видно в строке. Но в каждом последующем прокручивании бегущей строки в стринге заново должна быть буква К, и заново проигрывалось тоже действие, и эта буква небыла бы показана. Надо учесть, что за один раз в строке может быть несколько букв "K", несколько раз надо проиграть один и тот-же ролик. Код ниже, с исходника прикрепленного. Сама бегущая строка. stop();
str="<font face='Arial' color='#5B8DD7' size='17'><b> 123456712345671234567 K 1234567</b> </font>";
this.createEmptyMovieClip ("mcMaska", 0);
this.mcMaska.beginFill (0, 10);
this.mcMaska.lineTo (310, 0);
this.mcMaska.lineTo (0, 40);
this.mcMaska.lineTo (0, 40);
this.mcMaska.lineTo (0, 0);
this.mcMaska.endFill ();
//// создаем бегущую строку
this.createEmptyMovieClip ("mcText", 1);
this.mcText.createTextField ("txt1", 0, 0, 0, 100, 40);
this.mcText.createTextField ("txt2", 1, 0, 0, 100, 40);
this.mcText.txt1.autoSize = this.mcText.txt2.autoSize = true;
this.mcText.txt1.html = this.mcText.txt2.html = true;
this.mcText.txt1.htmlText = this.mcText.txt2.htmlText = str;
this.mcText.txt2._x = this.mcText.txt1._width;
this.mcText.setMask (this.mcMaska);
this.mcText.moveText = function () {
this._x -= 2;
if (this._x < -this.txt1._width) {
this._x += this.txt1._width;
}
updateAfterEvent ();
};
setInterval(this.mcText, "moveText", 32);
onEnterFrame=null;
Вопрос, как это можно реализовать. В исходнике уже есть ролик который надо проиграть. И сам код БГС.
__________________
http://nostradamYs.ru |
|
|||||
|
Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
|
почитай про методы и свойства объекта String. Приложи исходник, а то в архиве такого не наблюдается.
Тебе не сравнить букву с буквой? Последний раз редактировалось Kikasso; 02.01.2007 в 07:08. |
|
|||||
|
Регистрация: Oct 2004
Сообщений: 141
|
А не проще использовать конвейер и не придумывать шарманку на флэше?
|
|
|||||
|
loading 50%
|
Ваще не понимаю тебя, дорогой Автор!
Если у тебя фиксированный набор символов, нафига работать со стрингом? В любом случае, нужно строку анализировать по символьно - если знаешь как, то твой вопрос отпадает автоматически. |
|
|||||
|
Регистрация: Aug 2003
Сообщений: 90
|
Цитата:
Цитата:
Kikasso Цитата:
Исходник прикрепил.
__________________
http://nostradamYs.ru Последний раз редактировалось Slavik2003; 02.01.2007 в 20:24. |
|
|||||
|
Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
|
Slavik, проще всего не двигать текстовое поле, а добавлять буковку по буковке, используя метод String.slice(help) и что-то вроде i++
Если хотите именно двигать тексовое поле, значит нужно как-то найти позицию нужного символа. Если текст моноширинный, это просто String.indexOf(help); . Если буквы разной ширины.. Ну добавьте в строку <img src="marker" id="marker" /> и в библиотеку мувиклип "marker", тогда найти его позицию можно будет textField['marker']._x |
|
|||||
|
Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
|
ну принцип такой
это если просто текст. Если html по буковке его вставлять замучаешься, так что вставляйте невидимый маркер и определяйте его положение. Последний раз редактировалось Kikasso; 03.01.2007 в 09:37. |
|
|||||
|
Регистрация: Aug 2003
Сообщений: 90
|
Kikasso
Я написал Личным Сообщением кое что Вам
__________________
http://nostradamYs.ru |
|
|||||
|
Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
|
Спасибо, я заметил ))
Вот примерно такой механизм. Бьем строку по маркеру, поочередно загоняем куски строки в тестовое поле и определяя ширину этого поля получаем позицию маркера. Я поставил проверку на строгое совпадение, это конечно неправильно - там могут быть и дробные числа, и маркер я вставил всего один, но принцип должен быть ясен. Флеш 8 (сорри 6-ки нет). У вас маркеров много, соответственно надо создать и массив положений маркеров, ввести переменную "текущий маркер" - индекс массива и сравнивать _x с иксом текущего маркера. Если _х перевалил за отсечку, текущим становится следующий маркер и сравнивать теперь надо с ним, а клипу играть. Последний раз редактировалось Kikasso; 04.01.2007 в 23:06. |
|
|||||
|
Регистрация: Aug 2003
Сообщений: 90
|
Kikasso
Я пока не смог разобраться почему действие происходит в одном и том-же месте даже если менять место расположения маркера Паралельно с твоим способом я ищу ответ на нижеописанный, если кто знает, поскольку твой способ потребует потом массу массивов для маркеров, и несколько десятков строк кода Есть точка х В Бегущую строку(бгс) добавлялись бы символы по одному Бегущая строка проезжает точку х, и как тоько правый ее край будет на точке, добавить 1 символ. Этот символ расширит поле, и снова, как правый край наедет на точку, добавить символ. Пока один вопрос, каким образом вычислить координату правого края поля бгс . . .
__________________
http://nostradamYs.ru |
![]() |
![]() |
Часовой пояс GMT +4, время: 07:28. |
|
|
« Предыдущая тема | Следующая тема » |
|
|