![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Доброй ночи или кто когда читает гостям темы =) нароооод, помогите пожалуйста, я вот не знаю, как нарисовать следующую штуку:
надо нарисовать российский флаг и чтобы он двигался по периметру экрана,нарисовать флаг я могу,НО, я его рисую полосками, но так, чтобы они выкладывались в российский флаг, следовательно если чё-то двигать, то там двигаться будет только одна полоска, остальные ж на месте стоять будут, вот я не знаю что делать, помогите а? ![]() |
#2
|
||||
|
||||
![]() и вообще я знаю только один метод как можно заставить анимашку двигаться,но он какой-то корявый(я его знаю в теории, на практике у меня плохо пока что реализуется) подскажите пожалуйста если кто что получше знает...и попроще =)
|
#3
|
|||
|
|||
![]() Цитата:
|
#4
|
||||
|
||||
![]() так,а как так нарисовать? смотри, тут одна тонкость
Код:
with Image1.Canvas do begin brush.Color:=clWhite; rectangle(0,Image1.Height div 2,Image1.Width div 2,0); brush.Color:=clBlue; rectangle(0,Image1.Height div 3,Image1.Width div 2,Height div 6); brush.Color:=clRed; rectangle(0,Image1.Height div 2,Image1.Width div 2,Height div 3); end; видишь? я сначала задаю большой прямоугольник, потом на нем как бы рисую ещё 2 прямоугольничка, так если двигать, то двигаться то всё равно будет только 1 из них |
#5
|
||||
|
||||
![]() Анимация всегда делается одинаково:
1) стираем все 2) рисуем в новом месте Соответственно тут то же самое: 1) рисуем серый прямоугольник на форме чтоб все стереть 2) рисуем флаг в новых координатах. и не пойму, что мешает рисовать по координатам X и Y и по таймеру их менять. Не проще так? Код:
brush.Color:=clWhite; rectangle(X,Y,X+100,Y+200); brush.Color:=clBlue; rectangle(X+100,Y,X+200,Y+200); brush.Color:=clRed; rectangle(X+200,Y,X+300,Y+200); jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 02.05.2011 в 01:10. |
#6
|
|||
|
|||
![]() Кстати если тебе просто нужно создать эфект перемещения к примеру по форме то перемещай объект image можно через тотже таймер или к примеру по кнопкам
![]() |
#7
|
||||
|
||||
![]() Если рисовать на компоненте TImage то можно вообще просто его двигать:
Код:
image1.left:=x; image1.top:=y; А если надо именно на экране, то можно двигать саму форму. Только надо её границы убрать чтоб не мешались. jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 02.05.2011 в 01:16. |
#8
|
||||
|
||||
![]() ааааа, афигеть, я ничего этого не знаю =( в делфи чайник, но пытаюсь что-то сделать, а как через таймер кстати делать я не знаю =(((
|
#9
|
||||
|
||||
![]() надо по экрану? тогда кидаешь на форму таймер, ставишь нужный интервал в миллисекундах, дважды тыкаешь и пишешь там код перемещения формы
Код:
Top:=Top+2; Left:=Left+2; Чтобы по периметру надо продумать например флаги, чтобы ехал горизонтально, потом доехал до края - вертикально и т.д. на заметку, пригодится: ширина экрана - Screen.Width. высота - Screen.Height. jmp $ ; Happy End! The Cake Is A Lie. |
#10
|
||||
|
||||
![]() эммм...я ещё в процессе варения, вот взгляните, я всё почистила, сделала заготовку на флаг, но его ещё не красила
Код:
procedure TForm1.Button1Click(Sender: TObject); begin with Image1.Canvas do begin brush.Color:=clGray; pen.color:=clBlack; fillrect(Image1.ClientRect); rectangle(0,Image1.Height div 2,Image1.Width div 2,0); moveto(0,Image1.Height div 6); lineto(Image1.Width div 2,Image1.Height div 6); moveto(0,Image1.Height div 3); lineto(Image1.Width div 2,Image1.Height div 3); end; end; |
#11
|
||||
|
||||
![]() Так. Расставим все по местам.
Если нужно, чтобы флаг ездил по форме - то надо чистить и рисовать флаг. Если это делать через TImage - то нужно один раз (например при старте формы) нарисовать на TImage картинку и двигать TImage. Чистить ничего не надо. Если нужно, чтобы флаг ездил по экрану - то нужно один раз (например при старте формы) нарисовать на TImage картинку, и потом двигать форму. Чистить ничего не надо. Это три разных случая. Если второй или третий, то надо взять код, приведенный мной выше, и везде X и Y заменить на 0. Это будет отрисовка флага на TImage. Если третий случай, то по событию таймера (которое создается двойным кликом на компоненте TTimer) написать код для перемещения формы. jmp $ ; Happy End! The Cake Is A Lie. |
#12
|
||||
|
||||
![]() я на самом деле думала так: взяла просто растянула форму до размеров экрана, на неё во весь её размер поместила Image1 и планировала нарисовать на кусочке от Image1 флаг, а потом каким-то образом, который я ещё не до конца осмыслила, с помощью application.processmessages заставить этот кусочек двигаться по Image, как раз выглядело бы как-будто он по периметру экрана
|
#13
|
||||
|
||||
![]() То есть флаг должен двигаться по форме. То, что вы описываете - первый случай.
На самом деле второй на мой взгляд проще в данном случае. Image и так является "кусочком" изображения на форме. Его не зачем растягивать на всё, лучше сделать по размерам флага. Тогда надо двигать TImage. Код:
image1.left:=image1.left+2; image1.top:=image1.top+2; Это по диагонали. По периметру наверно как-то так (за работоспособность не ручаюсь, пол второго ночи на дворе ![]() Код:
var vectX:integer=1; vectY:integer=0; ... procedure TForm1.Timer1OnTimer(Sender:TObject) begin image1.left:=image1.left+2*vectX; image1.top:=image1.top+2*vectY; if image1.left + image1.width > ClientWidth then begin image1.left := ClientWidth - image1.width; vectX := 0; vectY := 1; end; if image1.top + image1.height > ClientHeight then begin image1.top := Clientheight - image1.height; vectX := -1; vectY := 0; end; if image1.left < 0 then begin image1.left := 0; vectX := 0; vectY := -1; end; if image1.top < 0 then begin image1.top := 0; vectX := 1; vectY := 0; end; end; 2*vectX: тут 2 - это шаг в пикселях. если надо быстрее - можно его увеличить. jmp $ ; Happy End! The Cake Is A Lie. |
#14
|
||||
|
||||
![]() то есть получается, мой флаг это картинка на Image1 и надо эту картинку просто двигать по всей Image, вот
|
#15
|
||||
|
||||
![]() нет. флаг - Image1. Его надо двигать по Form1. Image нету.
jmp $ ; Happy End! The Cake Is A Lie. |