激情六月丁香婷婷|亚洲色图AV二区|丝袜AV日韩AV|久草视频在线分类|伊人九九精品视频|国产精品一级电影|久草视频在线99|在线看的av网址|伊人99精品无码|午夜无码视频在线

高校合作1:010-59833514 ?咨詢電話:400-810-1418 服務(wù)與監(jiān)督電話:400-810-1418轉(zhuǎn)接2

用圖形視圖框架編寫一個(gè)有趣的射擊小游戲

發(fā)布時(shí)間:2024-06-23 18:51:26 瀏覽量:174次

要求:按空格鍵,玩家發(fā)射子彈,子彈(長(zhǎng)條形)從玩家所在位置自行向上運(yùn)動(dòng)。敵人在頂部隨機(jī)位置出現(xiàn),向下運(yùn)動(dòng)。子彈和敵人碰撞時(shí)消失,子彈離開邊界時(shí)自行消失。

用圖形視圖礦建編寫的簡(jiǎn)單射擊游戲

編程要點(diǎn):

1. 類需使用connect函數(shù),需要繼承QObject類,頭文件需包含<QObject>。

2. 利用定時(shí)器QTimer和connect槽函數(shù)實(shí)現(xiàn)子彈和敵人的自動(dòng)運(yùn)動(dòng)。

3. 設(shè)置玩家的焦點(diǎn)特性,接受鍵盤事件,空格鍵發(fā)射子彈。

4. 重寫鍵盤事件,使用光標(biāo)鍵控制玩家移動(dòng),空格鍵發(fā)射子彈。

5. 視圖窗體固定大小,防止場(chǎng)景擴(kuò)大導(dǎo)致滾動(dòng)。

6. 子彈和敵人碰撞時(shí),刪除并釋放內(nèi)存。

7. 子彈和敵人離開視圖窗體邊界時(shí),刪除節(jié)省內(nèi)存。

這里給出子彈類的代碼:

-----------------bullet.h------------------

#ifndef BULLET_H

#define BULLET_H

#include <QGraphicsRectItem>

#include <QObject>

class Bullet: public QObject, public QGraphicsRectItem

{

Q_OBJECT

public:

Bullet();

public slots:

void move();

};

#endif // BULLET_H

-----------------bullet.cpp------------------

#include "bullet.h"

#include "Enemy.h"

#include <QGraphicsRectItem>

#include <QTimer>

#include <QGraphicsItem>

#include <QObject>

#include <QGraphicsScene>

#include <QDebug>

#include <QList>

Bullet::Bullet()

{

setRect(0,0,10,50);

QTimer *timer = new QTimer();

connect(timer, SIGNAL(timeout()), this, SLOT(move()));

timer->start(20);

}

void Bullet::move() {

QList <QGraphicsItem*> colliding_items = collidingItems();

for(int i=0, n=colliding_items.size(); i<n; i++)

{

if(typeid(*(colliding_items[i])) == typeid(Enemy))

{

scene()->removeItem(colliding_items[i]);

scene()->removeItem(this);

delete colliding_items[i];

delete this;

return;

}

}

setPos(x(), y()-10);

if(this->pos().y() + this->rect().height() < 0)

{

scene()->removeItem(this);

delete this;

qDebug()<<"bullet deleted";

}

熱門課程推薦

熱門資訊

請(qǐng)綁定手機(jī)號(hào)

x

同學(xué)您好!

您已成功報(bào)名0元試學(xué)活動(dòng),老師會(huì)在第一時(shí)間與您取得聯(lián)系,請(qǐng)保持電話暢通!
確定