Ракетка: Как сделать так, чтобы изображение не исчезло с экрана и не появилось на другой стороне? - PullRequest
0 голосов
/ 09 мая 2018

В настоящее время я делаю игру, в которой ваш персонаж должен уклоняться от объектов, происходящих и покидающих сцену.

Моя проблема в том, что когда объекты уходят со сцены, они не появляются с другой стороны.

Каждый объект представлен 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 голосов
/ 10 мая 2018

Для расчета новой позиции х вы в настоящее время используете:

(+ 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)))
...