Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
 Аватар для Morgan-S23
-26 / 3 / 0
Регистрация: 20.03.2011
Сообщений: 102

Анимация - одновременное передвижение двух картинок

03.05.2012, 20:06. Показов 1921. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
С вечером всех.

Смотрите
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::komb1Click(TObject *Sender)
{
for(int i=232;i>90;i--)
{
komb1->Left=i;
 Application->ProcessMessages();
        Sleep(1);
 }
Здесь у меня маленькая картиночка komb1 начинает двигаться(идет влево).
Проблема в том, что я хочу чтобы картиночки komb1 и komb2 двигались одновременно. Но я могу двигать только по одному. Никак не получается двигать их одновременно. Как их заставить одновременно двигаться?
(то есть одна картиночка по своей "дороге", а вторая по другой)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.05.2012, 20:06
Ответы с готовыми решениями:

Одновременное движение двух картинок
Имеются две картинки Image1 и Image2 обна перемещается человеком тоесть мышкой, а другая в рандомных направлениях если быстро перемещать...

Анимация из двух картинок
Надо, чтобы псина шла слева-направо:jokingly: <button>start</button> <div class="one"> <img src="img7.jpg"> </div> ...

Анимация смены двух картинок. (Одна выезжает сбоку)
Подскажите пожалуйста, как сделать анимацию смены двух картинок, когда одна выезжает либо по вертикали, либо горизонтали, либо по диагонали...

7
 Аватар для QWIPQ
144 / 123 / 14
Регистрация: 10.10.2011
Сообщений: 366
Записей в блоге: 2
03.05.2012, 20:17
код движения второй картинки загоните в поток, например: TThread... и там где вызывается движение первой просто запустите его и получится у вас движение первой и второй одновременно...
1
 Аватар для Morgan-S23
-26 / 3 / 0
Регистрация: 20.03.2011
Сообщений: 102
03.05.2012, 20:19  [ТС]
сердечно благодарю, но я очень пЛох в билдере. Пожалуйста, если вас не затруднит, объясните подробнее или примером покажите
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
03.05.2012, 20:24
Цитата Сообщение от Morgan-S23 Посмотреть сообщение
C++
1
2
Application->ProcessMessages();
Sleep(1);
Зачем эти извращения? Используй TTimer для движения. И что мешает сделать так, раз уж вместе двигать надо(?):
C++
1
2
3
komb1->Left = i;
komb2->Left = j;
i--; j++;
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
03.05.2012, 20:24
А так не двигается:
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::komb1Click(TObject *Sender)
{
  for(int i=232;i>90;i--) {
    komb1->Left=i;
    komb2->Left-=i;
    Application->ProcessMessages();
    Sleep(1);
 }
?
0
 Аватар для Morgan-S23
-26 / 3 / 0
Регистрация: 20.03.2011
Сообщений: 102
03.05.2012, 20:33  [ТС]
я тоже так хотел сразу, но не двигается(

Добавлено через 2 минуты
Цитата Сообщение от BRcr Посмотреть сообщение
Зачем эти извращения? Используй TTimer для движения. И что мешает сделать так, раз уж вместе двигать надо(?):
C++
1
2
3
komb1->Left = i;
komb2->Left = j;
i--; j++;
 Комментарий модератора 
Правила говорят: все обсуждения по теме - в теме.
0
 Аватар для Morgan-S23
-26 / 3 / 0
Регистрация: 20.03.2011
Сообщений: 102
03.05.2012, 20:47  [ТС]
загрузил сюда архив проекта. Пожалуйста, покажите на примере, как двигать одновременно. Чтобы просто понять суть. Не важно какие картинки и куда, мне бы просто понять КАК это делается
*молится_и_ждет*
Вложения
Тип файла: rar PRO.rar (396.1 Кб, 14 просмотров)
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
04.05.2012, 00:37
Вот пример. Поменял обработчик одной из твоих кнопок - komb1Click. Чтоб заработало, добавь TTimer с палитры на форму и оставь ему имя Timer1. В инспекторе два раза щелкни на его событии OnTimer - билдер автоматом создаст обработчик и покажет его в редакторе кода. Дальше подменяй тем, что приведено ниже.

Можно на лету менять скорость движений, выставляя шаг изменения factor_value или интервал срабатывания таймера Timer1->Interval; можно выставлять координаты, меняя элементы в массивах starts[] и ends[].
Главное всегда оставлять себе простор для маневра, писать по возможности гибкий код - так ведь лучше, правда. И это далеко не все, что можно выжать таким подходом: можно координаты вычислять, отталкиваясь от каких-либо соотношений, а не ручками забивать(что крайне непрактично), можно указатели &( komb1->Left ) оформить в виде массива и получить таким образом возможность на лету менять цели передвижений; аналогично можно в массив оформить и значения шагов factor_value, чтоб задавать разные скорости движения.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//---------------------------------------------------------------------------
int starts[] = { 232, 392, 90, 530, 99, 620 };
int ends[] =   { 90,  47,  275,624, 400,510 };
int index = 0, factor_value = 1;
int incr = starts[index], factor = -factor_value;
int *target = &( komb1->Left ); // цель изменений
//---------------------------------------------------------------------------   
void __fastcall TForm1::Timer1Timer(TObject *Sender) {
    
    if ( ! index ) { // здесь делаем то, что нужно сделать до начала выполнения циклов
        zel1->Visible=true;
        knopka1->Visible=false;
        komb1->Visible=true;
    }
    
    *target = incr; // эти две строчки, собственно - весь рабочий цикл
    incr += factor;
    
    if ( factor > 0 ? ( incr > ends[index] ): ( incr < ends[index] ) ) { // если достигнута текущая граница из массива ends[]
        index == ( sizeof( starts ) / sizeof( starts[0] ) - 1 ) ? 
            index = 0: incr = starts[++index]; // если текущий индекс является последним возможным, установить его в 0, иначе увеличить его на единицу и приравнять incr к следующему значению из массива starts[] 
        starts[index] > ends[index] ? 
            ( factor = -factor_value ): ( factor = factor_value ); // если элемент из массива starts[] больше соответствующего элемента из массива ends[], то установить фактор изменения incr в -factor_value(уменьшение), иначе - установить в factor_value(увеличение)
        switch ( index ) { // этот switch соответствует вашему набору циклов for
        case 1: // если индекс стал 1, то целью наших изменений становится komb1->Top
            target = &( komb1->Top );
            break;
        case 2: 
            target = &( komb1->Left );
            break;
        case 3: // если индекс равен 3, значит были выполнены три цикла для картинки komb1 и целью наших изменений становится komb11->Left и так далее...
            komb1->Visible=false;
            komb11->Visible=true;
            target = &( komb11->Left );
            break;
        case 4: 
            target = &( komb11->Top );
            break;
        case 5: 
            target = &( komb11->Left );
            break;
        case 0: // если индекс был сброшен на 0, значит все циклы пройдены и пора сбрасывать все к начальным значениям и вырубать таймер
            target = &( komb1->Left );
            incr = starts[index];
            Timer1->Enabled = false;
            zel1->Visible=false;
            break;  
        }
    }
    
}
//---------------------------------------------------------------------------
void __fastcall TForm1::komb1Click(TObject *Sender)
{
    Timer1->Interval = 1; // можно менять время срабатывания таймера
    factor_value = 3; // можно менять шаг изменения параметров
    
    Timer1->Enabled = true;
}
//---------------------------------------------------------------------------
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.05.2012, 00:37
Помогаю со студенческими работами здесь

Анимация. Передвижение дельфина по синусоиде
Здравствуйте!:victory: Мне нужна Ваша помощь с анимацией..задумка такая:дельфин(нарисованный не через line,как у меня) движется по...

Элементарная анимация: передвижение шариков (не могу найти ошибку)
import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; ...

Анимация картинок
Берем 10 картинок (.png) делаем рамочку.Далее программа берет их и начинает рандомно между собой их перемешивать и анимацией их...

Анимация из картинок
Как сделать что-то вроде gif анимации, чтобы изображения брались из папки и изменяли картинку? Делал вот так: unit Unit1; {$mode...

Одновременное открытие двух форм
Как сделать чтобы при открывании файла Form1 вместе с ним открывалось и form2


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru