ÀÖÓãµç¾º

½ÌÓýÐÐÒµA¹ÉIPOµÚÒ»¹É£¨¹ÉƱ´úÂë 003032£©

È«¹ú×Éѯ/ͶËßÈÈÏߣº400-618-4000

·É»ú´óÕ½ÓÎÏ·ÖÆ×÷½Ì³Ì[C++Åàѵ]

¸üÐÂʱ¼ä:2020Äê01ÔÂ16ÈÕ16ʱ25·Ö À´Ô´:ÀÖÓã²¥¿Í ä¯ÀÀ´ÎÊý:

Ŀ¼


14¡¢ÊÓÆµ½Ì³Ì
ÊÓÆµ½Ì³ÌÏÂÔØµØÖ·£º https://pan.baidu.com/s/1V5TRdyp85gmB-vGa5KMOQg  ¼ÓQQ435946716»ñÈ¡ËØ²Ä¡£

ITÅàѵ


1¡¢ÏîÄ¿¼ò½é

·É»ú´óÕ½ÊÇÎÒÃÇ´ó¼ÒËùÊìÖªµÄÒ»¿îСÓÎÏ·£¬±¾½Ì³Ì¾ÍÊǽ̴ó¼ÒÈçºÎÖÆ×÷Ò»¿î×Ô¼ºµÄ·É»ú´óÕ½¡£

Ê×ÏÈÎÒÃÇ¿´Ò»ÏÂЧ¹ûͼ

·É»ú´óսЧ¹ûͼ

Íæ¼Ò¿ØÖÆÒ»¼ÜС·É»ú£¬È»ºó×Ô¶¯·¢Éä×Óµ¯£¬Èç¹û×Óµ¯´òµ½ÁË·ÉÏÂÀ´µÄµÐ»ú£¬ÔòÉäɱµÐ»ú£¬²¢ÇÒÓб¬Õ¨µÄÌØÐ§¡£½ÓÏÂÀ´ÔÙ˵Ã÷һϰ¸ÀýµÄÐèÇó£¬Ò²¾ÍÊÇÎÒÃÇÐèҪʵÏÖµÄÄÚÈÝ¡£

·¹ö¶¯µÄ±³¾°µØÍ¼

··É»úµÄÖÆ×÷ºÍ¿ØÖÆ

·×Óµ¯µÄÖÆ×÷ºÍÉä»÷

·µÐ»úµÄÖÆ×÷

·Åöײ¼ì²â

·±¬Õ¨Ð§¹û

·ÒôЧÌí¼Ó

2¡¢´´½¨ÏîÄ¿

´´½¨ÏîÄ¿²½ÖèÈçÏ£º

·´ò¿ªQt

·¸ú×ÅÏòµ¼´´½¨ÏîÄ¿
»ùÀàÑ¡Ôñ QWidget¿Õ´°¿Ú

µÚÒ»¸ö³¡¾°ÎªÖ÷³¡¾° MainScene

²»´øUI½çÃæ

2.1 ´ò¿ªQt

ÕÒµ½Äã°²×°µÄQt Creator£¬´ò¿ªËü¡£

Èç¹û°²×°Ê±£¬Ã»ÓÐÑ¡ÔñÔÚ×ÀÃæÉϽ¨Á¢¿ì½Ý·½Ê½£¬ÄÇôÄãµÄQtÈí¼þλÖÃÈçÏÂ

C:\qt\Qt5.x.x\Tools\QtCreator\bin

ÔÚÕâ¸ö·¾¶ÏÂÕÒµ½ qtcreator.exe Ë«»÷´ò¿ª¼´¿É

2.2 °´ÕÕÏòµ¼´´½¨ÏîÄ¿

2.2.1 н¨ÏîÄ¿

µã»÷²Ëµ¥ ÖеÄÎļþ -> н¨Îļþ»òÏîÄ¿ »òÕß ÔÚÊ×Ò³ÃæÖеã»÷New Project

·É»ú´óÕ½´´½¨ÏîÄ¿

2.2.2 Ñ¡ÔñÄ£°å

Ä£°åÑ¡Ôñ Application -> Qt Widget Application

Ñ¡ÔñÄ£°å


2.2.3 ÏîÄ¿Ãû³ÆºÍλÖÃ

¸øÏîÄ¿Æð¸öÃû³ÆÒÔ¼°Ñ¡ÖÐÏîĿҪ±£´æµÄµØ·½

Ñ¡ÔñÏîĿλÖÃ

ÕâÒ»²½Ñ¡ÔñºóÔÚKits ¹¹½¨Ì×¼þÖÐÖ±½Óµã»÷ÏÂÒ»²½¼´¿É


2.2.4 ÀàÐÅÏ¢

»ùÀàÑ¡Ôñ QWidget

ÀàÃûÒ²¾ÍÊÇÎÒÃǵÚÒ»¸ö´°¿Ú³¡¾°µÄÃû³Æ£¬ÕâÀïÎÒÆðÃûΪ MainScene ´ú±íÓÎÏ·ÖеÄÖ÷³¡¾°

È¡Ïû´´½¨½çÃæÖеÄÄÚÈÝ

Ñ¡ÔñQWidget



2.2.5 Íê³É´´½¨

ÔÚ»ã×ÜÒ³ÃæÖеã»÷Íê³É£¬ÎÒÃǾÍÂõ¿ªÁËÏîÄ¿µÄµÚÒ»²½£¡

Íê³ÉÏîÄ¿´´½¨


3¡¢ÉèÖÃÖ÷³¡¾°

Ö÷³¡¾°ÉèÖõIJ½ÖèÈçÏ£º

·Ìí¼ÓÅäÖÃÎļþ£¬±£´æÓÎÏ·ÖÐËùÓÐÅäÖÃÊý¾Ý

·³õʼ»¯Ö÷³¡¾°´°¿Ú´óС¡¢±êÌâ

3.1 ÅäÖÃÎļþÌí¼Ó

´´½¨ÐµÄÍ·ÎļþΪ config.h Ö÷Òª¼Ç¼³ÌÐòÖÐËùÓеÄÅäÖÃÊý¾Ý£¬·½±ãºóÆÚÐÞ¸Ä

Ìí¼Ó´°¿Ú¿í¶È¡¢¸ß¶ÈµÄÅäÖÃÐÅÏ¢£¬ÒÀ¾Ý±³¾°Í¼´óС½øÐÐÉèÖÃ

/********** ÓÎÏ·ÅäÖÃÊý¾Ý **********/

define GAME_WIDTH 512 //¿í¶È

define GAME_HEIGHT 768 //¸ß¶È

define GAME_TITLE "·É»ú´óÕ½ v1.0" //±êÌâ

3.2 Ö÷³¡¾°»ù±¾ÉèÖÃ

ÔÚmainScene.hÖÐÌí¼ÓеijÉÔ±º¯ÊýinitScene ÓÃÀ´³õʼ»¯ÓÎÏ·³¡¾°

void initScene();

ÔÚmainScene.cppÖÐʵÏÖÈçÏ´úÂë

void MainScene::initScene()
{
    //³õʼ»¯´°¿Ú´óС
    setFixedSize(GAMEWIDTH,GAMEHEIGHT);

    //ÉèÖô°¿Ú±êÌâ

    setWindowTitle(GAME_TITLE);

}

ÔÚ¹¹Ô캯ÊýMainSceneÖе÷Óøú¯Êý initScene

MainScene::MainScene(QWidget *parent)
    : QWidget(parent)
{
    //³õʼ»¯³¡¾°
    initScene();
}

²âÊÔÔËÐÐЧ¹ûÈçͼ£º

ÔËÐвâÊÔЧ¹û


4¡¢×ÊÔ´µ¼Èë

ÔÚÖ÷³¡¾°ÖÐÆäʵ»¹ÓÐÒ»¸öÅäÖÃÏîûÓÐʵÏÖ£¬Ò²¾ÍÊÇ´°¿Ú×óÉϽǵÄÄǸöͼ±ê×ÊÔ´¡£ÄÇô½ÓÏÂÀ´ÎÒÃǽ«ÓÎÏ·ÖеÄ×ÊÔ´½øÐе¼Èë²¢ÇÒÉèÖÃÓÎϷͼ±ê¡£

×ÊÔ´µ¼Èë²½Öè

·Éú³ÉqrcÎļþ

·ÏîĿͬ¼¶Ä¿Â¼Ï´´½¨resÎļþ¼Ð²¢½«×ÊÔ´Õ³Ìù¹ýÀ´

·±à¼­qrc£¬¼ÓÈëǰ׺ºÍÎļþ

·ÀûÓÃqrcÉú³É¶þ½øÖÆÎļþ rcc

·rccÎļþ·ÅÈëµ½debugͬ¼¶Ä¿Â¼ÏÂ

·×¢²á¶þ½øÖÆÎļþ

·Ìí¼Óͼ±ê×ÊÔ´

4.1 qrcÎļþÉú³É

ÓÒ¼üÏîÄ¿£¬µã»÷Ìí¼ÓÐÂÎļþ

?Ìí¼ÓÐÂÎļþ


Ñ¡ÔñQt -> Qt Resource File

Ñ¡ÔñQt

×ÊÔ´ÎļþÆðÃû È磺res

Ô´ÎļþÆðÃû


Éú³Éres.qrcÎļþ

Éú³Éres.qrcÎļþ



4.2 ´´½¨resÎļþ¼Ð

ÏîÄ¿µÄͬ¼¶Ä¿Â¼Ï´´½¨Îļþ¼Ðres£¬²¢½«×¼±¸ºÃµÄ×ÊÔ´Õ³Ìù½øÈ¥

´´½¨resÎļþ¼Ð

4.3 ±à¼­qrcÎļþ

ÓÒ¼üqrcÎļþ£¬Ñ¡ÖÐOpen in Editor

ÓÒ¼üqrcÎļþ


Ìí¼Óǰ׺Ϊ '' \ ''

Ìí¼Óǰ׺


Ìí¼ÓÎļþ ½«resÏÂËùÓÐÎļþÑ¡Öм´¿É

Ìí¼ÓresÏÂÎļþ

4.4 qrcÉú³É rcc¶þ½øÖÆÎļþ

ÓÉÓÚ×ÊÔ´¹ý´ó£¬»áÌáʾ´íÎó£º

´íÎóÌáʾ


Õâ¸ö´íÎóÒ²¾ÍÊÇ“±àÒëÆ÷µÄ¶Ñ¿Õ¼ä²»×㔡£

ÓÉÓÚ×ÊÔ´Îļþqrc¹ý´ó£¬³¬³ö·ÖÅäµÄÄڴ淶Χ

Òò´ËÎÒÃÇÐèÒªÀûÓöþ½øÖÆ×ÊÔ´£¬¶øÉú³É¶þ½øÖÆ×ÊÔ´¾ÍÐèÒªÎÒÃǸոյÄqrcÎļþ

ÀûÓÃcmd´ò¿ªÖÕ¶Ë£¬¶¨Î»µ½res.qrcµÄĿ¼Ï£¬ÊäÈëÃüÁî

rcc -binary .\res.qrc -o plane.rcc

ÊäÈëÃüÁî

4.5 ¸´ÖÆrccÎļþ

½«Éú³ÉºÃµÄrccÎļþ£¬·ÅÈëµ½debugͬ¼¶Ä¿Â¼ÖÐÒ»·Ý

¸´ÖÆrccÎļþ

4.6 ×¢²á¶þ½øÖÆÎļþ

ÔÚconfig.hÖÐ×·¼ÓÅäÖÃÊý¾Ý

#define GAMERESPATH "./plane.rcc"     //rccÎļþ·¾¶

ÔÚmain.cppÖÐÐ޸ĴúÂë

#include "mainscene.h"

#include

#include

#include "config.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    //×¢²áÍⲿµÄ¶þ½øÖÆ×ÊÔ´Îļþ

    QResource::registerResource(GAME_RES_PATH);

    MainScene w;

    w.show();

    return a.exec();

´Ëʱ£¬qrcÎļþÒѾ­Ã»ÓÃÁË£¬É¾³ý¼´¿É£¡

×î¼òµ¥µÄɾ³ý·½Ê½¾ÍÊÇ .pro¹¤³ÌÎļþÖÐɾ³ý´úÂë,Ó빤³ÌÎ޹ϸð

ɾ³ýÒÔÏ´úÂ룺
RESOURCES += \ res.qrc

4.7 Ìí¼Óͼ±ê×ÊÔ´

ÅäÖÃÎļþconfig.hÖÐ×·¼Ó´úÂë

ÐéÄâ×ÊԴ·¾¶Óï·¨ÈçÏ£º

" : + ǰ׺Ãû + Îļþ·¾¶ "

#define GAME_ICON ":/res/app.ico"

ÔÚmainScene.cppµÄ initSceneº¯ÊýÖÐ×·¼Ó´úÂ룺

 //ÉèÖÃͼ±ê×ÊÔ´
setWindowIcon(QIcon( GAME_ICON));     //¼ÓÍ·Îļþ #include <QIcon>

ÔËÐвâÊÔ£º

Ìí¼Óͼ±ê×ÊÔ´

5¡¢µØÍ¼¹ö¶¯

²½Ö裺

·´´½¨µØÍ¼ÎļþºÍÀà

·Ìí¼Ó³ÉÔ±º¯ÊýºÍ³ÉÔ±ÊôÐÔ ÊµÏÖ³ÉÔ±º¯Êý

·ÓÎÏ·ÔËÐе÷Óö¨Ê±Æ÷

·Æô¶¯¶¨Ê±Æ÷£¬¼àÌý¶¨Ê±Æ÷ÐźÅʵÏÖÓÎÏ·Ñ­»·

    -¼ÆËãÓÎÏ·ÄÚÔªËØ×ø±ê

    -»æÖƵ½ÆÁÄ»ÖÐ

5.1 ´´½¨µØÍ¼ÎļþºÍÀà

ÓÒ¼üÏîÄ¿£¬Ìí¼ÓÐÂÎļþ

Ìí¼ÓÐÂÎļþ


Ñ¡ÔñC++ -> C++ Class

Ñ¡ÔñC++


ÐÞ¸ÄÀàÃûΪmap£¬µã»÷ÏÂÒ»²½£¬Ö±µ½´´½¨Íê±Ï

ÐÞ¸ÄÀàÃû

ÖÁ´Ë£¬µØÍ¼MapµÄÎļþºÍÀà´´½¨Íê±Ï

5.2 µØÍ¼µÄ³ÉÔ±º¯ÊýºÍ³ÉÔ±ÊôÐÔ

ÔÚmap.hÖÐÌí¼ÓÈçÏ´úÂë

#ifndef MAP_H

#define MAP_H

#include(Qpixmap)

class Map {
public:
    //¹¹Ô캯Êý
    Map();

   //µØÍ¼¹ö¶¯×ø±ê¼ÆËã

   void mapPosition();

public:

    //µØÍ¼Í¼Æ¬¶ÔÏó

    QPixmap m_map1;

    QPixmap m_map2;

    //µØÍ¼YÖá×ø±ê

    int m_map1_posY;

    int m_map2_posY;

    //µØÍ¼¹ö¶¯·ù¶È

    int m_scroll_speed;

};

endif // MAP_H

5.3 ʵÏÖ³ÉÔ±º¯Êý

ÔÚconfig.hÖÐÌí¼ÓеÄÅäÖÃÊý¾Ý

 /********** µØÍ¼ÅäÖÃÊý¾Ý **********/

define MAPPATH ":/res/imgbglevel1.jpg"     //µØÍ¼Í¼Æ¬Â·¾¶

define MAPSCROLLSPEED 2     //µØÍ¼¹ö¶¯ËÙ¶È

ÔÚmap.cppÖÐʵÏÖ³ÉÔ±º¯Êý

#include "map.h"

#include "config.h"

Map::Map()
{
    //³õʼ»¯¼ÓÔØµØÍ¼¶ÔÏó
    mmap1.load(MAPPATH);
    mmap2.load(MAPPATH);

   
    //ÉèÖõØÍ¼ÆäʵyÖá×ø±ê

    m_map1_posY = -GAME_HEIGHT;

    m_map2_posY = 0;

    //ÉèÖõØÍ¼¹ö¶¯ËÙ¶È

    m_scroll_speed = MAP_SCROLL_SPEED;

}

void Map::mapPosition()
{
    //´¦ÀíµÚÒ»ÕÅͼƬ¹ö¶¯
    mmap1posY += MAPSCROLLSPEED;
    if(mmap1posY >= 0)
    {
        mmap1posY =-GAME_HEIGHT;
   }

        //´¦ÀíµÚ¶þÕÅͼƬ¹ö¶¯

        m_map2_posY += MAP_SCROLL_SPEED;

        if(m_map2_posY >= GAME_HEIGHT )

       {

            m_map2_posY =0;

       }

}

5.4 ¶¨Ê±Æ÷Ìí¼Ó

ÔÚmainScene.hÖÐÌí¼ÓÐµĶ¨Ê±Æ÷¶ÔÏó

QTimer m_Timer;

ÔÚ config.hÖÐÌí¼Ó ÆÁĻˢмä¸ô

#define GAME_RATE 10         //ˢмä¸ô£¬Ö¡ÂÊ µ¥Î»ºÁÃë

ÔÚMainScene.cppµÄinitSceneÖÐ×·¼Ó´úÂë

//¶¨Ê±Æ÷ÉèÖÃ
m_Timer.setInterval(GAME_RATE);

5.5 Æô¶¯¶¨Ê±Æ÷ʵÏÖµØÍ¼¹ö¶¯

ÔÚMainScene.hÖÐÌí¼ÓеijÉÔ±º¯ÊýÒÔ¼°³ÉÔ±¶ÔÏó

//Æô¶¯ÓÎÏ· ÓÃÓÚÆô¶¯¶¨Ê±Æ÷¶ÔÏó
void playGame();
//¸üÐÂ×ø±ê
void updatePosition();
//»æÍ¼Ê¼þ
void paintEvent(QPaintEvent *event);

//µØÍ¼¶ÔÏó

Map m_map;

ÔÚMainScene.cppÖÐʵÏÖ³ÉÔ±º¯Êý

void MainScene::playGame()
{
    //Æô¶¯¶¨Ê±Æ÷
    m_Timer.start();

    //¼àÌý¶¨Ê±Æ÷

    connect(&m_Timer,&QTimer::timeout,[=](){
        //¸üÐÂÓÎÏ·ÖÐÔªËØµÄ×ø±ê

        updatePosition();

         //ÖØÐ»æÖÆÍ¼Æ¬

        update();

    });

}

void MainScene::updatePosition()
{
    //¸üеØÍ¼×ø±ê
    m_map.mapPosition();
}

void MainScene::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);

    //»æÖƵØÍ¼

    painter.drawPixmap(0,m_map.m_map1_posY , m_map.m_map1);

    painter.drawPixmap(0,m_map.m_map2_posY , m_map.m_map2);

²âÊÔÔËÐÐÓÎÏ·£¬ÊµÏÖµØÍ¼¹ö¶¯

