Это моя программаПочему НЛО не касается плоской скалы внизу сцены? Почему это останавливается раньше?
; constants
(define SCENE-WIDTH 200)
(define SCENE-HEIGHT 200)
(define BGR-COLOR "blue")
(define FLAT-ROCKBED (rectangle 100 10 "solid" "black"))
(define MTSCN (place-image FLAT-ROCKBED
(/ SCENE-WIDTH 2) SCENE-HEIGHT
(empty-scene SCENE-WIDTH SCENE-HEIGHT BGR-COLOR)))
[define UFO
[overlay [circle 10 "solid" "green"]
[rectangle 40 4 "solid" "green"]]]
(define X-POS (/ SCENE-WIDTH 2))
(define UFO-PADDING
(- SCENE-HEIGHT
(/ (image-height UFO) 2)
(image-height FLAT-ROCKBED)))
; functions
[define [ufo-landing height]
[cond
[[<= height UFO-PADDING]
(place-image UFO X-POS height MTSCN)]
[[> height UFO-PADDING]
(place-image UFO X-POS UFO-PADDING MTSCN)]]]
Это из первой главы How to Design Programs, 2nd Edition.
Когда я вызываю функцию (animate ufo-landing)
в области взаимодействий это выход я получаю
НЛО не касаются планшета рока. Как это сделать?
Редактировать 1: По оси ординат для размещения UFO
на сцене, зависит от двух факторов.
- Высота
FLATBED-ROCK
, над которым он должен приземлиться так, чтобыUFO
только касается ее поверхности. - Центр
UFO
; его размещение занимает 10 пикселей выше и ниже его центральной координаты, так как его высота равна 20 px.
В UFO-PADDING
постоянные счета для двух факторов, которые я описал выше, и используется для размещения UFO
на сцене. Таким образом, я ожидаю, что НЛО остановится, когда он едва коснется поверхности FLATBED-ROCK
. Но это не так! Есть ли другой фактор, который влияет на ординату UFO
? Что мне не хватает?
Спасибо, у меня нет доступа к ПК прямо сейчас. Завтра я попробую ваш совет и сообщит. –
Правильно. Это сработало. Благодаря! –
Я выбрал ваш ответ как правильный, потому что он сработал. Однако я не понимал, почему это сработало. Но так как это работало против моих расчетов, я был уверен, что что-то я неправильно сформулировал. И я нашел это - при определении MTSCN я должен был компенсировать размещение FLAT-ROCKBED, но я этого не сделал. Это был главный виновник. Спасибо в любом случае! –