球拍:如何防止图像离开屏幕出现在另一边?

时间:2018-05-09 20:20:15

标签: racket

我目前正在制作一款游戏,让你的角色必须避开场景内外的物体。

我的问题是,当物体离开现场时,它们不再出现在另一侧。

每个对象都由一个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)))

如果需要更多代码,我会尝试筛选剩余的代码。 任何帮助深表感谢。

1 个答案:

答案 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)))