飞机大战项目笔记

1、想创建有个游戏,第一件事就是思考怎样将图片素材绘制到游戏窗口上

 

2、游戏初始化和退出:pygame.init()、pygame.quit()

 

3、坐标系:

      

在游戏中,所有可见的元素都是以矩形区域来描述位置的

对英雄描述(x,y)(width,hight)

 

4、pygame.Rect 用于描述矩形区域

  Rect(x,y,width,height)

            

size:返回一个宽度和高度的元组

right=x+y

 

5、创建窗口:pygame.display

    pygame.display.set_mode()初始化游戏显示窗口

    pygame.display.update()刷新显示

set_mode()返回一个游戏窗口,需要用一个变量接收,记录

set_mode(reslution,(0,0),flags=0,depth=0)

其中第一个参数是需要我们指定的希望创建窗口的宽高

 

6、实现图像绘制的步骤:

    (1)使用pygame.image.load(“图像路径”)加载图像的数据

    (2)使用游戏屏幕对象,调用blit方法,将图像绘制到指定的位置

    (3)调用pygame.display.update()方法跟新显示

 

例:bg=pygame.image.load("图像路径“)

  窗口对象.blit(bg,(0,0))元组是指定绘制的位置

 

7、游戏的两个组成部分:

    第一部分:游戏初始化(设置游戏窗口、绘制图像的初始位置、设置游戏时钟)

    第二部分:游戏的循环(设置刷新帧率、检测用户交互、更新所有图像位置、更新屏幕显示)

要想在屏幕上显示效果好的动画,每秒更新新频目60次,即60帧/秒

 

8、pygame.time.clock,可以设置屏幕绘制速度——刷新帧率

  要使用时钟对象只需两步:

    (1)在游戏初始化创建一个时钟对象

    (2)在游戏循环中让时钟对象调用tick(帧率)方法

 

9、事件event的含义:就是游戏启动后,用户针对游戏所做的操作

 

10、监听:在游戏循环中,判断用户的具体操作。只有捕获到用户的具体操作,才能有针对性地做出响应

 

11、python中通过pygame.envent.get()可以获得用户当前所做的动作事件列表

 

12、exit() 函数:将正在执行的模块直接结束退出

 

13、精灵和精灵组:

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

    pygame.sprite.Group精灵组

  精灵:

属性

image:记录图像数据

rect:记录在屏幕上的位置

方法

update(*args):更新精灵位置

 

 

  精灵组

方法

__init__(self,*精灵)

add(*sprites):向组中添加精灵

sprites():返回所有精灵列表

update(*args):让组中所有精灵调用update方法

draw(self,surface):将组中所有精灵的image绘制到surface的rect位置

  游戏初始化
步骤1

(1)创建精灵

(2)创建精灵组

 

游戏循环

步骤2

精灵组:update()

精灵组:draw(screen)

pygame.display.update()

14、如果一个类的基类不是object,在重写初始化方法时一定要super()一下类的_ _init_ _方法,保证父类实现的_ _init_ _代码能够被正常执行,在写super()时一定要记得把括号写上,要不然虽然在本身模块上运行没有出错,但是在其他模块调用时就会报错(typeError: description"_ _init_ _"requires a "super")。

 

15、image的get_rect()方法,可以返回pygame.Rect(0,0,width,hight)

 

16、常量的定义:常量的命名应该所有的字母都要用大写,单词与单词之间用下划线连接

 

17、在pygame中可以使用pygame.time.timer()来添加定时器

  所谓定时器,就是指定每隔一段时间,去执行一些动作

    .set_timer(eventid,milliseconds)

第一个参数为事件代号,第二个参数为触发事件的间隔的毫秒值

定时器的使用:

        (1)创建事件代号 EVENT_ID = pygame.USEREVENT

         (2)pygame.time.timer(EVENT_ID,指定事件出现的时间间隔)

        (30利用pygame.event.get()监听事件

 

18、判断敌机是否飞出屏幕,如果是,调用kill()方法将其从所有组中删除

 

19、python中针对键盘按键的捕获方法有两种:

    第一种:判断event.type == pygame.KEYDOWN

          例:

            elif event.type == pygame.KEYDOMN and event.key == pygame.K_RIQHT

              满足的话就执行相应的操作

            

    第二种:通过键盘常量,判断元组中某个键是否被按下,如果被按下,对应的数值为1

          例:

            keys_pressed = pygame.key.get_pressed()

            if kes_pressed[pygame.k_RIGHT]:

 

             就执行想要执行的事

 

两种方法的区别:第一种一次只能按一次,按一次放一次为一个事件。第二种可以一直按,按键的功能会一直执行,直到放开按键为止,才算一次事件,推荐使用

 

20、pygame.sprite.groupcollide()

为两个精灵所有精灵碰撞的检测

groupcollide(group1,group2,dokill1,dokill2,collided=None)

如果dokill设置为True,则在发生碰撞时,对应的精灵会自动被移除

collided参数用于计算碰撞的回调函数。

 

21、centerx,centery 指定某个对象的中心位置

 

22、pygame.sprite.spritecollide()

判断某个精灵和某个精灵组中精灵的精灵的碰撞

spritecollide(sprite,group,dokill,collided=None)

如果将dokill设置为True,则指定精灵组中发生碰撞的精灵将被自动移除

  

                                                             

 

 

 

 

 

 

 

    

posted @ 2020-05-07 17:53  hl爱编程  阅读(261)  评论(0)    收藏  举报