6¡¢Ó¢ÐÛ·É»ú

²½ÖèÈçÏ£º

·´´½¨Ó¢ÐÛÎļþºÍÀà

·Ìí¼Ó³ÉÔ±º¯ÊýºÍ³ÉÔ±ÊôÐÔ

·ÊµÏÖ³ÉÔ±º¯Êý

·´´½¨·É»ú¶ÔÏó²¢ÏÔʾ

·ÍÏ×§·É»ú

6.1 ´´½¨Ó¢ÐÛÎļþºÍÀà

´´½¨HeroPlaneÀàÒÔ¼°Éú³É¶ÔÓ¦µÄÎļþ

ºÍ´´½¨µØÍ¼µÄ²½ÖèÒ»Ñù£¬ÕâÀï¾Í²»ÔÚÏêϸ½ØÍ¼ÁË

´´½¨ºÃºóÉú³ÉHeroPlane.h ºÍ HeroPlane.cppÁ½¸öÎļþ

´´½¨Ó¢ÐÛÎļþ

6.2 ·É»úµÄ³ÉÔ±º¯ÊýºÍ³ÉÔ±ÊôÐÔ

ÔÚHeroPlane.hÖÐÌí¼Ó´úÂë

 class HeroPlane
{
    public: HeroPlane();

    //·¢Éä×Óµ¯

    void shoot();

    //ÉèÖ÷ɻúλÖÃ

    void setPosition(int x, int y);

public:
    //·É»ú×ÊÔ´ ¶ÔÏó
    QPixmap m_Plane;

    //·É»ú×ø±ê

    int m_X;

    int m_Y;

    //·É»úµÄ¾ØÐα߿ò

    QRect m_Rect;

}; 

6.3 ³ÉÔ±º¯ÊýʵÏÖ

ÕâÀï·É»úÓиö·¢Éä×Óµ¯µÄ³ÉÔ±º¯Êý£¬ÓÉÓÚÎÒÃÇ»¹Ã»ÓÐ×ö×Óµ¯

Òò´ËÕâ¸ö³ÉÔ±º¯ÊýÏÈд³É¿ÕʵÏÖ¼´¿É

ÔÚconfig.hÖÐ×·¼Ó·É»úÅäÖòÎÊý

/********** ·É»úÅäÖÃÊý¾Ý **********/

define HERO_PATH ":/res/hero2.png"

heroPlane.cppÖÐʵÏÖ³ÉÔ±º¯Êý´úÂ룺

#include "heroplane.h"

#include "config.h"

HeroPlane::HeroPlane()
{
    //³õʼ»¯¼ÓÔØ·É»úͼƬ×ÊÔ´
    mPlane.load(HEROPATH);

    //³õʼ»¯×ø±ê

    m_X = GAME_WIDTH * 0.5 - m_Plane.width()*0.5;

    m_Y = GAME_HEIGHT - m_Plane.height();

   //³õʼ»¯¾ØÐοò

    m_Rect.setWidth(m_Plane.width());

    m_Rect.setHeight(m_Plane.height());

    m_Rect.moveTo(m_X,m_Y);

}

void HeroPlane::setPosition(int x, int y)
{
    mX = x;
    mY = y;
    m_Rect.moveTo(mX,mY);
}

void HeroPlane::shoot()
{

}

6.4 ´´½¨·É»ú¶ÔÏó²¢ÏÔʾ

ÔÚMainScene.hÖÐ×·¼ÓеijÉÔ±ÊôÐÔ

//·É»ú¶ÔÏó
HeroPlane m_hero;

ÔÚMainScene.cppµÄpaintEventÖÐ×·¼Ó´úÂë

//»æÖÆÓ¢ÐÛ
painter.drawPixmap(m_hero.m_X,m_hero.m_Y,m_hero.m_Plane);

²âÊÔ·É»úÏÔʾµ½ÆÁÄ»ÖÐ

·É»ú´óÕ½²âÊÔ

6.5 ÍÏ×§·É»ú

ÔÚMainScene.hÖÐÌí¼ÓÊó±êÒÆ¶¯Ê¼þ

//Êó±êÒÆ¶¯Ê¼þ
void mouseMoveEvent(QMouseEvent *event);

ÖØÐ´Êó±êÒÆ¶¯Ê¼þ

void MainScene::mouseMoveEvent(QMouseEvent event)
{
    int x = event->x() - mhero.mRect.width()0.5;     //Êó±êλÖà - ·É»ú¾ØÐεÄÒ»°ë
    int y = event->y() - mhero.mRect.height()*0.5;


     //±ß½ç¼ì²â

    if(x <= 0 )

{

    x = 0;

}

if(x >= GAME_WIDTH - m_hero.m_Rect.width())

{

    x = GAME_WIDTH - m_hero.m_Rect.width();

}

if(y <= 0)

{

    y = 0;

}

if(y >= GAME_HEIGHT - m_hero.m_Rect.height())

{

    y = GAME_HEIGHT - m_hero.m_Rect.height();

}

m_hero.setPosition(x,y);

}

²âÊÔ·É»ú¿ÉÒÔÍÏ×§

·É»ú²âÊÔ2

7¡¢×Óµ¯ÖÆ×÷

ÖÆ×÷²½ÖèÈçÏ£º

·´´½¨×Óµ¯ÎļþºÍÀà

·Ìí¼Ó×Óµ¯ÀàÖеijÉÔ±º¯ÊýºÍ³ÉÔ±ÊôÐÔ

·ÊµÏÖ³ÉÔ±º¯Êý

·²âÊÔ×Óµ¯

7.1 ´´½¨×Óµ¯ÎļþºÍÀà

´´½¨BulletÀàÒÔ¼°Éú³É¶ÔÓ¦µÄÎļþ

´´½¨ºÃºóÉú³Ébullet.h ºÍ bullet.cppÁ½¸öÎļþ

Éú³ÉÎļþ¼Ð

7.2 ×Óµ¯µÄ³ÉÔ±º¯ÊýºÍ³ÉÔ±ÊôÐÔ

ÔÚBullet.hÖÐÌí¼Ó´úÂë

#ifndef BULLET_H

#define BULLET_H

#include "config.h"

#include<QPixamp>

class Bullet {
    public: Bullet();

