pygame飞机大战用精灵组(sprite)的层(layer)编写(十一)BOSS觉得都5G时代了,自动导航不能少。

BOSS瞄准了半天发射,可都被英雄躲过去了,心里不爽,看到电商的广告,感觉5G是个好东西,先搞个自动导航吧。

其实在上一篇中的millse类已经具有导航功能了,5G手机已经有了,差的是信号,那么现在加入信号。

在 boss.py的fire_missle()函数的最前面,在发射导弹前,先判断是否已经有导弹了,如果有了,那么让重新定位就行

        for hero in herogroup:
            hero_pos = vect(hero.rect.centerx, hero.rect.centery)
            for gmissle in bossmisslegroup:
                gmissle.set_target_coordinate(hero_pos)

这么一来,屏幕上所有的导弹就跟着英雄飞机的心脏走了。

不过跟踪导弹也想实现动态图片,pygame的图片旋转功能有点麻烦,动态图的旋转就涉及到多张图片的旋转,需要多张图片的原始图。因此要新建一个类来实现。该类继承至Missle,完整代码如下

from setting import *
from animation import *
from missle import *

class GuidedMissle(Missle):

# class GuidedMissle(pygame.sprite.Sprite):
    def __init__(self,group):
        self._layer = 5
        self.groups = allgroup,group
        pygame.sprite.Sprite.__init__(self,self.groups)
        self.animation = Animation()
        self.images = self.animation.load_image('images/missle/gmissle.png',
                                                60, 93, 1, 2)
        #必不可少的两条代码
        self.image = self.images[0].convert_alpha()
        self.rect = self.image.get_rect()
        #初设速度、角度
        self.x_speed = 0.00
        self.y_speed = 2.00
        self.speed = 5
        self.damage = 3
        self.angle = 0
        # 初始化阶段赋值,以后这个original图片坐标、方向都是不变的,self.image是变化的。
        # sprite 显示的是self.image
        self.original = self.image.convert_alpha()

  
    def update(self):
        """更新导弹位置
           旋转图像,计算x,y方向速度
           计算更新后的坐标点
           超出屏幕自动从所有精灵组删除
        """
        self.original = self.animation.get_current_image()
        #记录原有中心,复杂转换的图像,转换后中心为原中心
        original_center = self.rect.center
        #rotate后,original还是保持不变的,包括角度和坐标点,变的是self.image
        #self.image得到的是转变后的图像和图像的坐标,该坐标是(0,0,width,height)转角度angle后的坐标
        #不是当前位置的坐标。所以还得给转变后的图像的坐标重新赋值。
        self.image = pygame.transform.rotate(self.original, 90 - self.angle).convert_alpha()
        self.rect.center = original_center
        self.mask = pygame.mask.from_surface(self.image)
        #用临时变量来进行degree和 radian 之间的转换
        angle = self.angle * math.pi / 180
        self.x_speed = self.speed * math.cos(angle)
        self.y_speed = self.speed * math
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值