看见敌机了,总不能去撞吧,英雄机当然得有子弹了。
子弹的编写,前面的日志里已经写了很多了,这里稍微改一下,直接拿来用吧。
bullet.py
"""
子弹的基类
设置坐标,速度,角度,计算更新后的点的坐标
"""
from setting import *
import math
class Bullet(pygame.sprite.Sprite):
def __init__(self, group):
self._layer = 9
self.groups = allgroup, group
pygame.sprite.Sprite.__init__(self, self.groups)
#必须要的两个初始化
self.image = pygame.image.load('images/bullet/bulletdefault.png').convert()
self.rect = self.image.get_rect()
#用vector来表述,清晰些,子弹的尺寸,用来飞机发射时的位置
self.size = vect(self.rect.width, self.rect.height)
#设置图像的mask属性,碰撞检查时,透明图像就忽略了
self.mask = pygame.mask.from_surface(self.image)
#设置默认的数据参数,速度
self.speed = 4
#笛卡尔坐标系,angle = 90 垂直向下
self.angle = 90
#初始距离和原点坐标
self.distance = 0
self.x_original = 0
self.y_original = 0
#伤害值
self.damage = 1
#继承至sprite,被sprite.Group()加入后,只要调用了sprite的update,这里也会自动调用
def update(self):
"""计算图像位置
先计算单位时间后的距离,通过三角运算,加上原始坐标,即为更新后坐标。
想用pygame.time.get_fps()来计算时间,效果不好,直接写成了1000
"""
#计算距离
self.distance += 1000 * self.speed / 1000
#degree 换成 radian 角度换弧度,用临时变量angle,保障self.angle不被变更
angle = self.angle
angle = math.pi * angle / 180
#计算图像的左上角的x,y,三角函数换算加上原始点坐标
self.rect.x = self.distance * math.cos(angle) + self.x_original
self.rect.y = self.distance * math.sin(angle) +