Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.07.2015, 15:12   #1
DenProx
Форумчанин
 
Аватар для DenProx
 
Регистрация: 23.11.2009
Сообщений: 191
По умолчанию Циклическая анимация canvas

Доброго времени суток! Есть у кого ни будь примеры циклической анимации на Канве ?? Нужно сделать простое движение бесшовной текстуры по X или Y, по принципу ленточного конвейера.

p.s. Пишу на Builder 6.

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

Код:
Graphics::TBitmap *Bitmap, *Buf; //картинки для фона, кораблика и буфер для хранения части рисунка под корабликом
int W,H,x,y; //ширина и высота кораблика, его координаты
TRect BufRct,BackRct; //прямоугольные области, понадобятся для передачи данных в метод CopyRect
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Bitmap = new Graphics::TBitmap(); // картинка
Buf = new Graphics::TBitmap(); // буфер
 
// загрузить картинку, которая будет двигаться
Bitmap->LoadFromFile("imgVoda2.bmp");
// определим "прозрачный" цвет
Bitmap->Transparent = true;
Bitmap->TransparentColor = Bitmap->Canvas->Pixels[1][1];
 
// создать буфер для сохранения копии области фона,
// на которую накладывается картинка
W= Bitmap->Width;
H= Bitmap->Height;
 
Buf->Width= W;
Buf->Height=H;
 
// определим область буфера, которая будет использоваться
// для восстановления фона
BufRct=Bounds(0,0,W,H);
// начальное положение картинки
x = 0;
y = 0;
// определим сохраняемую область фона
BackRct=Bounds(x,y,W,H);
// и сохраним ее
Buf->Canvas->CopyRect(BufRct,Bitmap->Canvas,BackRct);
Form1->DoubleBuffered = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
 
x = x+ StrToInt(Edit1->Text); //Поплывет вправо
 
if (x>Form1->Image1->Width) x=-W;  //потом снова приплывет слева
 
// выведем рисунок
Form1->Image1->Canvas->Draw(x,y,Bitmap);
 
}
//---------------------------------------------------------------------------
Подскажите, пожалуйста! Как заставить картинку двигаться "без шва", как лента конвейера ?
Чаще всего, у большенства людей, поиск Истины заканчивается набором слова в Гугле
DenProx вне форума Ответить с цитированием
Старый 07.07.2015, 15:29   #2
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

Можете нарисовать схематично что хотите получить?

З.Ы. Рисовать надо в OnPaint, а в таймере только менять всякие параметры и просто Repaint вызывать.
ResourceSpace вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Циклическая Gif анимация Merodeador Мультимедиа в Delphi 2 05.06.2013 18:33
циклическая программа с++ 6002theJuicy Помощь студентам 13 29.02.2012 20:28
Циклическая структура overlor Паскаль, Turbo Pascal, PascalABC.NET 5 28.01.2012 23:12
Циклическая ссылка iami Microsoft Office Excel 7 04.07.2011 15:24
циклическая структура Яська Помощь студентам 1 26.10.2009 18:57