QT实现飞机大战-2

发布时间:2024年01月22日

战机发射子弹、敌机出现、爆炸效果、音效的添加

1.制作子弹类

  • 创建子弹文件和类
  • 添加子弹类中的成员函数和成员属性
  • 实现成员函数
  • 测试子弹
1.1创建子弹文件夹和类

创建Bullet类以及生成对应的文件
创建好后生成bullet.h 和 bullet.cpp两个文件
在这里插入图片描述

1.2添加子弹的成员函数和成员属性

战机发射子弹,子弹发射后会向上移动,移动到地图外子弹消失。
因此子弹的属性和:子弹图片、子弹坐标、子弹移动速度、子弹是否飞出地图外、子弹的矩形边框(设定矩形边框后,后续实现击败敌机时可以通过矩形边框是否相交来判断)、子弹移动的函数

在config.h中追加子弹配置信息

/********** 子弹配置数据 **********/

#define BULLET_PATH ":/res/bullet_11.png"   //子弹图片路径
#define BULLET_SPEED 5  //子弹移动速度

在这里插入图片描述

在Bullet.h中添加成员属性和成员函数
#ifndef BULLET_H
#define BULLET_H
#include "config.h"
#include <QPixmap>

class Bullet
{
public:
    Bullet();

    //更新子弹坐标
    void updatePosition();

public:
    //子弹资源对象
    QPixmap m_Bullet;
    //子弹坐标
    int m_X;
    int m_Y;
    //子弹移动速度
    int m_Speed;
    //子弹是否闲置
    bool m_Free;
    //子弹的矩形边框(用于碰撞检测)
    QRect m_Rect;
};

#endif // BULLET_H

在这里插入图片描述

子弹类成员函数实现
#include "bullet.h"

Bullet::Bullet()
{
    //加载子弹资源
    m_Bullet.load(BULLET_PATH);
    //子弹坐标 初始坐标可随意设置,后期会重置
    m_X = GAME_WIDTH*0.5 - m_Bullet.width()*0.5;
    m_Y = GAME_HEIGHT;
    //子弹状态
    m_Free = true;
    //子弹速度
    m_Speed = BULLET_SPEED;
    //子弹矩形框
    m_Rect.setWidth(m_Bullet.width());
    m_Rect.setHeight(m_Bullet.height());
    m_Rect.moveTo(m_X,m_Y);
}
void Bullet::updatePosition()
{
    //如果子弹是空闲状态,不需要坐标计算 玩家飞机可以控制子弹的空闲状态为false
    if(m_Free) return;
    //子弹向上移动
    m_Y  -= m_Speed;
    m_Rect.moveTo(m_X,m_Y);
    if(m_Y <= -m_Rect.height())
    {
        m_Free = true;
    }
}

在这里插入图片描述

测试子弹是否能正常发出

子弹本身应该由飞机发射,测试阶段我们写一段辅助代码,看看效果即可
测试过后,这些代码可以删除掉
在MainScene.h中添加测试代码

    //测试子弹代码
    Bullet temp_bullet;

在MainScene.cpp中的updatePosition里添加测试代码

    //测试子弹代码
    temp_bullet.m_Free = false;
    temp_bullet.updatePosition();

在MainScene.cpp中的paintEvent里添加测试代码

  //测试子弹代码
    painter.drawPixmap(temp_bullet.m_X,temp_bullet.m_Y,temp_bullet.m_Bullet);

运行程序,此时会有一发子弹从屏幕中射出

文章来源:https://blog.csdn.net/muLanlh/article/details/135716297
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。