关于精灵和精灵组

关于精灵和精灵组

视频里面讲的不清不楚,

已经看了多遍,发现视频里面的老师讲的挺差的,是真的很差

请老师详解一下什么是精灵和精灵组 以及它们怎么用的,谢谢

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手乔木 2019-08-29 10:29:30

同学你好:

http://img1.sycdn.imooc.com//climg/5d6737e80001c2e706230095.jpg

同学可以按照上面的顺序去设置游戏界面的位置。

SDL_VIDEO_WINDOW_POS:设置相对于系统屏幕的位置。

使用python获得系统的信息时,使用os.environ()

environ是一个字符串所对应环境的映像对象;

 os.environ['HOMEPATH']:当前用户主目录。

os.environ['TEMP']:临时目录路径。

os.environ[PATHEXT']:可执行文件。

os.environ['LOGONSERVER']:机器名。

os.environ['PROMPT']:设置提示符。

os.environ['SYSTEMROOT']:系统主目录。

http://img1.sycdn.imooc.com//climg/5d6738580001b2d606900315.jpg

同学可以依次输出一下,看看具体对应的是什么。

如果我解决了同学的问题,请采纳!学习愉快^_^。

好帮手乔木 2019-08-27 15:58:54

同学你好:

Pygame 提供了两个类(精灵和精灵组)

pygame.sprite.Sprite —— 存储 图像数据 image 和 位置 rect 的 对象

pygame.sprite.Group

精灵:

在游戏开发中,通常把 显示图像的对象 叫做精灵 Sprite 

精灵 需要 有 两个重要的属性:

    image 要显示的图像

    rect 图像要显示在屏幕的位置

默认的 update() 方法什么事情也没做

子类可以重写此方法,在每次刷新屏幕时,更新精灵位置

注意:pygame.sprite.Sprite 并没有提供 image 和 rect 两个属性

需要程序员从 pygame.sprite.Sprite 派生子类(继承 pygame.sprite.Sprite的类)并在子类的初始化方法中,设置 image 和 rect 属性

精灵组:

一个 精灵组可以包含多个精灵对象

调用精灵组对象的update() 方法可以自动调用组内每一个精灵的update() 方法

调用精灵组对象的draw(屏幕对象) 方法可以将组内每一个精灵 image绘制在rect位置

注意:仍然需要调用 pygame.display.update() 才能在屏幕看到最终结果。

例如:

import pygame

# 自定义的派生精灵子类,继承pygame.sprite.Sprite
class GameSprite(pygame.sprite.Sprite):
    """游戏精灵基类"""

    def __init__(self, image_path, speed=1):
        # 调用父类的初始化方法
        super().__init__()

        # 加载图像
        self.image = pygame.image.load(image_path)
        # 设置尺寸; get_rect()可以获取图像的原始大小
        self.rect = self.image.get_rect()
        # 记录速度
        self.speed = speed

    def update(self, *args):
        # 默认在垂直方向移动
        self.rect.y += self.speed


if __name__ == '__main__':


    # 游戏的初始化
    pygame.init()

    # 创建游戏主窗口 480 * 700
    screen = pygame.display.set_mode((480, 700))

    # 创建clock对象 (可以控制游戏循环频率)
    clock = pygame.time.Clock()

    # 创建敌机的精灵
    enemy = GameSprite("./hero1.png")
    enemy1 = GameSprite("./hero2.png", 2)
    # 创建敌机的精灵组
    enemy_group = pygame.sprite.Group(enemy, enemy1)

    # 游戏循环 -> 意味着游戏的正式开始!
    while True:

        # 通过时钟对象指定循环频率
        clock.tick(60)  # 每秒循环60次

        # 监听用户事件
        for event in pygame.event.get():
            # 判断用户是否点击了关闭按钮
            if event.type == pygame.QUIT:
                print("游戏退出...")
                pygame.quit()  # 卸载所有pygame模块
                exit()  # 直接终止当前正在执行的Python程序

        # 让精灵组调用两个方法
        # update -- 让组中的所有精灵更新位置
        enemy_group.update()

        # draw -- 在screen上绘制组中所有的精灵
        enemy_group.draw(screen)

        pygame.display.update()  # 更新屏幕显示

    pygame.quit()


同学可以参考上面的代码,图片的路径需要同学去更改。在后面的学习中同学会在实战中学习精灵和精灵组的用法。

如果我解决了同学的问题,请采纳!学习愉快^_^。

  • 提问者 浪淘沙98 #1
    创建游戏窗口的时候只是创建了大小,没有设置出现在显示屏上的位置,好像是随机出现的,那么这个随机出现的位置是怎么来的?可以设置游戏窗口出现的位置吗?
    2019-08-27 19:45:39
  • 您好请问一下 def update(self, *args):中这*args是想传入什么参数?然后最后一行这 pygame.quit()是什么作用
    2020-02-04 17:04:30
  • 同学你好: def update(self, *args):中*args定义的是不定长参数格式。使用该函数时,参数可传可不传,增强代码的可维护性。 pygame.quit()作用是关闭游戏界面。sys.exit()是结束程序的执行,退出程序。学习愉快^_^。
    2020-02-04 18:36:54
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师