Як робити анімацію (2D)
Майстри, підкажіть як робити анімацію в Delphi (2D). Я дещо спробував, але результатом не задоволений. Може щось підкажіть.
Ось моя спроба- http://delphigames.ruhelp.com/index.php?act=Attach&type=post&id=37
Задавай конкретні питання щодо посилання маячня якась
Виправляюся: Припустимо, є малюнок, що містить кілька кадрів, показавши які один за одним отримується анімація, на кшталт тієї, що у мене на прикладі. Питання: як відображати необхідний кадр у компоненті TImage? Або: як відображати необхідну частина малюнку?
BitBlt() вміє копіювати частинами
що таке BitBlt і як ним користуватися?
За твоїм посиланням вантажиться якийсь спам із пропозицією зареєструвати безкоштовний форум :) Ну, чорт із ним із прикладом.
Ось ІМХО найпростіший спосіб (з чогось такого я починав): 1) розрізаєш малюнок по кадрах - кожен кадр в окремий файл. Називаєш їх, наприклад, k1.bmp, k2.bmp, . ,k10.bmp 2) робиш масив my_pic:array[1..10]of tbitmap; і змінну-тег. pic_tag:byte; 3) завантажуєш туди малюнки для i:=1 to 10 do begin my_pic[i]:=tbitmap.create; my_pic[i].loadfromfile("k"+inttostr(i)); end; 4) у таймері, або де там у тебе відбувається зміна кадрів . inc(pic_tag); if pic_tag>10 then pic_tag:=1; image1.canvas.draw(0,0,my_pic[pic_tag]); .
А всякі BitBlt тощо. лажа :) коли прокачаєшся розберешся.
ну і ще напевно купа помилок є :) сподіваюся ідея ясна.
page.Canvas.CopyRect(Rect(0, 0, 32, 16), bmp.Canvas, Rect(Frame * 32, 0, Frame * 32 + 32, 16); Це для кадрів 32х16 розташованих горизонтально Frame - поточний кадр анімації.
Дякую всім, пробуватиму.
BitBlt - той жеCopyRect(), тільки швидше буде працювати. Хоч і не набагато
О. Колега! Я теж дещо спробував. http://dcegame.narod.ru/pilots.html І можу сказати, що гальмується працює, якщо через Canvas виводити.
Може хто знає, як через 3d прискорювач робити те саме? У сенсі робити так, щоб не треба було все координально переробляти. Якісь аналогічні функції типу CopyRect, тільки в 3D існують ?
ні, але ці функції можна написати самому
І навіть в OpenGL немає? Чи ти просто не в курсі?
До речі, я додав Колегу в http://dcegame.narod.ru/pilots.html І підказки при наведенні на предмети.
Тепер думаю, де б сценарій цікавий надибати.
типу. КухарДров тобі допоможе
ds := 1/Frames; s := Frame * ds; glBegin(GL_QUADS); glTexCoord2f(s, 0); glVertex3f(X, Y); glTexCoord2f(s + ds, 0); glVertex3f(X + 32, Y); glTexCoord2f(s + ds, 1); glVertex3f(X + 32, Y + 16); glTexCoord2f(s, 1); glVertex3f(X, Y + 16); glEnd;
> Якісь аналогічні функції типу CopyRect, тільки в > 3D існують ?якби і були, то гальмували вони так само як і при виведенні на канву. Там є інші методи. Але насправді все дуже легко.