如何放置两个具有自己坐标的对象
(define padle1 (rectangle 10 30 "solid" "red"))
(define padle2 (rectangle 10 30 "solid" "red"))
(define (place-dot-at ... ) ...)
进入bin-bang函数
(big-bang ...
[to-draw place-dot-at])
我可以使用padles列表
(define new-list (list padle1 padle2))
答案 0 :(得分:1)
big-bang
仅存储一条信息,通常称为“世界状态”。与big-bang
一起使用的所有函数,如绘图函数,tick函数等,必须将该世界状态作为单个参数接受。
由您来决定在您的世界状态中存储什么。如果要存储两个位置(每个桨位一个),则可以使用列表或结构。例如,以下是如何定义一个名为world
的结构,它可以同时保存两个位置。
; Create a type called `world` that holds two locations.
(define-struct world [paddle1 paddle2])
; Create a variable to store the initial state of the world.
(define initial-world (make-world (make-posn 0 100) (make-posn 300 100)))
当您编写绘图功能时,它必须立即接受整个世界状态:
(define (draw-game world)
(place-image
paddle1
(posn-x (world-paddle1 world))
(posn-y (world-paddle1 world))
(place-image
paddle2
(posn-x (world-paddle2 world))
(posn-y (world-paddle2 world))
BACKGROUND)))
在big-bang
中,将世界状态视为任何其他类型的数据:
(big-bang
initial-world
[to-draw draw-game])
答案 1 :(得分:0)
我建议制作一个draw-paddle
功能,在图像i
上方绘制单个球拍。
(define (draw-paddle p i)
(overlay/xy (rectangle ...) ; the paddle
50 70 ; coordinates on paddle on screen
i)) ; image of what's previously drawn
然后创建一个函数,在图像i
顶部的列表中绘制所有拨片。
(define (draw-paddles ps i)
(cond
[(empty? ps) i] ; no more paddles to draw
[else (draw-paddles
(rest ps) ; draw the rest of the paddles on top
(draw-paddle (first p) i))])) ; of the first paddle
; ontop of i
最后你可以做到:
(define (on-draw state)
(draw-paddles (list paddle1 paddle2) my-background))
如果您没有背景,可以使用empty-image
或rectangle
制作背景。