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)
我一直收到这个错误:
类型错误:无效的结束位置参数
于是我用了一个 print p.pos
的语句来查看 p.pos 的值,结果它神奇地就能运行了!
但唯一的问题是,打印出来后游戏的运行速度变得像每秒只有10帧……
那么我该怎么解决这个错误呢?
2 个回答
1
如果你是说你在程序里频繁使用 print()
这个功能,那就应该把它去掉,这样可以让你的程序运行得更快。
否则,你就是在给电脑增加负担,可能需要优化一下你的代码。
比如我看到你写了 for p in self.particles
,
如果你要在屏幕上画很多粒子,试着减少一下粒子的数量——这其实是一种权衡,而不是单纯的优化,但也是一个选择。
确保你的代码在关键地方是高效的,
也就是说,在你进行大量计算或者多次调用某个功能的地方。
你可以这样写:
drawline = pygame.draw.line
然后改成调用 drawline()
,这样可以节省查找的时间。
1
文档参考: pygame.draw.line(表面, 颜色, 起始位置, 结束位置, 宽度=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