从0开始学游戏开发
蔡能
原网易游戏引擎架构师,资深游戏底层技术专家
立即订阅
5814 人已学习
课程目录
已完结 41 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 跟我学,你也可以开发一款游戏!
免费
第一章:游戏开发基础知识 (5讲)
第1讲 | 游戏开发需要了解哪些背景知识?
第2讲 | 2D游戏和3D游戏有什么区别?
第3讲 | 游戏的发动机:游戏引擎
第4讲 | 底层绘图接口的妙用
第5讲 | 构建游戏场景的武器:地图编辑器
第二章:客户端开发 (10讲)
第6讲 | 从0开始整理开发流程
第7讲 | 如何建立一个Windows窗体?
第8讲 | 如何区分图形和图像?
第9讲 | 如何绘制游戏背景?
第11讲 | 如何载入“飞机”和“敌人”?
第12讲 | 如何设置图像的前后遮挡?
第14讲 | 如何设置精灵的变形、放大和缩小?
第15讲 | 如何设置淡入淡出和碰撞检测?
第17讲 | 如何制作游戏资源包和保存机制?
第18讲 | 如何载入背景音乐和音效?
第三章:UI和键盘鼠标 (3讲)
第20讲 | 如何在游戏中载入UI和菜单?
第21讲 | 如何用鼠标和键盘来操作游戏?
第23讲 | 如何判断客户端的网络连接?
第四章:脚本语言 (3讲)
第24讲 | 如何嵌入脚本语言?
第26讲 | 脚本语言在游戏开发中有哪些应用?
第27讲 | 如何使用脚本语言编写周边工具?
第五章:服务器端开发 (6讲)
第29讲 | 如何选择合适的开发语言?
第30讲 | 如何定制合适的开发协议?
第32讲 | 不可忽视的多线程及并发问题
第33讲 | 如何判断心跳包是否离线?
第35讲 | 如何用网关服务器进行负载均衡?
第36讲 | 如何制作游戏内容保存和缓存处理?
第六章:热点剖析 (9讲)
第10讲 | 热点剖析(一):HTML5技术是如何取代Flash的?
第13讲 | 热点剖析(二):如何选择一款HTML5引擎?
第16讲 | 热点剖析(三):试试看,你也可以编写一款HTML5小游戏!
第19讲 | 热点剖析(四):安卓端和苹果端游戏开发有什么区别?
第22讲 | 热点剖析(五):如何选择移动端的游戏引擎?
第25讲 | 热点剖析(六):AR和人工智能在游戏领域有哪些应用?
第28讲 | 热点剖析(七):谈谈微信小游戏的成功点
第31讲 | 热点剖析(八):谈谈移动游戏的未来发展
第34讲 | 热点剖析(九):谈谈独立开发者的未来发展
加餐 (3讲)
复习课 | 带你梳理客户端开发的三个重点
课后阅读 | 游戏开发工程师学习路径(上)
课后阅读 | 游戏开发工程师学习路径(下)
结束语 (1讲)
结束语 | 做游戏的过程就像是在雕琢一件艺术品
从0开始学游戏开发
登录|注册

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

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

什么是精灵?

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

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

Pygame 中的底层,使用的是 SDL 开发库,这个我们在之前的内容中已经讲过,因此,这些变形、放大缩小等操作,都有对应的 SDL 库。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《从0开始学游戏开发》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(4)

  • 三硝基甲苯
    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
  • 以往
    1.给这个类设置一个成员变量state,值可以为0、1对应缩放
    2.在update方法里写个while循环,把之前的update方法体都放进循环体里
    3.修改self.image的赋值语句,根据state决定调用scale方法的参数
    2018-06-27
  • naijiz
    等好久,周四到周二真是漫长
    2018-06-26
  • naijiz
    等好久...周四到周二真是漫长的等待
    2018-06-26
收起评论
4
返回
顶部