    //¸üÐÂ×Óµ¯×ø±ê

void updatePosition();

public:
        //×Óµ¯×ÊÔ´¶ÔÏó
        QPixmap mBullet;
        //×Óµ¯×ø±ê
        int mX;
        int mY;
        //×Óµ¯Òƶ¯ËÙ¶È
        int mSpeed;
        //×Óµ¯ÊÇ·ñÏÐÖÃ
        bool mFree;
        //×Óµ¯µÄ¾ØÐα߿ò£¨ÓÃÓÚÅöײ¼ì²â£©
        QRect mRect;
};

#endif         // BULLET_H

7.3 ×Óµ¯Àà³ÉÔ±º¯ÊýʵÏÖ

ÔÚconfig.hÖÐ×·¼Ó×Óµ¯ÅäÖÃÐÅÏ¢

 /********** ×Óµ¯ÅäÖÃÊý¾Ý **********/

#define BULLETPATH ":/res/bullet11.png"      //×Óµ¯Í¼Æ¬Â·¾¶

#define BULLET_SPEED 5      //×Óµ¯Òƶ¯ËÙ¶È

ÔÚbullet.cppÖÐʵÏÖ³ÉÔ±º¯Êý£¬´úÂëÈçÏ£º

#include "bullet.h"

Bullet::Bullet() {
        //¼ÓÔØ×Óµ¯×ÊÔ´
        mBullet.load(BULLETPATH);

        //×Óµ¯×ø±ê ³õÊ¼×ø±ê¿ÉËæÒâÉèÖ㬺óÆÚ»áÖØÖÃ

        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;

    }

7.4 ²âÊÔ×Óµ¯

×Óµ¯±¾ÉíÓ¦¸ÃÓÉ·É»ú·¢É䣬²âÊÔ½×¶ÎÎÒÃÇдһ¶Î¸¨Öú´úÂ룬¿´¿´Ð§¹û¼´¿É

²âÊÔ¹ýºó£¬ÕâЩ´úÂë¿ÉÒÔɾ³ýµô

ÔÚ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);

ÔËÐгÌÐò£¬´Ëʱ»áÓÐÒ»·¢×Óµ¯´ÓÆÁÄ»ÖÐÉä³ö

×Óµ¯²âÊÔ

²âÊÔÍê±Ïºó£¬²âÊÔ´úÂëɾ³ý»ò×¢Êͼ´¿É

8¡¢Íæ¼Ò·¢Éä×Óµ¯

Íæ¼Ò·¢Éä×Óµ¯ÖÆ×÷²½ÖèÈçÏ£º

·Ó¢ÐÛ·É»úÌí¼ÓеijÉÔ±ÊôÐÔ

·ÊµÏÖ·¢Éä³ÉÔ±º¯Êý

·Ö÷³¡¾°¿ØÖÆ×Óµ¯·¢Éä

8.1 ·É»úÌí¼ÓгÉÔ±ÊôÐÔ

ÔÚconfig.hÖÐÌí¼ÓеÄÅäÖÃÊý¾Ý

#define BULLET_NUM 30        //µ¯Ï»ÖÐ×Óµ¯×ÜÊý

#define BULLET_INTERVAL 20       //·¢Éä×Óµ¯Ê±¼ä¼ä¸ô

ÔÚHeroPlane.hÖÐÐÂÔö³ÉÔ±ÊôÐÔÈçÏ£º

//µ¯Ï»
Bullet mbullets[BULLETNUM];

//·¢Éä¼ä¸ô¼Ç¼

int m_recorder;

8.2 ³ÉÔ±º¯Êý²¹³ä

ÔÚ¹¹Ô캯Êý HeroPlane Öгõʼ»¯·¢Éú¼ä¸ô¼Ç¼

//³õʼ»¯·¢Éä¼ä¸ô¼Ç¼
m_recorder = 0;

֮ǰÔÚÓ¢ÐÛ·É»úÀàÖÐÔ¤ÁôµÄÒ»¸öshootº¯ÊýÎÒÃǽøÐÐʵÏÖ£¬´úÂëÈçÏ£º

void HeroPlane::shoot() {
        //ÀÛ¼Óʱ¼ä¼ä¸ô¼Ç¼±äÁ¿
        mrecorder++;
        //ÅжÏÈç¹û¼Ç¼Êý×Ö£¬Î´´ïµ½·¢Éä¼ä¸ô£¬Ö±½Ó
        return if(mrecorder < BULLETINTERVAL) { return; }
        //µ½´ï·¢Éäʱ¼ä´¦Àí
        //ÖØÖ÷¢Éäʱ¼ä¼ä¸ô¼Ç¼
        mrecorder = 0;

        //·¢Éä×Óµ¯

        for(int i = 0 ; i < BULLET_NUM;i++)

        {

            //Èç¹ûÊÇ¿ÕÏеÄ×Óµ¯½øÐз¢Éä

            if(m_bullets[i].m_Free)

        {

                //½«¸Ä×Óµ¯¿ÕÏÐ״̬¸ÄΪ¼Ù

                m_bullets[i].m_Free = false;

                //ÉèÖ÷¢ÉäµÄ×Óµ¯×ø±ê

               m_bullets[i].m_X = m_X + m_Rect.width()*0.5 - 10;

               m_bullets[i].m_Y = m_Y - 25 ;

               break;

         }

     }

}

8.3 Ö÷³¡¾°ÖÐʵÏÖ·¢Éä×Óµ¯

ÔÚMainScene.cppµÄupdatePosition³ÉÔ±º¯ÊýÖÐ×·¼ÓÈçÏ´úÂë

//·¢Éä×Óµ¯
m_hero.shoot();
//¼ÆËã×Óµ¯×ø±ê
for(int i = 0 ;i < BULLET_NUM;i++)
{
    //Èç¹û×Óµ¯×´Ì¬Îª·Ç¿ÕÏУ¬¼ÆËã·¢ÉäλÖÃ
    if(!m_hero.m_bullets[i].m_Free)
    {
        m_hero.m_bullets[i].updatePosition();
    }
}

ÔÚMainScene.cppµÄpaintEvent³ÉÔ±º¯ÊýÖÐ×·¼ÓÈçÏ´úÂ룺

//»æÖÆ×Óµ¯
for(int i = 0 ;i < BULLET_NUM;i++)
{
      //Èç¹û×Óµ¯×´Ì¬Îª·Ç¿ÕÏУ¬¼ÆËã·¢ÉäλÖÃ
      if(!m_hero.m_bullets[i].m_Free)
      {
                painter.drawPixmap(m_hero.m_bullets[i].m_X,m_hero.m_bullets[i].m_Y,m_hero.m_bullets[i].m_Bullet);        
       }
}

²âÊÔÔËÐУ¬Íæ¼Ò¿ÉÒÔ·¢Éä×Óµ¯

²âÊÔÍæ¼Ò·¢×Óµ¯

9¡¢µÐ»úÖÆ×÷

µÐ»úÖÆ×÷Óë×Óµ¯ÖÆ×÷Ô­ÀíÀàËÆ£¬Ò²ÊÇÿ¸ôÒ»¶¨µÄʱ¼äÈõлú³ö³¡

ÖÆ×÷²½ÖèÈçÏ£º

·´´½¨µÐ»úÎļþºÍÀà

·Ìí¼ÓµÐ»úÀàÖеijÉÔ±º¯ÊýºÍ³ÉÔ±ÊôÐÔ

·ÊµÏÖ³ÉÔ±º¯Êý

·µÐ»ú³ö³¡

·²âÊԵлú

9.1 ´´½¨µÐ»úÎļþºÍÀà

´´½¨EnemyPlaneÀàÒÔ¼°Éú³É¶ÔÓ¦µÄÎļþ

´´½¨ºÃºóÉú³ÉenemyPlane.h ºÍ enemyPlane.cppÁ½¸öÎļþ



9.2 µÐ»ú³ÉÔ±º¯ÊýºÍ³ÉÔ±ÊôÐÔ

ÔÚenemyPlane.hÖÐÌí¼ÓÈçÏ´úÂ룺

#ifndef ENEMYPLANE_H

#define ENEMYPLANE_H

#include<QPixmap>

class EnemyPlane {
public:
    EnemyPlane();

    //¸üÐÂ×ø±ê

    void updatePosition();

public:
    //µÐ»ú×ÊÔ´¶ÔÏó
    QPixmap m_enemy;

    //λÖÃ

    int m_X;

    int m_Y;

    //µÐ»úµÄ¾ØÐα߿ò£¨Åöײ¼ì²â£©

    QRect m_Rect;

    //״̬

    bool m_Free;

    //ËÙ¶È

    int m_Speed;

};

#endif    // ENEMYPLANE_H

9.3 µÐ»ú³ÉÔ±º¯ÊýʵÏÖ

ÔÚconfig.hÖÐ×·¼ÓµÐ»úÅäÖÃÐÅÏ¢

/********** µÐ»úÅäÖÃÊý¾Ý **********/

#define ENEMYPATH ":/res/img-plane5.png"    //µÐ»ú×ÊԴͼƬ

#define ENEMY_SPEED 5    //µÐ»úÒÆ¶¯ËÙ¶È

#define ENEMY_NUM 20    //µÐ»ú×ÜÊýÁ¿

#define ENEMY_INTERVAL 30     //µÐ»ú³ö³¡Ê±¼ä¼ä¸ô

ÔÚenemyPlane.cppÖÐʵÏÖ³ÉÔ±º¯Êý£¬´úÂëÈçÏ£º

EnemyPlane::EnemyPlane()
{
    //µÐ»ú×ÊÔ´¼ÓÔØ
    menemy.load(ENEMYPATH);

    //µÐ»úλÖÃ

    m_X = 0;

    m_Y = 0;

    //µÐ»ú״̬

    m_Free = true;

    //µÐ»úËÙ¶È

    m_Speed = ENEMY_SPEED;

    //µÐ»ú¾ØÐÎ

    m_Rect.setWidth(m_enemy.width());

    m_Rect.setHeight(m_enemy.height());

    m_Rect.moveTo(m_X,m_Y);

}

