Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.56/34: Рейтинг темы: голосов - 34, средняя оценка - 4.56
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 106

Как организовать движение объекта к цели

23.09.2014, 18:33. Показов 8978. Ответов 129
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем, Здравствуйте! Интересует такой вопрос. Как организовать движение объекта (обьект , двигается вперед, но может поворачивать на определенный угол и снова едет вперед) к цели С, из A в B цель передвинулась, я получил координаты из них стороны и углы треугольника (через аркосинус), полученного вершинами, начала , куда передвинулся обьект и целью, Дальше нужно организовать перемещение , вернее , надо как то проверять условия, чтобы обьект , через определённые промежутки времени, опять проверял направление и снова двигался к цели. Уже 3 дня бьюсь над этой задачей. Не знаю как организовать проверку и правильный поворот. То есть цель , сама должна поворачиваться, потом двигаться , проверять и так далее) Помогите пожалуйста!
Миниатюры
Как организовать движение объекта к цели  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.09.2014, 18:33
Ответы с готовыми решениями:

ИИ для игры - движение объекта к цели
подскажите пожалуйста код с помощью которого можно реализовать что бы ии (npc1) двигался не просто рандомно а к игроку (р)?

Как организовать движение объекта по координатам?
Добрый день,есть класс,описывающий движение машины,подскажите,как вывести движущуюся машину на экран,хотябы по прямой. Main: ...

Организовать движение объекта
Организовать движение объекта снизу вверх. При движении ракета должна оставлять дымовой след. внутри док картинка с которой будет работа....

129
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 106
24.09.2014, 14:28  [ТС]
Студворк — интернет-сервис помощи студентам
Апострофф, ну где ты? без тебя не разберусь(
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub Command1_Click()
F = Abs((ax - cX) * (By - cY) - (bx - cX) * (ay - cY)) / 2
If F Then
 
  Debug.Print "равно=" & F
Else
  Debug.Print "не такого трегуольника"
End If
End Sub
 
Private Sub Form_Load()
   ax = 81
   ay = 223
   bx = 264
   By = 299
   cX = 121
   cY = 389
 
 
End Sub
говорит нет такого треугольника , а как нет, если я построил)

Добавлено через 8 минут
The trick, да может, если зажать к примеру W и A

Добавлено через 22 секунды
Выяснить, существует ли треугольник с координатами вершин A(x1,y1), B(x2,y2), C(x3,y3), если да, то найти его площадь помогите разобраться, не пойму, там все кусочками.
0
 Аватар для Апострофф
9912 / 3934 / 743
Регистрация: 11.10.2011
Сообщений: 5,916
24.09.2014, 14:40
smsgeorge, используй OPTION EXPLICIT и объяви переменные (координаты) на уровне модуля (или глобально).
Сейчас Private Sub Command1_Click() не видит того, что вы задали в Private Sub Form_Load()
0
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 106
24.09.2014, 14:56  [ТС]
Апострофф, Что тут не так?
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Type Coor
   X As Double
   Y As Double
 End Type
 
 Function Get_3AngleSqr(a As Coor, b As Coor, c As Coor) As Double
 Get_3AngleSqr = ((a.X - b.X) * (a.Y + b.Y) + (b.X - c.X) * (b.Y + c.Y) + (c.X - a.X) * (c.Y + a.Y)) / 2
 End Function
 
 
Private Sub Command1_Click()
 
 
Get_3AngleSqr a(122,387), b(84,223), c(265,303)
End Sub
Добавлено через 30 секунд
Он ругается на Type Coor

Добавлено через 7 минут
скорее всего я такие тупые вопросы задаю, по vb6 но я только начал его изучать и не понимаю данный синтаксис до конца
0
 Аватар для Апострофф
9912 / 3934 / 743
Регистрация: 11.10.2011
Сообщений: 5,916
24.09.2014, 15:03
Клик по форме задает новое положение цели.
Вложения
Тип файла: zip Догонялка.zip (1.4 Кб, 9 просмотров)
0
 Аватар для Апострофф
9912 / 3934 / 743
Регистрация: 11.10.2011
Сообщений: 5,916
24.09.2014, 15:05
Цитата Сообщение от smsgeorge Посмотреть сообщение
Он ругается на Type Coor
Напишите PRIVATE Type Coor или объявите глобально в общем (отдельном) модуле.
0
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 106
24.09.2014, 15:08  [ТС]
Апострофф, теперь ругается что я не обьявил Function Get_3AngleSqr(a As Coor, b As Coor, c As Coor) As Double


Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Option Explicit
 
 
 
 Function Get_3AngleSqr(a As Coor, b As Coor, c As Coor) As Double
 
Get_3AngleSqr = ((a.X - c.X) * (b.Y - c.Y) - (b.X - c.X) * (a.Y - c.Y)) / 2
 
 End Function
 Private Type Coor
   X As Double
   Y As Double
 End Type
 
Private Sub Command1_Click()
 
Get_3AngleSqr a(122, 387), b(84, 223), c(265, 303)
End Sub
 Комментарий модератора 

