DrRacket 教程帮助在使用动画时使用多个图像

DrRacket tutorial help using multiple images in using animate

编程新手,但我正在学习 Racket 的教程,我正在尝试让火箭降落在着陆基地上。让火箭工作,但我想添加更多对象,如着陆基地。这是我拥有的:

; constants
(define width 100)
(define height 100)
(define background "sky blue")
(define mtscn (empty-scene width height background))
(define rocket.)
(define rocket-center-to-bottom
  (- height (/ (image-height rocket) 2)))
(define base.)
(define base-center-to-bottom
  (- height (/ (image-height rocket) 2)))

  ; functions
  (define (create-rocket-scene.v6 h)
    (cond
    [(<= h rocket-center-to-bottom)
  (place-image rocket 50 h mtscn)]
    [(> h rocket-center-to-bottom)
     (place-image rocket 50 rocket-center-to-bottom mtscn)]
    [(<= h base-center-to-bottom)
   (place-image base 50 h mtscn)]
    [(> h base-center-to-bottom)
     (place-image base 50 base-center-to-bottom mtscn)]))


(animate create-rocket-scene.v6)

基本上复制并粘贴了火箭代码,然后将火箭重命名为基地,然后制作了基地形象。它说它在工作,但基地没有出现。我希望基本图像保持在底部,而火箭从顶部到达底部所在的底部。感谢您的帮助

这是问题所在:

(cond
    [(<= h rocket-center-to-bottom) (place-image rocket 50 h mtscn)]
    [(> h rocket-center-to-bottom)  (place-image rocket 50 rocket-center-to-bottom mtscn)]
    [(<= h base-center-to-bottom)   (place-image base 50 h mtscn)]
    [(> h base-center-to-bottom)    (place-image base 50 base-center-to-bottom mtscn)])

A cond-表达式找到第一个为真的 "question", 并使用它附带的 "answer"。

如果(<= h rocket-center-to-bottom)为真,则使用第一个子句,并且 (place-image rocket 50 h mtscn) 被使用。这意味着永远不会达到您使用 base 的第三个子句。

相反,您需要将山景和基地都绘制到同一张图片上:

(place-image base 50 h 
  (place-image rocket 50 h mtscn))

这会将火箭放在山场景的顶部,然后是基地。

也就是说,你只需要cond中的两个子句:

(cond
    [(<= h rocket-center-to-bottom)     (place-image base 50 h 
                                          (place-image rocket 50 h mtscn))]
    [(> h rocket-center-to-bottom)      ...draw-both-here...])