Racket 球拍:如何防止图像从屏幕上消失而出现在另一面?

Racket 球拍:如何防止图像从屏幕上消失而出现在另一面?,racket,Racket,我目前正在制作一个游戏,你的角色必须躲避场景内外的物体 我的问题是,当对象离开场景时,它们不会在另一侧重新出现 每个对象都由posn结构表示,每次从左到右有记号时,它们都会在场景中移动一定距离,反之亦然。我已经附上了我认为需要编辑的代码部分 为了清楚起见,世界是一个包含鸡和车的struct,两者都是包含x和y posn的结构 MOVE-CAR是一个常量,设置为(add1(random 49)),它决定了在游戏过程中汽车的移动速度 ;update-world: world -> world

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

我的问题是,当对象离开场景时,它们不会在另一侧重新出现

每个对象都由posn结构表示,每次从左到右有记号时,它们都会在场景中移动一定距离,反之亦然。我已经附上了我认为需要编辑的代码部分

为了清楚起见,世界是一个包含鸡和车的
struct
,两者都是包含x和y posn的结构

MOVE-CAR是一个常量,设置为(add1(random 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)))
如果需要更多的代码,我将尝试筛选剩余的代码。
非常感谢您的帮助

要计算新的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]

你认为我们怎么可能在没有看到代码的情况下解决问题?你能不能根据我告诉你我的车应该向前开,但它不向前开来修理我的车?请发布您的代码,并解释其当前行为与期望的行为。如果可能/相关,使用示例数据。我们不是读心术的人,也看不到你的屏幕。很抱歉,我不熟悉堆栈溢出。为了清晰起见,我添加了一些代码。我从我的程序中添加了一些代码,我不确定您所说的与我所拥有的内容是否相符。如果需要的话,我会再粘贴一些我有的东西。这不会有帮助,因为他可能只想在屏幕的每一侧显示这两个部分。您需要创建图像副本并绘制两次。每一个都是单面的,并且正确地设置了x位置,使其看起来像是在折叠。@Ondrej我更改了我的答案-因为OP提供了一个代码片段。@soegaard非常感谢。
(define (move-horiz a-posn delta-x)
  (make-posn (adjust-x (+ delta-x (posn-x a-posn)))
             (posn-y a-posn)))