引言:可以用python写一写简单的小游戏!而这些小游戏归根结底是一些图片的加载、变化、移动。对图片的坐标进行修改,用背景图覆盖在原来的背景上遮盖住原来的效果,就可以实现图片的移动。比如,在一块木板上铺上一张白纸,此时,木板就是游戏窗口,而白纸就是游戏背景图片。在背景上继续加载其他的图片,相当于在白纸上作画,完成一个场景。
pygame 是一个资源包,包含各种各样的资源,方便游戏的开发。
pygame中的一些模块:
init():初始化,表示初始化所有pygame模块
update():在父类中定义,监听事件和移动(调用)。通过循环,一直执行该方法,实现若有变化及时更改,如无变化,覆盖原来场景。
背景图片:产生一个遮盖效果。如果一直在同一张白纸上作画,很快场景就会混乱,更新一个背景,利用ipdate()方法,在新的白纸上作相同的操作,当然,若有限制条件,如if判断,会在白纸上画出,实现场景的修改。
draw():将update()执行的内容,画到背景上。
display.update():将背景画到屏幕上
场景更新先后:遵循背景图片,未更新,有变化,其他资源顺序。即先把白纸准备好,画,将白纸放在木板上展示。
循环模块:update,draw,display等都在循环内,即需要重复操作的内容。
初始化资源位置:要更新的资源放一起,如飞机大战中的敌机,子弹需要升级。而飞机不做更改,不能循环。否则,每执行一次循环,都会创建一个对象,程勋无法正常执行。
添加背景:需要把整个窗口覆盖,遮住之前画出的内容,因此,背景要比窗口大。
总结:
游戏是由一些图片的变化显现出来的。这些图片由自己的坐标,大小,速度。通过代码如if,计时器事件,对这些内容进行控制。当执行到了这些控制代码时,被画出来的内容相当于之前的内容就有了变化。利用循环把这些场景放在一起,就产生了连续的效果。
通过继承pygame.sprite.Sprite可以获得资源。创建一个父类,声明update方法,在update()内调用事件和移动,而子类通过继承拥有了update方法,通过重写,就可以控制自己事件与移动。而精灵组的update()方法会自动调用所有update方法。就可以调用update方法,一直执行,监听变化。
父类方法的调用:
若要实现父类的方法,则调用;不需要实现父类方法内的功能,则不需调用。__init__方法除外,它必须调用。
如果没有变化,场景会有任何变化吗?
场景没有变化,但他是与上一个场景一模一样的场景。场景是被画出来的代码执行结果。每一个循环都会根据数据走完完整的程序,与上一个执行结果相同同样被画了出来,只是我们没有发现而已。即有没有变化都会执行结果被画出来。
场景中有多个飞机叠加的原因:
一:没有添加背景
二:创建了多个对象
三:更新顺序不相同
场景中该出现的图片没有出现的原因:
一:代码错误
二:被其他图片覆盖了
三:被kill()了
四:边界判断限制了。