Pygame中实现图片旋转

这篇具有很好参考价值的文章主要介绍了Pygame中实现图片旋转。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在Pygame中实现图片的移动_pygame实现图片移动-CSDN博客中我们实现了一个移动的大猩猩,接下来在该程序的基础上实现大猩猩图片的旋转,也就是点击了鼠标后,大猩猩旋转一周,之后继续移动。

1 为Chimp类添加旋转的方法

首先为Chimp类也就是大猩猩类添加旋转的方法,代码如图1所示。

pygame旋转速度,pygame,图片,图片旋转,图片移动,rotate

图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所示。

pygame旋转速度,pygame,图片,图片旋转,图片移动,rotate

图2 触发旋转的方法

从图2中可以看到,触发旋转方法的方法名是punched;在该方法中,首先判断dizzy是否是0,即图片是否已经开始旋转,如果图片未旋转,则dizzy的值是0,否则不为0;如果此时图片未旋转,则触发图片旋转的开关,即将dizzy的值设置为1;第60行获取旋转前的图片并将其保存到original中。

3 修改Chimp类的update()方法

在《Pygame中实现图片的移动》中提到,update()方法的作用是更新图片,更新后的代码如图3所示。

pygame旋转速度,pygame,图片,图片旋转,图片移动,rotate

图3 更新后的update()方法

从图3中可以看出,在update()方法中,对dizzy进行判断,如果dizzy不为0,则图片开始旋转;如果dizzy为0,则图片移动。

4 处理鼠标点击

为了实现点击鼠标后图片开始旋转,在主程序中需要添加对鼠标点击的处理代码,如图4所示。

pygame旋转速度,pygame,图片,图片旋转,图片移动,rotate

图4 处理鼠标点击的代码

第79行中,如果鼠标类型是MOUSEBUTTONDOWN,即鼠标被按下时,则调用Chimp类的punched()方法,即触发了图片旋转,当图片旋转一周后,停止旋转,图片继续移动。

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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • pygame图像变换:缩放、旋转、镜像

    pygame的transform中封装了一些基础的图像处理函数,列表如下 函数 功能 flip 镜像 scale 缩放至新的分辨率 scale_by 根据因子进行缩放 scale2x 专业图像倍增器 rotate 旋转 rotozoom 缩放并旋转 smoothscale 平滑缩放 smoothscale_by 平滑缩放至新的分辨率 chop 获取已删除内部区域的图像的副本

    2024年02月04日
    浏览(39)
  • Android多张图片rotation旋转角度叠加/重叠堆放

    Android大图片之缩略图,以及对原图按照指定宽高裁剪成缩略图-CSDN博客 文章浏览阅读5.3k次。《Android大图片之变换缩略图,以及对原始大图片按照指定宽、高裁剪成缩略图》在Android的ImageView加载图像资源过程中,出于性能和内存开销的需要,有时候需要把一个原始的超大

    2024年02月07日
    浏览(48)
  • pygame伪3d地面 移动效果

    2024年02月13日
    浏览(99)
  • pygam第2课——pygame加载图片

    2024年02月03日
    浏览(29)
  • 秒会Pygame:键盘移动和鼠标点击移动物体的方法(含完整的代码)

    目录 预备知识 键盘控制物体移动事件 鼠标点击控制物体移动事件 鼠标移动的同时画彩色小球 预备知识 pygame的基本函数介绍 1.初始化函数,pygame的必备  pygame.init()   2.设置屏幕的大小 pygame.display.set_mode(size) //(长,宽) 3. 程序的命名 pygame.display.set_caption(\\\"string\\\") 4.屏幕的颜

    2023年04月08日
    浏览(47)
  • 使用pygame让方向键实现角色的移动和转向

    pygame小鱼 transform.flip(Surface,xbool,ybool)可以将图片进行翻转,返回一个新图像 Surface:需要翻转的图像 xbool:是否水平翻转,True/False ybool:是否垂直翻转,True/False

    2024年02月04日
    浏览(55)
  • python基于pygame库实现弹幕效果(多行显示,速度不同,颜色不同,循环显示)

            使用python实现类似弹幕的显示效果,弹幕文本存储在txt文件中,弹幕多行显示,弹幕颜色不同有区别,弹幕的速度不一,弹幕要循环显示。      弹幕文本数据:danmu.txt

    2024年02月08日
    浏览(78)
  • pygame如何添加背景图片

    Pygame可以使用pygame.image模块来添加背景图片,方法如下: 使用pygame.image.load( )加载图片; 使用pygame.transform.scale( )缩放图片; 使用pygame.display.set_mode( )创建一个新的显示窗口; 使用pygame.display.get_surface( )获取窗口表面; 使用pygame.display.update( )更新窗口表面; 使用pygame.display

    2024年02月11日
    浏览(51)
  • Python和Pygame绘制自动驾驶和移动机器本地规划器算法

    可视化自动驾驶车辆路径规划和移动机器人中使用的众多不同的本地规划器算法。 该应用程序提供可定制的参数,以更好地了解每种算法的内部工作原理并探索它们的优点和缺点。 它是用 Python 编写的,并使用 Pygame 来渲染可视化。 基类 概率路线图 快速探索随机树 势场 迪

    2024年02月02日
    浏览(44)
  • 如何将图片恢复水平位置?图片旋转矫正方法大全,ddddocr作者基于RotNet的旋转验证码深度学习识别模型Rotate-Captcha-Crack

    该模型首先使用边缘检测算法对图像进行边缘检测,然后找到边缘上的直线,并计算直线的角度。最后通过旋转图像来校正图像的角度。 该模型基于Hough变换算法来检测图像中的直线,并计算直线角度,然后使用旋转矩阵将图像旋转到正确的角度。 该模型使用图像的局部特征

    2024年02月08日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包