Pygame: TypeError: неверный аргумент конечной позиции - PullRequest
1 голос
/ 17 сентября 2011

Во время выполнения этого кода:

for p in self.particles :
       pos1 = p.pos
       pos2 = p.pos[0]+2*p.vel[0], p.pos[1]+2*p.vel[1]
       pygame.draw.line(self.screen, p.color, pos1 , pos2 , 2)

Я получаю эту ошибку:

TypeError: Неверный аргумент конечной позиции`

Так что яиспользуйте оператор print p.pos, чтобы увидеть, что такое p.pos, и он волшебным образом работает!
Но единственная проблема заключается в том, что его распечатка заставляет игру работать со скоростью 10 кадров в секунду ...
Так как же мнеисправить ошибку?

Ответы [ 2 ]

1 голос
/ 13 февраля 2012

Если вы имеете в виду, что на самом деле вы часто вызываете функцию или оператор print(), то вы должны удалить его, чтобы ускорить работу вашей программы.
В противном случае вы просто слишком много работаете на своем компьютере и, возможно, захотитеоптимизировать ваш код.

Например, я вижу, вы говорите for p in self.particles,
Если вы рисуете много частиц на экране, попробуйте уменьшить число - это больше компромиссчем оптимизация, но это вариант.

Убедитесь, что ваш код эффективен там, где он имеет значение
т.е.где вы делаете много вычислений или вызываете функцию много раз.

Вы можете сказать:

drawline = pygame.draw.line

и вместо этого вызвать drawline(), так как это экономит время поиска

1 голос
/ 22 сентября 2011

документы ref: pygame.draw.line(Surface, color, start_pos, end_pos, width=1)

Итак, нам нужно сделать:

import pygame
# This makes event handling, rect, and colors simpler.
# Now you can refer to `Sprite` or `Rect()` vs `pygame.sprite.Sprite` or `pygame.Rect()`
from pygame.locals import *
from pygame import Color, Rect, Surface

def render():
    p1 = (100,100)
    p2 = (p1[0] + 2*v[0], p2[1] + 2*v[1] )
    pygame.draw.line(screen, Color("white"), p1, p2, width=1)

Примечание. Код можно упростить с помощью векторов.

(будь то из NumPy или Евклида). Код становится: Где pos2, pos1, скорость - все векторы.

pos2 = pos1 + 2* velocity
...