lamer's question

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Reht
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 25.10.2005 (Вт) 14:02

lamer's question

Сообщение Reht » 07.03.2006 (Вт) 17:08

Совершенно-ламерский-вопрос.
Нужно, чтобы объект двигался из точки A в точку B.
Моего интеллекта хватило лишь на:

Код: Выделить всё
If .X > B.X then
.X=.X-1
Elseif .X < B.X then
.X=.X+1
End if

If .Y > B.Y then
.Y=.Y-1
Elseif .X < B.Y then
.Y=.Y+1
End if


Но двигается он неестественно, примерно вот так:
Изображение

Нужно, чтобы передвигался он по прямой.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.03.2006 (Вт) 17:19

Уравнение прямой, заданной двумя точками -
(y - y1)/(y2-y1) = (x-x1)/(x2-x1)

Подставляешь текущий x (который меняется от x1 до x2). Находишь соотв. y.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 07.03.2006 (Вт) 17:37

Или, в другом виде, измеряешь расстояние до точки по X и по Y (DX и DY), выбираешь, за сколько "шагов" (N) объект добереться до точки и изменяешь координаты X=X0+DX/N, Y=Y0+DY/N. Способ удобнее тем, что не придется решать частные случаи (когда уравнение прямой вертикально и будет деление на ноль).
Lasciate ogni speranza, voi ch'entrate.

Reht
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 25.10.2005 (Вт) 14:02

Сообщение Reht » 07.03.2006 (Вт) 17:54

благодарю :)

Reht
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 25.10.2005 (Вт) 14:02

Сообщение Reht » 07.03.2006 (Вт) 20:53

Всё равно не так:
Изображение
=(
Может, в программе что не то?
Код: Выделить всё
Dim SX, SY As Integer 'SX=StartX, SY=StartY
Dim TX, TY As Integer 'TX=TargetX TY=TargetY
Dim CX, CY As Integer 'CY=CurY CX=CurX
Dim N As Integer


Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

SX = 500
SY = 500
CX = 500
CY = 500
TX = X
TY = Y
N = 250
Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
If SX < TX Then
If Not CX > TX Then CX = CX + TX / N
Else
If Not CX < TX Then CX = CX - TX / N
End If

If SY < TY Then
If Not CY > TY Then CY = CY + TY / N
Else
If Not CY < TY Then CY = CY - TY / N
End If


Picture1.Picture = Picture1.Image
Picture1.Cls
Picture1.ForeColor = vbWhite
Picture1.PSet (TX, TY)
Picture1.PSet (SX, SY)
Picture1.ForeColor = vbGreen
Picture1.PSet (CX, CY)

End Sub

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.03.2006 (Вт) 21:20

У меня этот код вообще никак не работает.
Плз давай тестовую форму целиком, с инструкцией по использованию :-)
Изображение

Reht
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 25.10.2005 (Вт) 14:02

Сообщение Reht » 07.03.2006 (Вт) 21:34

объекты:
Form1(H=3600, W=4800)
Picture1(BackColor=&H00000000&, AutoRedraw=True, H=2415, W=3855)
Timer1(Interval=1, Enabled=False)

Чтобы это заработало, нужно кликнуть по Picture =)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.03.2006 (Вт) 21:44

Ну, принимай:

Код: Выделить всё
Dim SX, SY As Integer 'SX=StartX, SY=StartY
Dim TX, TY As Integer 'TX=TargetX TY=TargetY
Dim CX, CY As Integer 'CY=CurY CX=CurX
Dim N As Integer, C As Integer


Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

SX = 500
SY = 500
CX = 500
CY = 500
TX = X
TY = Y
N = 250: C = 0
Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()

CX = CX + (TX - SX) / N
CY = CY + (TY - SY) / N
C = C + 1: If C = N Then Timer1.Enabled = False

Picture1.Picture = Picture1.Image
Picture1.Cls
Picture1.ForeColor = vbWhite
Picture1.PSet (TX, TY)
Picture1.PSet (SX, SY)
Picture1.ForeColor = vbGreen
Picture1.PSet (CX, CY)

End Sub
Изображение

Reht
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 25.10.2005 (Вт) 14:02

Сообщение Reht » 07.03.2006 (Вт) 22:13

Огромное спасибо! :salut:


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 88

    TopList