Правила форума, пункт 4.9
Используйте тэги форматирования текста для удобства восприятия ваших сообщений другими пользователями.
0
24.09.2014, 15:14

Не по теме:

smsgeorge, может Вам для начала какой-нить учебник по VB почитать?

0
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 106
24.09.2014, 15:16  [ТС]
Апострофф, Догонялка.zip оказывается есть направление, как мне теперь перенести на мой проект(((
Добавлено через 1 минуту
Апострофф, у меня есть
С.Н.Лукин








для начинающих










Все права защищены
©
________________________________________ ______________________________


2001
0
 Аватар для Апострофф
9912 / 3934 / 743
Регистрация: 11.10.2011
Сообщений: 5,916
24.09.2014, 15:20
Visual Basic
1
2
3
4
5
Option Explicit
Private Type Coor 'объявляется вначале модуля до всех процедур и функций!!!
X As Double
Y As Double
End Type
Добавлено через 4 минуты
Цитата Сообщение от smsgeorge Посмотреть сообщение
как мне теперь перенести на мой проект
А кто, кроме вас, видел ваш проект?
Я совсем без понятия, что в нем творится...
0
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 106
24.09.2014, 15:22  [ТС]
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Option Explicit
 
 Private Type Coor
   X As Double
   Y As Double
 End Type
 
 
 Function Get_3AngleSqr(a As Coor, b As Coor, c As Coor) As Double
 
Get_3AngleSqr = ((a.X - c.X) * (b.Y - c.Y) - (b.X - c.X) * (a.Y - c.Y)) / 2
 
 End Function
 
Private Sub Command1_Click()
 
Get_3AngleSqr a(122, 387), b(84, 223), c(265, 303)
End Sub
Миниатюры
Как организовать движение объекта к цели  
0
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 106
24.09.2014, 15:23  [ТС]
Апострофф, если у вас есть скайп и хоть чуточку времени,я покажу, пожалуйста, уделите время! Смогу показать после 16 00-17 00.
 Комментарий модератора 
Правила форума, пункт 4.6. Обсуждение вопросов - только в теме на форуме. Приглашения к обсуждению еще где-либо (в том числе и с помощью системы личных сообщений) запрещены, за исключением коммерческих разделов.
0
 Аватар для Апострофф
9912 / 3934 / 743
Регистрация: 11.10.2011
Сообщений: 5,916
24.09.2014, 15:27
https://www.cyberforum.ru/announcement.php?a=3
Цитата Сообщение от Правило 4.13
Не стоит просить или предлагать выслать ответ в icq, e-mail и другие средства общения. Эта просьба все равно не будет выполнена, а сообщение будет отредактировано модератором.
2
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 106
24.09.2014, 15:36  [ТС]
Апострофф, Я и не прошу высылать ответ, а лишь связаться со мной, поможет ли этот метод, где есть курсор, направление которого я не знаю, а также цель, по пикселю их цвета я нахожу их координаты, поможет ли мне Догонялка .zip. в моем проекте. ?
Миниатюры
Как организовать движение объекта к цели  
0
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 106
24.09.2014, 15:49  [ТС]
Апострофф, до сих пор не могу понять в чем дело( Мне больше не код дял VB нужен, вс равно не в нем писать буду, а реализация его. Да я может тупой и не знаю пока VB, но зачем тыкать пальцами, все когда с чего то начинали(
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Option Explicit
 
 Private Type Coor
   X As Double
   Y As Double
 End Type
 Dim B As Coor, C As Coor, V As Coor, Pi As Single, A As Single
 
 
 Function Get_3AngleSqr(A As Coor, B As Coor, C As Coor) As Double
 
Get_3AngleSqr = ((A.X - C.X) * (B.Y - C.Y) - (B.X - C.X) * (A.Y - C.Y)) / 2
 
 End Function
 
Private Sub Command1_Click()
 
Get_3AngleSqr A.X(122), A.Y(387), B.X(84), B.Y(223), C.X(265), C.Y(303)
End Sub
0
 Аватар для Апострофф
9912 / 3934 / 743
Регистрация: 11.10.2011
Сообщений: 5,916
24.09.2014, 15:57
smsgeorge, не парься пока с типами, у меня они тоже что-то заклинили.
Замени все на простые переменные-
Visual Basic
1
2
3
4
5
6
7
Function Get_3AngleSqr(Ax#,ay#,bx#,by#,cx#,cy#) As Double
 Get_3AngleSqr = ((AX - CX) * (BY - CY) - (BX - CX) * (AY - CY)) / 2
End Function
 
Private Sub Command1_Click()
msgbox Get_3AngleSqr(122,387,84,223,265, 303)
End Sub
1
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
24.09.2014, 16:00
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Посмотри.
Visual Basic
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
Option Explicit
 
Private Type vec
    X As Single
    Y As Single
End Type
Private Type player
    p As vec        ' Позиция
    d As vec        ' Направление
End Type
 
Dim WithEvents tmr  As Timer
Dim dst             As vec
Dim src             As player
 
Private Const IncAngle  As Single = 3.14 / 180 * 5 ' Инкремент поворота в радианах
Private Const IncDist   As Single = 4              ' Инкремент расстояния в пикселях
 
Private Sub Form_Load()
    ScaleMode = vbPixels
    Set tmr = Me.Controls.Add("VB.Timer", "tmr")
    tmr.Interval = 32
    src.p.X = ScaleWidth / 2
    src.p.Y = ScaleHeight / 2
    src.d.X = 0
    src.d.Y = -1
End Sub
 
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    dst.X = X: dst.Y = Y
End Sub
 
Private Sub tmr_Timer()
    Dim ang As Single
    Dim siz As Single
    Dim vec As vec
    Dim dir As Single
    ' Находим вектор
    vec.X = dst.X - src.p.X
    vec.Y = dst.Y - src.p.Y
    ' Находим расстояние
    siz = Sqr(vec.X * vec.X + vec.Y * vec.Y)
    ' Если расстояние меньше инкремента то значит цель настигнута
    If siz < IncDist Then
        Caption = "Найден"
        Exit Sub
    Else: Caption = ""
    End If
    ' Норма
    vec.X = vec.X / siz: vec.Y = vec.Y / siz
    ' Косинус угла
    ang = vec.X * src.d.X + vec.Y * src.d.Y
    ' Определяем направление
    If (vec.X * src.d.Y - vec.Y * src.d.X) < 0 Then dir = IncAngle Else dir = -IncAngle
    ' Поворачиваем вектор
    vec = src.d
    src.d.X = vec.X * Cos(dir) - vec.Y * Sin(dir)
    src.d.Y = vec.X * Sin(dir) + vec.Y * Cos(dir)
    ' Если направление в одну стророну двигаем ( -45 Градусов)
    If ang > 0.707 Then
        src.p.X = src.p.X + src.d.X * IncDist
        src.p.Y = src.p.Y + src.d.Y * IncDist
    End If
    Draw
End Sub
 
Private Sub Draw()
    Cls
    Line (src.p.X, src.p.Y)-Step(src.d.X * 15, src.d.Y * 15)
    Circle (src.p.X, src.p.Y), 3
    Circle (dst.X, dst.Y), 3, vbRed
End Sub
1
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 106
24.09.2014, 16:08  [ТС]
У тебя движение происходит по координатам, я к сожалению так не могу , я могу лишь больше повернуться, меньше повернуться (поворот идет зажимание определенной клавиши, на определенное количество миллисекунд) и движение вперед к сожалению в программе ,в которой пишу там не, атангенса не аркосинуса, приходится открывать ехе файл сделанный мною в вб6, подставлять туда данные , потом программа их записывает в тхт файл, а моя программа берет от туда углы и стороны, но в ней есть косинус и синус. как мы можем связаться? У скайпа есть привязка к окну , я бы показал.


Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Timer1_Timer()
Dim f As Single
V.X = 20 * Cos(A)
Debug.Print V.X
V.Y = 20 * Sin(A)
Debug.Print V.X
f = (B.X - C.X) * (B.Y + V.Y - C.Y) - (B.X + V.X - C.X) * (B.Y - C.Y)
A = A + Sgn(f) / Pi / 5
B.X = B.X + V.X
B.Y = B.Y + V.Y
draw
End Sub
Добавлено через 2 минуты
The trick, классно! как только применить)
0
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 106
24.09.2014, 16:24  [ТС]
The trick, Как все, чем вы со мной поделились, использовать ? Помогите пожалуйста.
Миниатюры
Как организовать движение объекта к цели  
0
-1 / 0 / 0
Регистрация: 03.06.2011
Сообщений: 106
24.09.2014, 16:34  [ТС]
The trick, 2 дня буду только код разбирать(

Добавлено через 1 минуту
The trick, классно получилось, но ничего не понятно(
0
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
24.09.2014, 16:43
Грубо говоря в таймере жмешь кнопки. При повороте одни при движении другую.
У меня просто идёт инкремент угла там нажимаешь кнопки поворота в зависимости от направления. В условии ang >0.707 жмешь кнопку движения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.09.2014, 16:43

Организовать движение объекта по форме при нажатии на клавишу
Всем привет. Подскажите, пожалуйста, как правильно организовать движение объекта по форме при нажатии на клавишу. Уточню: при...

Как организовать движение по X и Y в центр?
Нужен не сам код. А именно алгоритм.

Как организовать движение новых PicrtureBox?
Всем привет! Создаю новые PictureBox, хочу, чтобы они сдвигались влево. Когда я помещаю функцию Draw в таймер, то происходит только...

Как организовать движение товаров склада?
Помогите, плиз, организовать движение товаров: пополнение склада, изъятие со склада (продажа)... В приложении то на что ума хватило, а...

Возможно ли сделать движение зрачков, реагирующее на движение какого-либо объекта
Вообщем благодаря модеру удалось разукрасить картинку,за что ему спасибо. Нужна анимация для нее. Возможно ли сделать движение...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru