Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/32: Рейтинг темы: голосов - 32, средняя оценка - 4.84
2 / 2 / 0
Регистрация: 23.04.2010
Сообщений: 155
1

Движение квадрата по диагонали. (canvas)

26.12.2011, 12:50. Показов 6133. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Посмотрите пожалуйста. Не подскажете Как тут движение по диагонали сделать мне?)) туда и обратно
Вложения
Тип файла: rar Projects.rar (160.2 Кб, 104 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.12.2011, 12:50
Ответы с готовыми решениями:

Рисование квадрата, работа на canvas
Рисование квадрата, работа на canvas Создать приложение, позволяющее: 1) рисовать квадрат в...

Анимация движения изображения квадрата по графику на Canvas
Нужна помощь...в создании как бы анимации с помощью Сanvas, которая будет идти по траектории...

Движение квадрата.
Помогите пожалуйста с задачкой. Составить программу для построения на экране...

Движение квадрата
Помогите пожалуйста надо нарисовать в делфи квадрат , чтоб он двигался во все 4 стороны с помощью...

11
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
26.12.2011, 13:10 2
я же проект на днях выкладывал
1
2 / 2 / 0
Регистрация: 23.04.2010
Сообщений: 155
26.12.2011, 13:18  [ТС] 3
Цитата Сообщение от Arcor Посмотреть сообщение
я же проект на днях выкладывал
не прокатило((( с помощью canvas надо делать. Вот тут я его нарисовал, осталось одно, чтоб двигался этот квадрат...
0
2184 / 1254 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
26.12.2011, 14:24 4
Delphi
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls,math, StdCtrls;
 
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormPaint(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure Timer1Timer(Sender: TObject);
    function Dotr(x1,y1,x2,y2:integer): real;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  n,dl:Integer;
  x1,x2,y1,y2:Integer;
 
implementation
 
{$R *.dfm}
 
function TForm1.Dotr(x1,y1,x2,y2:integer): real;  //возвращает длинну отрезка
begin
result:=sqrt(sqr(x2-x1)+sqr(y2-y1));
end;
 
procedure TForm1.FormPaint(Sender: TObject);
begin
  Canvas.MoveTo(0,0);
  Canvas.LineTo(ClientWidth,ClientHeight);
   Canvas.Pen.Color:=clBlack;
   Canvas.Brush.Color:=clBlack;
   Canvas.Rectangle(x1,y1,x2,y2);
end;
 
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
    if Key=#13 then
    begin
      if n=0 then
        begin
          Canvas.Rectangle(x1,y1,x2,y2);
          Canvas.Pen.Color:=clRed;
          Canvas.Brush.Color:=clRed;
          n:=1;
        end
      else
        begin
          Canvas.Rectangle(x1,y1,x2,y2);
          Canvas.Pen.Color:=clBlack;
          Canvas.Brush.Color:=clBlack;
          n:=0;
        end;
    end;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
var ugol:real;
begin
ugol:=ArcCos((sqr(ClientWidth)+sqr(Dotr(0,0,ClientHeight,ClientWidth))-sqr(ClientHeight))/(2*Dotr(0,0,ClientHeight,ClientWidth)*ClientWidth));
x1:=round(dl*cos(ugol));
y1:=round(dl*sin(ugol));
x2:=x1+100;
y2:=y1+100;
inc(dl,5);
Repaint;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
   x1:=0; x2:=100;
   y1:=0; y2:=100;
end;
 
end.
1
2 / 2 / 0
Регистрация: 23.04.2010
Сообщений: 155
26.12.2011, 16:59  [ТС] 5
anonimus, Спасибо.. А чтоб она и обратно двигалась как сделать? чтоб не прекращала движение
0
2184 / 1254 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
26.12.2011, 17:01 6
аналогично, пример есть, раскинь чуть мозгами
1
2 / 2 / 0
Регистрация: 23.04.2010
Сообщений: 155
26.12.2011, 17:41  [ТС] 7
че то не получается у меня((
0
2 / 2 / 0
Регистрация: 23.04.2010
Сообщений: 155
27.12.2011, 00:22  [ТС] 8
Цитата Сообщение от anonimus Посмотреть сообщение
аналогично, пример есть, раскинь чуть мозгами
Вот. Подскажи пожалуйста какая тут ошибка((( Достигает правый нижний угол, и соответственно меняет маршрут, идет обратно.. но потом когда достигнет левого верхнего угла, он обратно не хочет идти(((
Вложения
Тип файла: rar lb_6.rar (161.4 Кб, 83 просмотров)
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
27.12.2011, 00:43 9
держи, твой пример не заглядывал, разбираться не хочу в чужом коде, вот рабочий

Delphi
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Timer2: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
 
var
  Form1: TForm1;
  x,y: Integer;
  w, h: Integer;
  n: Integer;
  Col: TColor = clGreen;
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  w := 50;
  h := 50;
end;
 
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
    begin
      if n = 0 then
        begin
          Col := clRed;
           n := 1;
        end
      else
        begin
          Col := clGreen;
          n := 0;
        end;
    end;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Repaint;
  Canvas.Rectangle(x, y, x + w, y + h);
  Canvas.Pen.Color := Col;
  Canvas.Brush.Color := Col;
  x := x + 1;
  y := y + 1;
  if (x + w > ClientWidth) or (y + w > ClientHeight) then
    begin
      Timer1.Enabled := False;
      Timer2.Enabled := True;
    end;
end;
 
procedure TForm1.Timer2Timer(Sender: TObject);
begin
  Repaint;
  Canvas.Rectangle(x, y, x + w, y + h);
  Canvas.Pen.Color := Col;
  Canvas.Brush.Color := Col;
  x := x - 1;
  y := y - 1;
  if (x  <= 0) or (y <= 0) then
    begin
      Timer2.Enabled := False;
      Timer1.Enabled := True;
    end;
end;
 
end.
1
2 / 2 / 0
Регистрация: 23.04.2010
Сообщений: 155
27.12.2011, 00:52  [ТС] 10
Arcor, вот, отличный код. Спасибо большое. С меня что, что я должен?
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
27.12.2011, 00:58 11
Цитата Сообщение от Huligan799 Посмотреть сообщение
С меня что, что я должен?

Не по теме:

лязгинку :p


а что без шуток с тебя, учи дельфи
0
2184 / 1254 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
27.12.2011, 10:24 12
Huligan799, тебе надо что бы он по диогонале формы перемещался? т.е. от левого верхнего угла к правому нижнему, если так то пример Arcor не пойдет

Добавлено через 26 минут
Цитата Сообщение от Huligan799 Посмотреть сообщение
Подскажи пожалуйста какая тут ошибка
ошибка в логике, на кой ты второй таймер прикрутил, не ищешь легких путей ))
измени процедуру таймера таким образом
flag - это глобальная переменная типа boolean
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TForm1.Timer1Timer(Sender: TObject);
var
  ugol:real;
begin
  ugol:=ArcCos((sqr(ClientWidth)+sqr(Dotr(0,0,ClientHeight,ClientWidth))-sqr(ClientHeight))/(2*Dotr(0,0,ClientHeight,ClientWidth)*ClientWidth));
  if (x1+70>=ClientWidth)or(y1+70>=ClientHeight)then
    flag:=true;
  if (x1<=0)or(y1<=0)then
    flag:=false;
  x1:=round(dl*cos(ugol));
  y1:=round(dl*sin(ugol));
  x2:=x1+70;
  y2:=y1+70;
  if flag then
    dec(dl,5)
  else
    inc(dl,5);
 
  Repaint;
end;
0
27.12.2011, 10:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.12.2011, 10:24
Помогаю со студенческими работами здесь

Движение квадрата
Не получается реализовать движение квадрата при нажатии на кнопку. unit Unit1; interface ...

Нарисовать квадрат в Image1.Canvas (Сторону квадрата вводит пользователь)
Есть форма и внутри неё есть 1 кнопка (Нарисовать) и 1 SpinEdit (в него заносим сторону квадрата)....

delphi 7 движение квадрата
ребят помогите как сделать чтобы квадрат двигался из стороны в сторну? (напишите программу) у...

Движение Квадрата по Прямоугольнику
Добрый вечер! :) Помогите создать программу, демонстрирующую движение квадрата по прямоугольнику)


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru