话不多说,我们直接进入正题吧。
这个阶段我们要完成如下功能:
1:图片的绘制
2:敌人运动轨迹的绘制
3:防御塔坑(可放置防御塔点)的绘制
4:鼠标点击事件,实现防御塔的出现
图片的绘制
首先我们在Qt中,创建一个widget工程
得到这个工程后,我们在mainwindow.h中做如下添加:
//类外
#include <QPaintEvent>
//类内
protected:
void paintEvent(QPaintEvent*);
添加Qt Resource File文件
把要用到的图片都放到这个文件夹中。
然后进入mainwindow.cpp,做如下添加:
void Mainwindow::paintEvent(QPaintEvent*)
{
QPainter painter(this);
QString path(":/images/background1.jpg");//path是你图片的路径
painter.drawPixmap(0,0,750,375,path);
//drawPixmap的前四个参数代表的分别是,图片左上角的横坐标,图片左上角的纵坐标,图片的width,图片的height。我们一般把width和height,与图片的真实大小匹配起来
}
运行上述程序,就可以得到下面的结果啦!
#敌人运动轨迹的绘制
我们添加一个类wayPoint(航点)
在wayPoint.h的实现:
#ifndef WAYPOINT_H
#define WAYPOINT_H
#include <QPoint>
#include <QPainter>
class wayPoint
{
public:
wayPoint(QPoint pos);
void setNextWayPoint(wayPoint * nextWayPoint);//设置下一个航点
wayPoint * getNextWayPoint();//得到下一个航点的指针
const QPoint getPos();//得到本航点的中心点
void draw(QPainter * painter) const;//绘画类函数
private:
QPoint m_pos;//航点的中心点
wayPoint * m_nextWayPoint;//下一个航点的指针
};
#endif // WAYPOINT_H
wayPoint.cpp中的实现:
#include "waypoint.h"
#include <QPoint>
#include <QPainter>
wayPoint::wayPoint(QPoint pos):
m_pos(pos),
m_nextWayPoint(NULL)
{
}
void wayPoint::setNextWayPoint(wayPoint *nextWayPoint)
{
this->m_nextWayPoint=nextWayPoint;
}
wayPoint * wayPoint::getNextWayPoint()
{
return this->m_nextWayPoint;
}
const QPoint wayPoint::getPos()
{
return this->m_pos;
}
void wayPoint::draw(QPainter * painter) const
{
painter->save();//保存原始的绘画参数
painter->setPen(Qt::green);//设置画笔的颜色
painter->drawEllipse(m_pos,4,4);//画一个半径为4的圆
//注意,图片的大小单位是像素
painter->drawEllipse(m_pos,1,1);//半径为1的圆
if(m_nextWayPoint)//如果存在下一个航点,就把这两个航点连接起来
{
painter->drawLine(m_pos,m_nextWayPoint->getPos());//painter内的画直线的方法
}
painter->restore();//还原原来的画笔设置
}
完成wayPoint类的创建后,我们在mainwindow(程序运行得到的窗口)中把这些航点画出来。
先在mainwindow.h中添加:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#