Python 每10秒更改精灵方向

Python 每10秒更改精灵方向,python,pygame,rotation,Python,Pygame,Rotation,我正在写一个程序,其中一个球在屏幕上随机移动,并且有一条轨迹,当轨迹被覆盖时,它会改变颜色。 这个球是一个矩阵而不是一个精灵,它使用矩形而不是圆形 我发现了一个类似于我的问题,但至少从我的理解来看,它不适用于同样的方式。链接: 基本上,不是精灵旋转和改变方向,我需要速度每10秒改变一个特定的角度。我在pygame中发现了transform.rotate函数,但是如果没有弹出错误,我就无法在代码中实现它 下面是我对transform.rotate的使用,它不起作用: 每十秒钟改变一次方向 尽管如此

我正在写一个程序,其中一个球在屏幕上随机移动,并且有一条轨迹,当轨迹被覆盖时,它会改变颜色。 这个球是一个矩阵而不是一个精灵,它使用矩形而不是圆形

我发现了一个类似于我的问题,但至少从我的理解来看,它不适用于同样的方式。链接:

基本上,不是精灵旋转和改变方向,我需要速度每10秒改变一个特定的角度。我在pygame中发现了transform.rotate函数,但是如果没有弹出错误,我就无法在代码中实现它

下面是我对transform.rotate的使用,它不起作用:

每十秒钟改变一次方向 尽管如此: newsurf=pg.transform.rotateballGrid,-45 screen.blitnewball,[[0,1,1,1,0], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [0, 1, 1, 1, 0]] pg.display.flip 时间到了 我的代码的其余部分供参考:

导入系统 从随机输入范围 导入pygame作为pg 定义一些颜色 黑色=0,0,0 白色=255,255,255 红色=255,0,0 RED2=231,0,0 RED3=207,0,0 RED4=183,0,0 RED5=159,0,0 红色6=135,0,0 RED7=111,0,0 RED8=87,0,0 RED9=63,0,0 红色10=39,0,0 绿色=0,255,0 蓝色=0,0,255 定义度量 宽度、高度、边距=10,10,1 GRIDX,GRIDY=36,36 类GridObjectpg.sprite.sprite: 定义初始自我、位置、网格、*组: 超级.\uuuu初始化\uuuu组 从网格创建图像 self.grid=grid self.gridsize=lengrid[0],lengrid imgsize=self.gridsize[0]*宽度+边距,self.gridsize[1]*高度+边距 self.image=pg.Surfaceimgsize,flags=pg.SRCALPHA self.image.fill0,0,0,0 col=235、175、76 对于rangeself.gridsize[0]中的c: 对于rangeself.gridsize[1]中的r: 如果自网格[r][c]==1: rect=[边距+宽度*c+边距,边距+高度*r+边距,宽度,高度] pg.draw.rectself.image,col,rect self.rect=self.image.get\u rectcenter=pos self.vel=pg.math.Vector28,0.rotaterandrange360 self.pos=pg.math.Vector2pos def updateself、BONDRECT、hitGrid、hitList: self.pos+=self.vel self.rect.center=self.pos 如果self.rect.left=boundrect.right: 自我等级x*=-1 如果self.rect.top=boundrect.bottom: 自我水平y*=-1 将矩形与网格对齐 gridpos=roundself.rect.x/宽度+边距,roundself.rect.y/高度+边距 self.rect.topleft=gridpos[0]*宽度+边距,gridpos[1]*高度+边距 增量接触场 oldHitList=hitList[:] hitList.clear 对于rangeself.gridsize[0]中的c: 对于rangeself.gridsize[1]中的r: p=gridpos[1]+r,gridpos[0]+c 如果oldHitList中有p: hitList.appendp elif自网格[r][c]==1: 如果p[0]我建议使用计时器事件。用于重复创建一个方向向量,并将方向向量ball.vel的角度更改一定程度,例如30°:

创建计时器事件 更改延迟=10000 10秒 更改事件=pg.USEREVENT+1 pg.time.set\U timerchange\U事件,更改\U延迟 [...] 虽然没有这样做: 对于pg.event.get中的事件: 如果event.type==pg.QUIT: 完成=正确 接收计时器事件 如果event.type==更改事件: 改变角度30° ball.vel=ball.vel.rotate30 注意,在pygame中可以定义客户事件。每个事件都需要一个唯一的id。用户事件的id必须介于pygame.USEREVENT 24和pygame.NumeEvents 32之间。在本例中,pygame.USEREVENT+1是计时器事件的事件id。
通过将0传递给时间参数,可以停止计时器事件。

pygame.transfrom.rotate的第一个参数是pygame.Surface对象。你在传递一个列表。相反,试着传球。image。

你能更详细地解释什么是userevent和numevent吗?@DougJames我已经详细解释过了。欲了解更多信息,请点击答案中的链接。将pygame文档复制到答案中是没有意义的。纽球没有定义,在循环的完整代码中使用,循环应该每10秒旋转一次球