Qt 游戏开发(06) - 为游戏增加健康值和得分
之前写的文章中,大多数属于贴代码的类型,经过一段时间后,自己对于代码的理解并没什么什么裨益,反而让自己觉得写代码就是贴代码,丧失很多兴趣,水平也得不到提高。在看过那么多大牛写的文章之后,也决心结合自己的长处开始写些比较好的文章。
闲话少说,此文章是之前C++ Qt Game Tutorial的续集,只是把标题换成更中文一些。
1. 新建一个widget工程,工程名字为tutorial6,删除生成的代码,只剩下tutorial6.pro 和 main.cpp
#-------------------------------------------------
#
# Project created by QtCreator 2017-01-23T11:32:10
#
#-------------------------------------------------QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = tutorial6
TEMPLATE = appSOURCES += main.cppHEADERS +=
#include int main(int argc, char *argv[])
{QApplication a(argc, argv);return a.exec();
}
tutorial6.pro是工程文件,相当于makefile, QT += core gui 添加相关的模块,比如需要opengl编程可以 QT += opengl,一般常见的类都会在core gui widgets上。
TARGET TEMPLATE 在建立工程时已经自动生成,SOURCES HEADERS在增加源文件或者头文件时会自动生成相应的文件。
main.cpp是程序执行的入口,每个程序都会有,函数中第一句话,建立一个QApplication a的对象,使用argc, argv初始化。这个对象主要用于管理GUI程序的控制流和主要的设置。它包含一个事件住循环,来自系统的事件(比如鼠标点击,敲键盘)都会通过这个QApplication对象分发出去;它还包括程序的初始化,程序的清除回收,以及程序的管理,主要是处理系统或者程序级别的设置。这个类暂时不需要研究太深,a.exec(),使程序进入循环,防止退出。
2. 给游戏添加玩家
在前面的篇章中,玩家是继承QGraphicsRectItem类,用一个正方形实现。关于C++的多继承,理解起来有点费劲,Qt中的将父类的对象的指针传递给子类,是为了更好地管理子类的资源,子类销毁之后,父类自动回收资源。
#ifndef PLAYER_H
#define PLAYER_H#include
#include
#include class Player : public QObject, public QGraphicsRectItem {Q_OBJECT
public:Player(QGraphicsItem *parent = 0);void keyPressEvent(QKeyEvent *event);
public slots:void spawn();
};#endif // PLAYER_H
Player对象定义了一个公共方法keyPressEvent,这个方法的作用是可以通过键盘的←→键控制玩家的左右移动,通过空格键发射子弹。
void Player::keyPressEvent(QKeyEvent *event)
{// move the player left and rightif (event->key() == Qt::Key_Left) {if (pos().x() > 0)setPos(x() - 10, y());} else if (event->key() == Qt::Key_Right) {if (pos().x() + 100 < 800)setPos(x() + 10, y());} else if (event->key() == Qt::Key_Space) {// shoot with the spacebar// create a bulletBullet *bullet = new Bullet();bullet->setPos(x(), y());scene()->addItem(bullet);}
}
setPos是父类QGraphicsItem中的方法,表示玩家在窗口中的
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
