0 / 0 / 0
Регистрация: 29.03.2018
Сообщений: 1
1
GraphABC

Перемещение тела в GraphABC по клику мыши

29.03.2018, 19:48. Показов 1197. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется персонаж, который перемещается по клику правой кнопки мыши. При постановки множества целей, куда должен пройти персонаж, он идет последовательно (повторное нажатие правой кнопки мыши не прерывает его ход). Нужно чтобы персонаж при повторном клике шел на новый пункт назначения, а не последовательно на старый и потом уже на новый пункт.
Код ниже.
Кликните здесь для просмотра всего текста
Pascal
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
uses graphabc, abcobjects, events;
 
var
  /// координаты персонажа
  cx, cy: integer;
  /// координаты нажатия кнопки мыши
  mbx, mby: integer;
  /// тело гл. персонажа
  body: circleabc;
 
procedure characterProrisovka;
begin
  body.MoveTo(cx - trunc(windowheight / 20), cy - trunc(windowheight / 20));
end;
 
procedure MouseDown(mbx, mby, mb: integer);
begin
  MoveTo(mbx, mby);
  if mb = 2 then 
  begin
    /// перемещение по диагоналям
    if (mbx > cx) and (mby > cy) then while (mbx - trunc(windowheight / 49) > cx) and (mby - trunc(windowheight / 49) > cy) do begin sleep(22);cx += trunc(windowheight / 50);cy += trunc(windowheight / 50);characterProrisovka; end;
    if (mbx > cx) and (mby < cy) then while (mbx - trunc(windowheight / 49) > cx) and (mby + trunc(windowheight / 49) < cy) do begin sleep(22);cx += trunc(windowheight / 50);cy -= trunc(windowheight / 50);characterProrisovka; end;
    if (mbx < cx) and (mby > cy) then while (mbx + trunc(windowheight / 49) < cx) and (mby - trunc(windowheight / 49) > cy) do begin sleep(22);cx -= trunc(windowheight / 50);cy += trunc(windowheight / 50);characterProrisovka; end;
    if (mbx < cx) and (mby < cy) then while (mbx + trunc(windowheight / 49) < cx) and (mby + trunc(windowheight / 49) < cy) do begin sleep(22);cx -= trunc(windowheight / 50);cy -= trunc(windowheight / 50);characterProrisovka; end;
    
    /// перемещение по горизонтали и вертикали соответственно
    if (mbx > cx) then while (mbx - trunc(windowheight / 49) > cx) do begin sleep(22);cx += trunc(windowheight / 50);characterProrisovka; end;
    if (mbx < cx) then while (mbx + trunc(windowheight / 49) < cx) do begin sleep(22);cx -= trunc(windowheight / 50);characterProrisovka; end;
    if (mby > cy) then while (mby - trunc(windowheight / 49) > cy) do begin sleep(22);cy += trunc(windowheight / 50);characterProrisovka; end;
    if (mby < cy) then while (mby + trunc(windowheight / 49) < cy) do begin sleep(22);cy -= trunc(windowheight / 50);characterProrisovka; end;
  end;
end;
 
begin
  cx := 500;
  cy := 500;
  window.SetSize(1000,700);
  window.CenterOnScreen;
  body := new CircleABC(cx, cy, 30, clgreen);
  body.BorderWidth := 3;
  onmousedown := MouseDown;
end.

P.S. скорость перемещения персонажа завязано на высоту окна
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.03.2018, 19:48
Ответы с готовыми решениями:

Как сделать перемещение формы по клику левой кнопки мыши на задний фон приложения?
Как сделать перемещение формы по клику левой кнопки мыши на задний фон приложения? Пример изложен...

Перемещение пера в GraphABC
Здравствуйте. У меня задача нарисовать деталь в виде кольца с отверстиями. Центры всех отверстий...

Перемещение картинки в GraphABC
Кто знает как в GraphABC переместить картинку(чтоб было видно как она перемещаеться), по отрезку из...

Событие мыши: перемещение мыши при нажатой левой клавиши
Подскажите, пожалуйста как реализовать следующее: При перемещении мыши при нажатой левой клавише...

1
5056 / 2630 / 2345
Регистрация: 10.12.2014
Сообщений: 9,993
30.03.2018, 06:51 2
Pascal
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
uses GraphABC, Timers;
 
type
  tAnime = class
    x, y : Real; /// Координаты центра и радиус, а так же размер шага при движении
    r, stepSize : Integer; /// Радиус и размер шага при движении
    nx, ny : Real; /// Координаты, к которым движемся
    dx, dy : Real; /// Приращение, на которое изменяются координаты при каждом шаге
    toGo : Integer; /// Количество оставшихся шагов 
    bw : Integer; /// Толщина границы
    clr, bclr : Color; /// Цвет заполнения и границы
    
    constructor (x_, y_, r_, s_, bw_ : Integer; clr_, bclr_ : Color);
    begin
      x := x_; y := y_; r := r_; stepSize := s_; bw := bw_; clr := clr_; bclr := bclr_;
    end;
    
    procedure Show;
    begin
      Pen.Color := bclr; Pen.Width := bw; Brush.Color := clr;
      Circle(Round(x), Round(y), r);
    end;
    
    procedure MoveTo(x_, y_ : Integer);
    begin
      nx := x_; ny := y_;
      var steps := sqrt((x-nx)*(x-nx)+(y-ny)*(y-ny))/stepSize;
      (dx,dy,toGo) := ((nx-x)/steps,(ny-y)/steps,Trunc(steps));
    end;
    
    procedure Move;
    begin
      if abs(x-nx) + abs(y-ny) = 0 then Exit; // Уже пришли
      toGo -= 1;
      if toGo = 0 then // Последний шаг. Просто становимся в координаты цели.
        (x,y) := (nx,ny)
      else
        (x,y) := (x+dx,y+dy);
    end;
  end;
 
var
  body : tAnime;
  
procedure tickTimer;
begin
  Window.Clear;
  body.Move;
  body.Show;
  Redraw;
end;
 
procedure MouseDown(x, y, m : integer);
begin
  body.MoveTo(x, y);
end;
 
var
  timer := new Timer(5, tickTimer);
 
begin
  window.SetSize(1000,700);
  window.CenterOnScreen;
  LockDrawing;
 
  OnMouseDown := MouseDown;
 
  body := new tAnime(500, 500, 30, 7, 2, clGreen, clDarkGreen);
 
  timer.Enabled := True;
end.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.03.2018, 06:51
Помогаю со студенческими работами здесь

Перемещение на клик мыши и поворот за курсором мыши
Как сделать чтобы смешарик шёл на клик мыши и поворачивался в сторону курсора? Можете дать скрипт?

Почему при нажатии кнопки мыши происходит событие "перемещение мыши"?
Просто нажал на левую кнопку мыши и сразу же отпустил. А сам указатель мыши находится на месте...

Перемещение иконки по клику
как переместить иконку по клику? package com.example.jjj; import...

Положение мыши по клику...
Пожалуйста напишите метод, который по нажатию мыши записывает в координаты положение (х,у) или...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru