Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
-18 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 210

Какнарисовать линию по мышке определенной длины делаю выстрел!

25.09.2023, 17:48. Показов 761. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как то работает но неточно линии рисуются не прям точно по мышке а криво если форму перенести из Twips в пиксели то вообще не работает
делаю сервер для игры который рисует выстрел и проверяет попадание поэтому нужен данный код! В математике я 0!

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
 
 
X1 = 1000 'Начальная точка X
Y1 = 1000 'Начальная точка Y
Length = 2000 'Длина Линии
 
 
mangle = (Y / X) 'ВЫчисляем Угол мыши
 
X2 = X1 + Cos(mangle) * Length
Y2 = Y1 + Sin(mangle) * Length
 
Line (X1, Y1)-(X2, Y2), vbBlue
 
End Sub
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.09.2023, 17:48
Ответы с готовыми решениями:

Скопировать часть строки с определенной позиции и определенной длины в другую строку
Ввести с клавиатуры строку. Скопировать часть строки с определенной позиции и определенной длины в другую строку. Номер позиции и...

Console.Writeline - вывод строки определенной до определенной длины спереходом на новую строку
Добрый день. Существуют разные флаги для Console.Writeline. Например вот такой способ: Console.Write("{0,8}",...

Строка: Скопировать часть строки с определенной позиции и определенной длины в другую строку
Скопировать часть строки с определенной позиции и определенной длины в другую строку. Например: дана строка "Функция для работы со...

12
 Аватар для Storm Screamer
4838 / 1405 / 115
Регистрация: 21.04.2013
Сообщений: 8,564
25.09.2023, 18:07
Цитата Сообщение от Rad0n Посмотреть сообщение
делаю сервер для игры который рисует выстрел
Почему сервер занимается рисованием выстрела?
0
-18 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 210
25.09.2023, 19:28  [ТС]
Потому что данные хранятся на сервере чтобы не работали читы просчет на сервере! Я сделал сервер и проверку попаданий линиями! Теперь надо нарисовать угол выстрела и отправить на сервер сервер рисует по углу рисует линию и проверяет попадание вот и все! Сервер не рисует сервер проверяет! Если что
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
25.09.2023, 19:30
Лучший ответ Сообщение было отмечено Rad0n как решение

Решение

Здесь вообще углы не нужны:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim x1 As Long, y1 As Long, Length As Long
    Dim x2 As Long, y2 As Long, l As Long
    
    x1 = 1000 'Начальная точка X
    y1 = 1000 'Начальная точка Y
    Length = 200 'Длина Линии
    
    x2 = X - x1:  y2 = Y - y1 ' Вектор направления
    
    l = Sqr(x2 * x2 + y2 * y2)  ' Длина вектора
    
    x2 = x2 / l * Length + x1   ' Новые координаты
    y2 = y2 / l * Length + y1
    
    Cls
    Line (x1, y1)-(x2, y2), vbBlue
    
    
End Sub
2
-18 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 210
25.09.2023, 19:36  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Здесь вообще углы не нужны:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim x1 As Long, y1 As Long, Length As Long
    Dim x2 As Long, y2 As Long, l As Long
    
    x1 = 1000 'Начальная точка X
    y1 = 1000 'Начальная точка Y
    Length = 200 'Длина Линии
    
    x2 = X - x1:  y2 = Y - y1 ' Вектор направления
    
    l = Sqr(x2 * x2 + y2 * y2)  ' Длина вектора
    
    x2 = x2 / l * Length + x1   ' Новые координаты
    y2 = y2 / l * Length + y1
    
    Cls
    Line (x1, y1)-(x2, y2), vbBlue
    
    
End Sub
Спасибо большое! буду разбираться! Получается мне только надо координаты мыши отправить с клиента игры ? Куда их вставить ! В этом коде!
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 Dim x1 As Long, y1 As Long, Length As Long
    Dim x2 As Long, y2 As Long, l As Long
    
    x1 = 100 'Начальная точка X
    y1 = 100 'Начальная точка Y
    Length = 200 'Длина Линии
    
    x2 = X - x1:  y2 = Y - y1 ' Вектор направления
    
    l = Sqr(x2 * x2 + y2 * y2)  ' Длина вектора
    
    x2 = x2 / l * Length + X   ' Новые координаты
    y2 = y2 / l * Length + Y
    
    Cls
    Line (x1, y1)-(x2, y2), vbBlue
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
25.09.2023, 19:44
Угол в каких пределах? Вообще для таких целей юзают Atan2. Если угол от 0 до PI то можно через вектора также определить. Скалярное произведение это произведение длин на угол между ними.
1
-18 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 210
25.09.2023, 19:54  [ТС]
Да вот думаю как лучше сделать ? Отправлять углы мышкой направлени выстрела т.е или лучше твой код на клиенте тоже продублировать ? Килент игры там язык lua движок другой либо в градусах отправлять от 0 до 270 либо как ты показал как правильнее ? Мне из игры координаты из игры? куда вставить не пойму в этот код!? У меня на сервере фиксированная длина линии должна быть! От клиента лишь координаты мыши чтобы вычислить угол выстрела! Не пойму куда вставить в твой код координаты мыши нового угла!
Заменил на мышь! Уже неправильно работает
X = x2 / l * Length + x1 ' Íîâûå êîîðäèíàòû
Y = y2 / l * Length + y1
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
25.09.2023, 19:55
Rad0n, да как тебе удобней. Я бы отправлял просто вектор. Я хз как там у тебя по итогу сделано.
0
-18 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 210
25.09.2023, 20:07  [ТС]
Вот вектор рисуется почти так же как в ВБ но по твоему коду надо его дублировать а сервер точку откуда рисовать сам то выбираеет и длину
рисуется таким кодом линия
mx - Координаты мыши X
my - Координаты мыши Y
X1 - начальная координаты рисования X линии
Y1 - начальная координаты рисования Y линии
love.graphics.line(X1, Y1 ,mx ,my )
Вот мне по сути надо ОТправить ЛИШЬ MX,MY а сервер уже нарисует по новым данным твоему коду линию но при это с фиксированной линией поэтому мне нужно лишь вектор! А не всю линию чтоб читы не работали
Только не спрашивай почему сервер на VB просто хочется и привычнее
Миниатюры
Какнарисовать линию по мышке определенной длины делаю выстрел!  
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
25.09.2023, 20:12
Rad0n, извини я не понимаю что ты хочешь от меня. Тут элементарная школьная геометрия.
1
-18 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 210
25.09.2023, 20:21  [ТС]
Кажись я думаю Надо подставить данные мыши из игры вот вместо X Y
Спасибо большое Трик отпишусь надеюсь получится! Но в принципе то что мне нужно!
А как ковертировать координаты мыши в угол от изначальной точки например X1 = 100, Y = 100,? От -90 до 270 ? чтобы именно при движение мыши писал текущий угол сколько текущий угол 90 250 итд рисуя линию
x2 = X - x1: y2 = Y - y1
0
-18 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 210
26.09.2023, 10:30  [ТС]
The trick, Трик скажи пожалуйста а как можно теперь двигать эту линию по на правляению угла типо выстрел линией ?
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim x1 As Long, y1 As Long, Length As Long
    Dim x2 As Long, y2 As Long, l As Long
    
    x1 = 1000 'Начальная точка X
    y1 = 1000 'Начальная точка Y
    Length = 200 'Длина Линии
    
    x2 = X - x1:  y2 = Y - y1 ' Вектор направления
    
    l = Sqr(x2 * x2 + y2 * y2)  ' Длина вектора
    
    x2 = x2 / l * Length + x1   ' Новые координаты
    y2 = y2 / l * Length + y1
    
    Cls
    Line (x1, y1)-(x2, y2), vbBlue
    
    
End Sub
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
27.09.2023, 00:58
Лучший ответ Сообщение было отмечено Rad0n как решение

Решение

На форме таймер Enabled = False:
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
Option Explicit
 
Private m_lDstX As Long
Private m_lDstY As Long
Private m_lDist As Long
 
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    
    Timer1.Enabled = True
    m_lDstX = X
    m_lDstY = Y
    m_lDist = 0
    
End Sub
 
Private Sub Timer1_Timer()
    Dim x1 As Long, y1 As Long
    Dim x2 As Long, y2 As Long, l As Long
    
    x1 = 1000
    y1 = 1000
 
    x2 = m_lDstX - x1:  y2 = m_lDstY - y1
    
    l = Sqr(x2 * x2 + y2 * y2)
    
    x2 = x2 / l * m_lDist + x1
    y2 = y2 / l * m_lDist + y1
    
    Cls
    Line (x1, y1)-(x2, y2), vbBlue
    
    
    m_lDist = m_lDist + 300
    
End Sub
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.09.2023, 00:58
Помогаю со студенческими работами здесь

Как на диаграмме отрисовать линию от определённой точки?
Здравствуйте. Никто не подскажет, как на диаграмме отрисовать линию от определённой точки? То есть не от точки 1, а от точки 2 и от точки 3.

Построить из знаков '-' линию заданной длины
Напишите программу, которая строит "линию" из знаков '-' заданной длины. Используйте процедуру. Входные данные Входная строка...

Нарисовать горизонтальную линию из звездочек заданной длины
3.ф-я которая принимает кол-во звездочек и рисует горизонтальную линию из звездоек заданной длинны

Как сделать линию по всей длины перед текстом?
Нужно сделать нижнее подчеркивание перед тегом H1. <h1>Название</h1> Как на фото. на фото линия является картинкой. Как написать это с...

Как вписать в PictureBox линию в 2 раза большей длины?
Всем доброго времени суток. У меня 2048 значений (точек), из которых нужно нарисовать линию (DrawLines). Размер экрана 1024х768. ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru