从 0 开始学游戏开发
蔡能
原网易游戏引擎架构师,资深游戏底层技术专家
37243 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
从 0 开始学游戏开发
15
15
1.0x
00:00/00:00
登录|注册

第12讲 | 如何设置精灵的变形、放大和缩小?

重载函数update
初始化函数
小结
类explode
chop函数
rotate函数
scale函数
flip函数
精灵的管理器
精灵的概念
Pygame中的Sprite
设置变形、放大和缩小需要用到哪些函数?
什么是精灵?
如何设置精灵的变形、放大和缩小?

该思维导图由 AI 生成,仅供参考

上周四,我给你讲解了图片的遮挡问题。这一节我要和你讲精灵的变形、放大和缩小。如果之前没有做过游戏开发,你肯定会问,什么是精灵?

什么是精灵?

我先来解释一下什么是精灵。精灵当然不是我们传统意义上的什么树林里的精灵。精灵是一个游戏开发中的名词,英文叫 Sprite。
它多用于游戏中的人物和可移动物品,也可以用于显示鼠标指针和输入的文字。如果屏幕上的可移动物体的尺寸比一个精灵图要大,可由若干个精灵图缩放或者拼接而成。
宏观的概念讲,精灵就是一幅图片。比如我们之前中讲过的那些飞机图、背景图,这些都可以认为是精灵或者是从精灵中派生出来的。它就是一系列可以变化的图片。这些图片可以变形、放大、缩小,或者是一系列的动画帧等等。
编程的角度讲,精灵是一种管理器。在一个精灵的管理器中,可能会有一系列的方法去操作精灵,比如添有加、删除操作,比如有图像的变形、放大、缩小操作,还有系列帧的显示操作等。
既然,精灵就是图片,那在“打飞机”中,飞机会随着画面的变化、操作的不同,而有变形、放大以及缩小的状态。我现在就来讲这些操作的实现,需要用到哪些函数,以及这背后都有什么技巧。

设置变形、放大和缩小需要用到哪些函数?

Pygame 中的底层,使用的是 SDL 开发库,这个我们在之前的内容中已经讲过,因此,这些变形、放大缩小等操作,都有对应的 SDL 库。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Pygame中的精灵变形、放大和缩小技术是本文的重点。文章首先介绍了精灵的概念,指出了其在游戏开发中的重要性,并详细解释了在Pygame中实现变形、放大和缩小所需使用的函数,包括flip、scale、rotate和chop等。此外,文章还介绍了Pygame中的Sprite模块,提供了Sprite类,可以方便地将序列帧的图片做成动画并保存在Sprite的组中。通过一个名为explode的示例,展示了如何在Pygame中创建精灵动画类。总的来说,本文通过具体的代码示例和解释,帮助读者快速了解了在Pygame中设置精灵的变形、放大和缩小的方法,为游戏开发者提供了实用的技术指导。文章还提到了精灵类和group类的配合使用,以及在update重载函数里绘制动画帧效果并不停地放大、缩小的挑战。这些内容为读者提供了深入了解Pygame精灵技术的基础,并鼓励他们进一步探索和应用这些技术。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《从 0 开始学游戏开发》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(5)

  • 最新
  • 精选
  • 三硝基甲苯
    class plane(pygame.sprite.Sprite): # input the image, animate's frame and position def __init__(self, target, frame, pos=(0, 0)): pygame.sprite.Sprite.__init__(self) self.image = pygame.image.load(target).convert_alpha() self.main_image = self.image self.rect = self.image.get_rect() self.frame = frame self.count = 0 self.rect.topleft = pos self.oriRect = (self.image.get_rect().width, self.image.get_rect().height) # judge the parity of frame to zoom in and out def update(self): if self.count % 2 == 0: self.count = 1 self.main_image = pygame.transform.scale2x(self.image) else: self.count = 0 self.main_image = pygame.transform.scale(self.image, self.oriRect) self.image = self.main_image pln = plane(plnjpg, 2, (100, 100)) group = pygame.sprite.Group() group.add(pln) while True: screen.blit(bg, (0, 0)) group.update() group.draw(screen) pygame.display.update() pygame.time.wait(500) # delay 500ms for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() 忙了半个月。终于又可以开始学了
    2018-07-06
    1
  • naijiz
    等好久,周四到周二真是漫长
    2018-06-26
    1
  • ifelse
    学习打卡
    2024-03-20归属地:浙江
  • 以往
    1.给这个类设置一个成员变量state,值可以为0、1对应缩放 2.在update方法里写个while循环,把之前的update方法体都放进循环体里 3.修改self.image的赋值语句,根据state决定调用scale方法的参数
    2018-06-27
  • naijiz
    等好久...周四到周二真是漫长的等待
    2018-06-26
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部