Как все уже ответили, проблема в том, что код перебирает список списков, где внешний список просто содержит три точки треугольника. Итак, points[0]
- это список [100, 100]
, points[1]
- это [100, 150]
и т. Д. c. Ваш код терпит неудачу, потому что points[0][counter]
является только «правильным» для счетчика <3. Как только счетчик превышает количество точек, код не выполняется. </p>
Вы, вероятно, имели в виду:
for point in self.points:
# point is a co-ordinate: [ x, y ]
point[0] += self.speed # update x-coordinate of each point
Я думаю, что было бы лучше добавить функцию move()
в ваш класс Triangle
, сохраняя код внутреннего обновления внутри класса:
class Triangle:
# ...
def move( self, x_change, y_change ):
""" Move each triangle point by x_change and y_change, at self.speed """
for i, point in enumerate( self.points ):
x, y = point
new_x = x + ( x_change * self.speed )
new_y = y + ( y_change * self.speed )
self.points[i] = [ new_x, new_y ]
Это позволяет простому движущемуся вызову обрабатывать нажатие клавиши, а также диагональные перемещения.
# Movement keys
keys = pygame.key.get_pressed()
if ( keys[pygame.K_UP] ):
tri.move( 0, -1 )
if ( keys[pygame.K_DOWN] ):
tri.move( 0, 1 )
if ( keys[pygame.K_LEFT] ):
tri.move( -1, 0 )
if ( keys[pygame.K_RIGHT] ):
tri.move( 1, 0 )