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