我目前正在制作一款游戏,让你的角色必须避开场景内外的物体。
我的问题是,当物体离开现场时,它们不再出现在另一侧。
每个对象都由一个posn结构表示,每次从左到右勾选时,它们会在场景上移动一定距离,反之亦然。我已经附上了我认为需要编辑的代码部分。
为清楚起见,世界是一个包含鸡和汽车的struct
,两者都是包含x和y posns的结构。
MOVE-CAR是一个常数设置为(add1(随机49)),用于确定汽车在游戏过程中移动的速度或速度。
;update-world: world -> world
;purpose: updates the position of the car
(define (update-world a-world)
(make-world (world-chicken a-world) (move-horiz (world-car a-world) (* -1 MOVE-CAR))))
;move-horiz: posn number -> posn
;purpose: moves the posn left or right
(define (move-horiz a-posn delta-x)
(make-posn (+ delta-x (posn-x a-posn)) (posn-y a-posn)))
如果需要更多代码,我会尝试筛选剩余的代码。 任何帮助深表感谢。
答案 0 :(得分:1)
要计算新的x位置,您当前正在使用:
(+ delta-x (posn-x a-posn))
如果结果介于0和宽度之间,则会得到正确的结果。 如果结果大于宽度,则新x应为0。 如果结果小于0,那么新的x应该是宽度。
让我们编写一个函数adjust-x
来调整你计算的x位置:
(define WIDTH 100)
(define (adjust-x x)
(cond
[(and (<= 0 x) (<= x WIDTH)) x]
[(> x WIDTH) 0]
[(< x 0) WIDTH]
然后您可以将move-horiz
更改为:
(define (move-horiz a-posn delta-x)
(make-posn (adjust-x (+ delta-x (posn-x a-posn)))
(posn-y a-posn)))