矩游戏开发最终要的是逻辑关系,所以本博主将携带大家一起来从零开始的一款小游戏制作,如有不足之处,请帮忙之处。
一、框架及库函数导入
import pgzrun
def draw():
pass
def update():
pass
pgzrun.go()
框架导入更有利于我们定位代码,也是一个pgzero开发好的开端。所以要习惯先把框架代码打好。
二、背景导入
screen.blit('图片名',(0,0))
我们发现窗体有多余部分,应为窗体的默认大小为800x600。所以我们需要对窗体进行修改
修改窗体
WIDTH=images.bg0.get_width()
HEIGHT=images.bg0.get_height()
images.图片名称.get_width()和images.图片名称.get_height()可以快速获取图片的宽和高
三、角色
eagle=Actor('eagle')
def draw():
screen.blit('bg0',(0,0))
eagle.draw()
角色定位
eagle.pos=WIDTH/2,HEIGHT-images.eagle.get_height()
角色移动
定义角色速度
eagle_speed=5
定义角色移动函数
def eagle_move():
if keyboard.left:#方向键左
eagle.x-=eagle_speed
if keyboard.right:#方向键右
eagle.x+=eagle_speed
在update函数中将函数调用,即可实现角色的左右移动。
限制运动范围
eagle.x=max(images.eagle.get_width()/2,min(WIDTH-images.eagle.get_width()/2,eagle.x))
通过max和min函数可以限制角色的最大和最小运动范围。只需在max(最小,min(最大,角色坐标))
def eagle_move():
if keyboard.left:#方向键左
eagle.x-=eagle_speed
if keyboard.right:#方向键右
eagle.x+=eagle_speed
eagle.x=max(images.eagle.get_width()/2,min(WIDTH-images.eagle.get_width()/2,eagle.x))
四、子弹发射
无限子弹流
通过按键创建子弹角色,并定位子弹角色位置,在将其放置于列表中,通过draw函数循环绘制即可将每颗子弹进行绘制。
def on_key_down(key):
if key==keys.SPACE:
bullet=Actor('bullet')
bullet.center=eagle.center
bullet_list.append(bullet)
通过按下空格键创建子弹角色,并定义子弹角色和玩家角色中心,并将角色添加入列表中
def draw():
screen.blit('bg0',(0,0))
eagle.draw()
for bullet in bullet_list:
bullet.draw()
通过循环访问子弹列表,并将子弹列表中的每个角色依次取出并进行角色的绘制。
子弹移动
子弹移动只需定义个子弹的移动速度,并在每次循环绘制子弹的过程中使子弹的y坐标朝该方向进行运动。
bullet_speed=15
def draw():
screen.blit('bg0',(0,0))
eagle.draw()
for bullet in bullet_list:
bullet.y-=bullet_speed
bullet.draw()
五、角色私有属性
私有属性是角色里可以方便我们给该角色增加变量。
bullet.alive=True
通过alive来判断角色属性的存活,并更改子弹列表,当子弹超出屏幕时,使子弹属性设置为False
import pgzrun
WIDTH=images.bg0.get_width()
HEIGHT=images.bg0.get_height()
eagle=Actor('eagle')
eagle.alive=True
eagle.pos=WIDTH/2,HEIGHT-images.eagle.get_height()
eagle_speed=5
bullet_speed=15
bullet_list=[]
def draw():
global bullet_list
screen.blit('bg0',(0,0))
eagle.draw()
bullet_list=[bullet for bullet in bullet_list if bullet.alive]
for bullet in bullet_list:
bullet.y-=bullet_speed
bullet.draw()
pass
def eagle_move():
if keyboard.left:#方向键左
eagle.x-=eagle_speed
if keyboard.right:#方向键右
eagle.x+=eagle_speed
eagle.x=max(images.eagle.get_width()/2,min(WIDTH-images.eagle.get_width()/2,eagle.x))
def on_key_down(key):
if key==keys.SPACE:
bullet=Actor('bullet')
bullet.center=eagle.center
bullet.alive=True
bullet_list.append(bullet)
def update():
eagle_move()
for bullet in bullet_list:
if bullet.y<0:
bullet.alive=False
continue
bullet.y-=bullet_speed
pass
pgzrun.go()