void EnemyPlane::updatePosition()
{
    //¿ÕÏÐ״̬£¬²»¼ÆËã×ø±ê if(m_Free) { return; }

    m_Y += m_Speed;

    m_Rect.moveTo(m_X,m_Y);

    if(m_Y >= GAME_HEIGHT + m_Rect.height())

    {

        m_Free = true;

    }

9.4 µÐ»ú³ö³¡

ÔÚMainScene.hÖÐ×·¼ÓµÐ»ú³ö³¡µÄ³ÉÔ±º¯Êý

ÔÚMainScene.hÖÐ×·¼ÓµÐ»úÊý×é ºÍ µÐ»ú³ö³¡¼ä¸ô¼Ç¼ µÄ³ÉÔ±ÊôÐÔ

    //µÐ»ú³ö³¡
    void enemyToScene();

    //µÐ»úÊý×é

    EnemyPlane m_enemys[ENEMY_NUM];

    //µÐ»ú³ö³¡¼ä¸ô¼Ç¼

    int m_recorder;

³õʼ»¯¼ä¸ô¼Ç¼ÊôÐÔ,ÔÚMainScene.cppµÄ initScene ³ÉÔ±º¯ÊýÖÐ×·¼Ó

#m_recorder = 0;

ʵÏÖ³ÉÔ±º¯Êý enemyToScene

void MainScene::enemyToScene()
{
    mrecorder++;
    if(mrecorder < ENEMY_INTERVAL)
    {
        return;
    }

    m_recorder = 0;

for(int i = 0 ; i< ENEMY_NUM;i++)

{

    if(m_enemys[i].m_Free)

    {

        //µÐ»ú¿ÕÏÐ״̬¸ÄΪfalse

        m_enemys[i].m_Free = false;

        //ÉèÖÃ×ø±ê

        m_enemys[i].m_X = rand() % (GAME_WIDTH - m_enemys[i].m_Rect.width());

        m_enemys[i].m_Y = -m_enemys[i].m_Rect.height();

        break;

    }

  }

ÔÚPlayGame³ÉÔ±º¯ÊýµÄtimeoutÐźŷ¢ËÍʱºò£¬²Ûº¯ÊýÖÐÊ×ÏÈ×·¼Ó enemyToScene

//µÐ»ú³ö³¡
enemyToScene();

µÐ»ú³ö³§

¸üелú×ø±ê£¬ÔÚupdatePosition³ÉÔ±º¯ÊýÖÐ×·¼Ó´úÂë

//µÐ»ú×ø±ê¼ÆËã
for(int i = 0 ; i< ENEMY_NUM;i++)
{
    //·Ç¿ÕÏелú ¸üÐÂ×ø±ê
    if(m_enemys[i].m_Free == false)
    {
        m_enemys[i].updatePosition();
    }
}

»æÖƵлú£¬ÔÚpaintEvent³ÉÔ±º¯ÊýÖÐ×·¼Ó»æÖƵлú´úÂë

//»æÖƵлú
for(int i = 0 ; i< ENEMY_NUM;i++)
{
    if(m_enemys[i].m_Free == false)
    {
        painter.drawPixmap(m_enemys[i].m_X,m_enemys[i].m_Y,m_enemys[i].m_enemy);
    }
}

Ìí¼ÓËæ»úÊýÖÖ×Ó

ÔÚMainScene.cppÖÐ initScene ³ÉÔ±º¯ÊýÀïÌí¼ÓËæ»úÊýÖÖ×Ó

//Ëæ»úÊýÖÖ×Ó
srand((unsigned int)time(NULL));
//Í·Îļþ
#include <ctime>

ÔËÐвâÊԵлú³ö³¡Ð§¹û

µÐ·½·É»ú³öÏÖ

10¡¢Åöײ¼ì²â

ʵÏÖÅöײ¼ì²â²½ÖèÈçÏ£º

·Ìí¼Ó²¢ÊµÏÖÅöײ¼ì²â³ÉÔ±º¯Êý

·µ÷Óò¢²âÊÔº¯Êý

10.1 Ìí¼Ó²¢ÊµÏÖÅöײ¼ì²âº¯Êý

ÔÚMainScene.hÖÐÌí¼ÓеijÉÔ±º¯Êý

void collisionDetection();

ÔÚMainScene.cppÖÐʵÏָóÉÔ±º¯Êý

void MainScene::collisionDetection()
{
    //±éÀúËùÓзǿÕÏеĵлú
    for(int i = 0 ;i < ENEMYNUM;i++)
    {
        if(menemys[i].m_Free)
        {
            //¿ÕÏзɻú Ìø×ªÏÂÒ»´ÎÑ­»·
            continue;
        }

        //±éÀúËùÓÐ ·Ç¿ÕÏеÄ×Óµ¯

        for(int j = 0 ; j < BULLET_NUM;j++)

    {

        if(m_hero.m_bullets[j].m_Free)

        {

            //¿ÕÏÐ×Óµ¯ Ìø×ªÏÂÒ»´ÎÑ­»·

            continue;

        }

        //Èç¹û×Óµ¯¾ØÐοòºÍµÐ»ú¾ØÐοòÏཻ£¬·¢ÉúÅöײ£¬Í¬Ê±±äΪ¿ÕÏÐ״̬¼´¿É

        if(m_enemys[i].m_Rect.intersects(m_hero.m_bullets[j].m_Rect))

        {

            m_enemys[i].m_Free = true;

            m_hero.m_bullets[j].m_Free = true;

        }

    }

  }

10.2 µ÷Óò¢²âÊÔº¯Êý

ÔÚMainScene.cppÖÐ playGame³ÉÔ±º¯ÊýÀ׷¼ÓÅöײ¼ì²â´úÂë

×·¼Ó¼ì²â´úÂë


ÔËÐв鿴Ч¹û£¬×Óµ¯ºÍµÐ»úÅöײºó»áͬʱÏûʧ

11¡¢±¬Õ¨Ð§¹û

±¬Õ¨Ð§¹û¹¦ÄÜʵÏÖ²½ÖèÈçÏ£º

·´´½¨±¬Õ¨ÎļþºÍÀà

·Ìí¼Ó±¬Õ¨ÀàÖеijÉÔ±º¯ÊýºÍ³ÉÔ±ÊôÐÔ

·ÊµÏÖ³ÉÔ±º¯Êý

·µ÷Óò¢²âÊÔЧ¹û

11.1 ´´½¨±¬Õ¨ÎļþºÍÀà

´´½¨BombÀàÒÔ¼°Éú³É¶ÔÓ¦µÄÎļþ

´´½¨ºÃºóÉú³Ébomb.h ºÍ bomb.cppÁ½¸öÎļþ

´´½¨±¬Õ¨ÎļþºÍÀà

11.2 ±¬Õ¨³ÉÔ±º¯ÊýºÍ³ÉÔ±ÊôÐÔ

ÔÚconfig.hÖмÓÈ뱬ըÅäÖÃÊý¾Ý

define BOMB_PATH ":/res/bomb-%1.png"    //±¬Õ¨×ÊԴͼƬ

define BOMB_NUM 20    //±¬Õ¨ÊýÁ¿

define BOMB_MAX 7    //±¬Õ¨Í¼Æ¬×î´óË÷Òý

define BOMB_INTERVAL 20    //±¬Õ¨ÇÐͼʱ¼ä¼ä¸ô

ÔÚbomb.hÖÐÌí¼ÓÈçÏ´úÂ룺

#ifndef BOMB_H

#define BOMB_H

#include "config.h"

#include <QPixmap>

#include <QVector>

class Bomb
{
public:
    Bomb();

    //¸üÐÂÐÅÏ¢£¨²¥·ÅͼƬϱê¡¢²¥·Å¼ä¸ô£©

    void updateInfo();

public:

    //·Å±¬Õ¨×ÊÔ´Êý×é

    QVector<QPixmap> m_pixArr;

    //±¬Õ¨Î»ÖÃ

    int m_X;

    int m_Y;

    //±¬Õ¨×´Ì¬

    bool m_Free;

    //±¬Õ¨ÇÐͼµÄʱ¼ä¼ä¸ô

    int m_Recoder;

    //±¬Õ¨Ê±¼ÓÔØµÄͼƬϱê

    int m_index;

};

#endif     // BOMB_H

11.3 ʵÏÖ³ÉÔ±º¯Êý

Bomb::Bomb()
{
    //³õʼ»¯±¬Õ¨Í¼Æ¬Êý×é
    for(int i = 1 ;i <= BOMBMAX ;i++)
    {
        //×Ö·û´®Æ´½Ó£¬ÀàËÆ ":/res/bomb-1.png"
        QString str = QString(BOMBPATH).arg(i);
        mpixArr.pushback(QPixmap(str));
    }

    //³õʼ»¯×ø±ê

    m_X = 0;

    m_Y = 0;

    //³õʼ»¯¿ÕÏÐ״̬

    m_Free = true;

    //µ±Ç°²¥·ÅͼƬϱê

    m_index = 0;

    //±¬Õ¨¼ä¸ô¼Ç¼

    m_Recoder = 0;

}

void Bomb::updateInfo()
{
    //¿ÕÏÐ״̬
    if(m_Free) { return;
}

m_Recoder++;

if(m_Recoder < BOMB_INTERVAL)

{

    //¼Ç¼±¬Õ¨¼ä¸ôδµ½£¬Ö±½Óreturn£¬²»ÐèÒªÇÐͼ

    return;

}

//ÖØÖüǼ

m_Recoder = 0;

//Çл»±¬Õ¨²¥·ÅͼƬ

m_index++;

//×¢£ºÊý×éÖеÄϱê´Ó0¿ªÊ¼£¬×î´óÊÇ6

//Èç¹û¼ÆËãµÄϱê´óÓÚ6£¬ÖØÖÃΪ0

    if(m_index > BOMB_MAX-1)

    {

        m_index = 0;

        m_Free = true;

    }

}


11.4 ¼ÓÈ뱬ըÊý×é

ÔÚMainScene.hÖмÓÈ뱬ըÊý×é ³ÉÔ±ÊôÐÔ

//±¬Õ¨Êý×é
Bomb m_bombs[BOMB_NUM];

ÔÚÅöײ¼ì²â³ÉÔ±º¯ÊýÖУ¬µ±·¢ÉúÅöײʱ£¬ÉèÖñ¬Õ¨¶ÔÏóµÄÐÅÏ¢

//²¥·Å±¬Õ¨Ð§¹û
for(int k = 0 ; k < BOMBNUM;k++) { if(mbombs[k].m_Free) { //±¬Õ¨×´Ì¬ÉèÖÃΪ·Ç¿ÕÏÐ mbombs[k].mFree = false; //¸üÐÂ×ø±ê

                    m_bombs[k].m_X = m_enemys[i].m_X;

                    m_bombs[k].m_Y = m_enemys[i].m_Y;

                    break;

                }

            }

ÔÚ MainScene.cppµÄupdatePositionÖÐ×·¼Ó´úÂë

//¼ÆË㱬ը²¥·ÅµÄͼƬ
for(int i = 0 ; i < BOMB_NUM;i++)
{
    if(m_bombs[i].m_Free == false)
    {
             m_bombs[i].updateInfo();
    }
}

ÔÚ MainScene.cppµÄpaintEvent ÖÐ×·¼Ó»æÖƱ¬Õ¨´úÂë

//»æÖƱ¬Õ¨Í¼Æ¬
for(int i = 0 ; i < BOMB_NUM;i++)
{
    if(m_bombs[i].m_Free == false)
   {        painter.drawPixmap(m_bombs[i].m_X,m_bombs[i].m_Y,m_bombs[i].m_pixArr[m_bombs[i].m_index]);
    }
}

²âÊÔ£¬ÊµÏÖ±¬Õ¨Ð§¹û

±¬Õ¨Ð§¹û

12¡¢ÒôЧÌí¼Ó

ÒôЧÌí¼Ó²½ÖèÈçÏ£º

·Ìí¼Ó¶àýÌåÄ£¿é

·²¥·ÅÒôЧ

12.1 Ìí¼Ó¶àýÌåÄ£¿é

ÔÚ¹¤³ÌÎļþplaneWar.pro ÖÐÐ޸ĴúÂë

QT += core gui multimedia

12.2 ²¥·ÅÒôЧ

ÔÚconfig.hÖÐ Ìí¼ÓÒôЧµÄÅäÖ÷¾¶

#define SOUND_BACKGROUND ":/res/bg.wav"

#define SOUND_BOMB ":/res/bomb.wav"

×¢£º QSoundʹÓÃʱºòÒª°üº¬Í·Îļþ #include<QSound>

ÔÚPlayGameÖÐÌí¼Ó±³¾°ÒôÀÖ

//Æô¶¯±³¾°ÒôÀÖ
QSound::play(SOUND_BACKGROUND);

ÔÚ±¬Õ¨Ê±ºòÌí¼Ó±¬Õ¨ÒôЧ

//²¥·ÅÒôЧ
QSound::play(SOUND_BOMB);

²âÊÔÒôЧ

13¡¢´ò°ü·¢²¼

1¡¢È·¶¨»·¾³±äÁ¿ÅäÖúà PATH: C:\Qt\Qt5.x.x\5.x.x\mingw53_32\bin

2¡¢ÔÚQTÖаÑÔËÐÐģʽÇл»³É release ģʽ£¬ ±àÒë¡£ ÔÚÍâ²ãĿ¼ÖлáÓÐ release °æ±¾µÄĿ¼.

3¡¢½«Ä¿Â¼ÖÐµÄ rcc ¶þ½øÖÆ×ÊÔ´Îļþ¡¢¿ÉÖ´ÐгÌÐòÎļþ(.exe) ¿½±´µ½ÁíÍâÒ»¸öµ¥¶ÀµÄÎļþ¼ÐÖÐ.

4¡¢½øÈë cmd ÃüÁîģʽ£¬Çл»µ½¿ÉÖ´ÐгÌÐòËùÔÚµÄĿ¼. Ö´ÐÐÒÔÏÂÃüÁ½«¿ÉÖ´ÐгÌÐòËùÐèµÄ¿âÎļþ¿½±´µ½µ±Ç°Ä¿Â¼:

windeployqt PlaneWar.exe

5¡¢¶îÍâ¿ÉÒÔ½« ico ͼ±êÒ²¿½±´µ½µ±Ç°¿ÉÖ´ÐгÌÐòËùÔÚµÄĿ¼¡£

6¡¢Æô¶¯ HM NIS EDIT Èí¼þ£¬ÔÚÈí¼þÖÐÑ¡Ôñ: Îļþ->н¨½Å±¾Ïòµ¼£¬ ½ÓÏÂÀ´¸ú×ÅÏòµ¼²Ù×÷.

7¡¢ÎªÁËÈð²×°°ü°²×°Èí¼þÒ²Óпì½Ý·½Ê½Í¼±ê£¬ÔÚÉú³ÉµÄ½Å±¾Àï¡£½øÐÐÐ޸ģº

CreateShortCut "$DESKTOP\·É»ú´óÕ½.lnk" "$INSTDIR\PlaneWar.exe"
CreateShortCut "$DESKTOP\·É»ú´óÕ½.lnk" "$INSTDIR\PlaneWar.exe" "" "$INSTDIR\app.ico"

8¡¢µã»÷²Ëµ¥À¸µÄ NSIS £¬È»ºóÑ¡Ôñ±àÒ룬ÔÚ×ÀÃæÉú³É°²×°°ü¡£

0 ·ÖÏíµ½£º
ºÍÎÒÃÇÔÚÏß½»Ì¸£¡
¡¾ÍøÕ¾µØÍ¼¡¿¡¾sitemap¡¿