Pygame:TypeError:无效的结束位置参数

时间:2011-09-17 13:27:41

标签: python pygame typeerror

运行此代码时:

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 个答案:

答案 0 :(得分:1)

docs 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还是euclid)。 代码变为:其中pos2,pos1,velocity都是向量。

pos2 = pos1 + 2* velocity

答案 1 :(得分:1)

如果您的意思是实际上正在调用print()函数或语句,那么您应将其删除以加快程序速度。
否则你只是给你的计算机太多工作,并且可能想要优化你的代码。

例如,我看到你在说for p in self.particles
如果您在屏幕上绘制了大量粒子,请尝试减少数量 - 这不仅仅是优化,而是一种选择。

确保您的代码在有效的位置有效 即。在那里进行大量计算,或多次调用函数。

您可能想说:

drawline = pygame.draw.line

并改为拨打drawline(),因为这会节省查询时间