|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
28.11.2022, 08:07 | #31 |
Форумчанин
Регистрация: 22.01.2014
Сообщений: 313
|
Это не самое страшное, как-то работает, но, как мне кажется, не совсем так, как надо, текст пролетает один раз едва заметно, и всё. Я так понимаю это зависит от переменной StartTime. Если так, то, по идее, если переменная pos в функции DrawPopUpText() стала >= 0, то StartTime = GetTickCount() нужно задать новое значение. Если я правильно уловил суть ваших рассуждений.
Почему вас не смутил цикла: Код:
Как сделать так чтобы текст медленнее выплывал и более плавно? Это зависит от частоты вызова таймера или от частоты обновления кадра (GetTickCount() + StartTime) / 10; Я, думаю, что в задании имелось ввиду нечто другое. Не снизу вверх, а слева направо)) Хотя уже без разницы как... хоть как-нибудь. Последний раз редактировалось apofioz; 28.11.2022 в 08:09. |
28.11.2022, 12:53 | #32 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
Нет. Я не просто так писал в комментариях про скорость. Там у вас делитель какой? 10? Вот его и увеличивайте.
Для того, чтобы текст всплывал по символам надо задать функцию, которая будет вычислять разницу между предыдущим символом и текущим в пикселях, а в функции DrawPopUpText для рисования использовать цикл по символам и рисовать каждый отдельно со своей координатой y вычисляемой функцией из координаты предыдущего символа и разницы nowTime - startTime (где nowTime = GetTickCount(), лучше не вызывать многократно GetTickCount при воспроизведении в одной строке, чтобы не рассинхронизировать анимацию). Если не понятно, тогда так. Разница GetTickCount - StartTime за 1 секунду увеличивается на 1000. Вам надо пройти расстояние в 20 пикселей (примерно = высота текста в пикселях). Тогда 1000 / 20 = 50 мс/пиксель, чтобы анимация длилась 1 секунду. 50 мс/пиксель это 20 кадров в секунду. Если укажите 100, тогда анимация строки будет длиться уже 2 секунды, а 1 пиксель будет прибавляться каждый 3 кадр (т.к. скорость снизится до 10 кадров в секунду). Последний раз редактировалось macomics; 28.11.2022 в 13:08. |
28.11.2022, 13:12 | #33 |
Форумчанин
Регистрация: 22.01.2014
Сообщений: 313
|
Но текст не выплывает снизу, как вы предполагали, а просто появляется и уплывает вверх, эффект так себе, если честно. Я думал, что он будет как бы из-под нижней границы нарастать, нарастать, а а затем полностью показавшись, уходит под верхнюю границу. Надуюсь ясно объяснил.
Тут хоть бы с одним разобраться, зачем мне лишние усложнения. |
28.11.2022, 13:14 | #34 | |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
Цитата:
|
|
28.11.2022, 13:20 | #35 |
Форумчанин
Регистрация: 22.01.2014
Сообщений: 313
|
Код:
|
28.11.2022, 13:30 | #36 |
Форумчанин
Регистрация: 22.01.2014
Сообщений: 313
|
Вот ещё, это мой набросок, я его не собирал, просто как идея, смысл вывод текста слева направо. В идеале он должен медленно нарастать из-за левой границы и дойдя до конца т.е. размер всего текста(возможно, плюс ещё пару символов) возвращаться к выводу заново.
Код:
Последний раз редактировалось apofioz; 28.11.2022 в 13:48. |
28.11.2022, 14:08 | #37 | ||
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
Цитата:
Цитата:
Странно. Все проверил. Должен выплывать из под нижней границы, но останавливаться по достижении верхней. |
||
28.11.2022, 14:20 | #38 | ||
Форумчанин
Регистрация: 22.01.2014
Сообщений: 313
|
Цитата:
Цитата:
Я ещё пример выложил, может быть, он сработает, если, конечно его доработать? Последний раз редактировалось apofioz; 28.11.2022 в 14:34. |
||
28.11.2022, 14:59 | #39 |
Форумчанин
Регистрация: 22.01.2014
Сообщений: 313
|
Вот чего удалось добиться на данный момент.
AnimationText.zip Не совсем то, что надо, но уже лучше, нужно сделать вывод более плавным и сам вывод нужно сделать таким чтобы символы выводились как бы выползая слева направо. Пока что это не так. Последний раз редактировалось apofioz; 28.11.2022 в 15:17. |
28.11.2022, 15:13 | #40 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
Как вариант:
Код:
А зачем вам собственный bitmap для каждой анимации? Все можно сделать через один и тот же. Если лень считать размер текста, тогда просто увеличьте единственный bitmap до размеров окна. Смотрите в чем смысл. У вас есть bitmap 800 x 600. У этого bitmap на экран (в окно) выводится только верхний левый кусочек размером sz.cx x sz.cy (видимая часть размером с текст). Вам для анимации текста на этом bitmap достаточно рисовать текст так, чтобы он задевал этот кусочек или был полностью в него вписан. Для этого на каждом кадре вычисляем новое значение положения текста на bitmap по y и уменьшаем его с течением времени. Таким образом текст будет вползать снизу в видимую часть bitmap. Это вы и увидите в окне. Для запуска циклической анимации можно сразу в функции добавить: Код:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Необходимо написать "таймер", который будет запускаться при нажатии кнопки "Start", приостанавливаться на "Pause", и сбрасываться на "Reset" | billiejean78 | JavaScript, Ajax | 1 | 03.09.2021 08:58 |
Убрать папки "Pictures", "Music", "Видео", "Downloads" из "МОЙ КОМПЬЮТЕР" | Бахтиёр1916 | Windows | 1 | 05.04.2017 12:53 |
Нужно пояснить/прокомментировать код программы, или коды функций "Добавить" "Удалить" "Обновить(редактировать" "Поиск" "Период") | ZIRASS | PHP | 4 | 15.06.2016 14:23 |
Поиск компонента GroupBox с эффектом "спойлер" | XerSon | Компоненты Delphi | 1 | 24.03.2011 09:59 |