К сожалению, ответ "зависит от обстоятельств". Код некоторых людей поддерживает положение объекта во внутренних x
и y
, используя rect
для обработки коллизий. Другой код просто поддерживает rect
, используя rect.x
и rect.y
, если (когда-либо) требуется одна позиция.
Это действительно ваше дело, но я советую хранить все это внутри PyGame Rect, так как он имеет преимущества легкого обнаружения столкновений, если вы используете sh, чтобы использовать его в дальнейшем.
class Alien:
def __init__( self, x, y, image ):
self.image = image
self.rect = image.get_rect() # copy the image dimensions
self.rect.x = x
self.rect.y = y # move to location
def draw( self, window ):
window.blit( self.image, self.rect ) # paint it
Когда пришло время переместить Alien
, вы можете так же легко настроить прямоугольник как x
и y
class Alien:
...
def moveBy( self, by_x, by_y ):
self.rect.move_ip( by_x, by_y )
def moveTo( self, x, y ):
self.rect.x = x
self.rect.y = y
Возможно, автор подумал, что наличие отдельных x
и y
упростило понимание кода. Это первостепенная причина, влияющая на стиль программирования. Программный код читается во много раз чаще, чем написан, поэтому часто добавляются дополнительные переменные, чтобы лучше проиллюстрировать выполнение программы.
Например, как проверка события щелчка мыши:
for event in pygame.event.get( ):
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONUP:
handleGameClick( mouse2Board( event.pos ) ) # <-- HERE
Добавление дополнительных переменных указывает, что происходит:
elif event.type == pygame.MOUSEBUTTONUP:
mouse_click_coord = event.pos
game_board_coord = mouse2Board( mouse_click_coord )
handleGameClick( game_board_coord )
Здесь читателю сообщается, что event.pos
- это координата (вероятно, пара значений) и это от мыши. Затем он усиливает, что координата затем преобразуется в пространство игрового поля перед передачей в handleGameClick()
для обработки.
Два фрагмента кода имеют точно такой же результат (и, вероятно, скорость выполнения) , но второму гораздо легче следовать.
ИМХО, в идеале нужно писать такой код, чтобы кто-то, не знакомый с языком (но все же программист), мог понять его без особых проблем. Вот почему в моих ответах вы не увидите много "pythoni c" l oop -in-list, например:
[[col +1 for col in row] for row in a] # Taken from 10 vote answer
Потому что, если вы не очень знакомы с синтаксисом python, он нечитаем.