在Pygame中实现图片的移动_pygame实现图片移动-CSDN博客中我们实现了一个移动的大猩猩,接下来在该程序的基础上实现大猩猩图片的旋转,也就是点击了鼠标后,大猩猩旋转一周,之后继续移动。
1 为Chimp类添加旋转的方法
首先为Chimp类也就是大猩猩类添加旋转的方法,代码如图1所示。
图1 Chimp类的旋转方法
从图1中可以看出,该旋转方法的方法名是_spin。第47行调用通过self调用Rect类的成员变量center,该成员变量的含义是Rect中心位置的坐标,并将其保存到Chimp类的center属性中;第48行中的dizzy属性表示旋转的度数,12表示每次旋转12°,将该数字变大,则旋转的速度将会加快;第49-51行代码的作用是当旋转的度数超过360°,则说明此时图片已经旋转了一周,则停止旋转,将dizzy的值设置为0,将image的值设置为原始图片original,original将在后续提到的punched()中定义;第52-54行代码表示当图片旋转的度数不到360°,即不到一周时,通过调用pygame.transform中的rotate()方法继续旋转图片,该方法的第一个参数表示要旋转的图片,第二个参数表示旋转的度数;最后在第55行中,通过get_rect()方法获取旋转之后的图片坐在的位置。
2 为Chimp类添加触发旋转的方法
为Chimp类添加触发旋转的方法,代码如图2所示。
图2 触发旋转的方法
从图2中可以看到,触发旋转方法的方法名是punched;在该方法中,首先判断dizzy是否是0,即图片是否已经开始旋转,如果图片未旋转,则dizzy的值是0,否则不为0;如果此时图片未旋转,则触发图片旋转的开关,即将dizzy的值设置为1;第60行获取旋转前的图片并将其保存到original中。
3 修改Chimp类的update()方法
在《Pygame中实现图片的移动》中提到,update()方法的作用是更新图片,更新后的代码如图3所示。
图3 更新后的update()方法
从图3中可以看出,在update()方法中,对dizzy进行判断,如果dizzy不为0,则图片开始旋转;如果dizzy为0,则图片移动。
4 处理鼠标点击
为了实现点击鼠标后图片开始旋转,在主程序中需要添加对鼠标点击的处理代码,如图4所示。
图4 处理鼠标点击的代码
第79行中,如果鼠标类型是MOUSEBUTTONDOWN,即鼠标被按下时,则调用Chimp类的punched()方法,即触发了图片旋转,当图片旋转一周后,停止旋转,图片继续移动。文章来源:https://www.toymoban.com/news/detail-768815.html
5 完整代码
以上提到的完整代码如下所示。文章来源地址https://www.toymoban.com/news/detail-768815.html
import pygame
def load_image(name):
image = pygame.image.load(name)
image = image.convert()
colorkey = image.get_at((0,0))
image.set_colorkey(colorkey, pygame.RLEACCEL)
return image, image.get_rect()
class Mouse(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image, self.rect = load_image('qiu.png')
def update(self):
self.rect.topleft = pygame.mouse.get_pos()
self.rect.move_ip((0,0))
class Chimp(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image, self.rect = load_image('chimp.bmp')
screen = pygame.display.get_surface()
self.area = screen.get_rect()
self.rect.topleft = 10, 10
self.move = 9
self.dizzy = 0
def update(self):
if self.dizzy:
self._spin()
else:
self._walk()
def _walk(self):
newpos = self.rect.move((self.move, 0))
if not self.area.contains(newpos):
if self.rect.left<self.area.left \
or self.rect.right>self.area.right:
self.move = -self.move
newpos = self.rect.move((self.move, 0))
self.image = \
pygame.transform.flip(self.image, 1, 0)
self.rect = newpos
def _spin(self):
center = self.rect.center
self.dizzy = self.dizzy + 12
if self.dizzy >= 360:
self.dizzy = 0
self.image = self.original
else:
rotate = pygame.transform.rotate
self.image = rotate(self.original, self.dizzy)
self.rect = self.image.get_rect(center=center)
def punched(self):
if not self.dizzy:
self.dizzy = 1
self.original = self.image
pygame.init()
screen = pygame.display.set_mode((1280, 480))
pygame.mouse.set_visible(False)
screen.fill((170, 238, 187))
going = True
mouse = Mouse()
chimp = Chimp()
allsprites = pygame.sprite.RenderPlain(mouse, chimp)
clock = pygame.time.Clock()
while going:
clock.tick(60)
screen.fill((170, 238, 187))
for event in pygame.event.get():
if event.type == pygame.QUIT:
going = False
elif event.type == pygame.MOUSEBUTTONDOWN:
chimp.punched()
allsprites.update()
allsprites.draw(screen)
pygame.display.flip()
pygame.quit()
到了这里,关于Pygame中实现图片旋转的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!