第12讲 | 如何设置精灵的变形、放大和缩小?
蔡能
该思维导图由 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
《从 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-061
- naijiz等好久,周四到周二真是漫长2018-06-261
- ifelse学习打卡2024-03-20归属地:浙江
- 以往1.给这个类设置一个成员变量state,值可以为0、1对应缩放 2.在update方法里写个while循环,把之前的update方法体都放进循环体里 3.修改self.image的赋值语句,根据state决定调用scale方法的参数2018-06-27
- naijiz等好久...周四到周二真是漫长的等待2018-06-26
收起评论