Самый простой способ исправить логику столкновения - это рассмотреть вопросы:
- Могу ли я подняться?
- Можно ли спуститься вниз?
- Могу ли я двигаться влево?
- Могу ли я двигаться правильно?
, а не вопрос «Я в столкновении со стеной?»
Вы отвечаете на эти вопросы, сравнивая свою позицию после перемещения с пределом, установленным стеной.
Пример кода (будьте добры ... Я не писал VB6 за последние 10 лет; -)
Public Function CanMoveLeft(Shape1 As ShockwaveFlash, Shape2 As Shape) As Boolean
If (Shape1.Left + Shape1.Width) > Shape2.Right)
Then
CanMoveLeft = True
Else
CanMoveLeft = False
End If
End Function
В этом примере предполагается, что вы уже применили предложенную новую позицию к Shape1
. Если вы предпочитаете, вы можете передать неподвижное значение Shape1
вместе с левой скоростью и соответствующим образом изменить расчет. Я думаю, что вы, вероятно, хотите сравнить левый край фигуры с правым краем стены, а не с левым краем стены в вашем примере кода.
Обратите внимание, что если ваша позиция после перемещения поместит вас в стену, вам нужно настроить фактическое положение так, чтобы оно находилось прямо внутри комнаты (если вы перемещаетесь более чем на один пиксель за кадр, ваша скорость может текущее положение внутри или за стеной).