QT之植物大战僵尸进入页面设计

person 匿名

发布日期: 2020-08-24 14:35:19 浏览量: 80
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

首页面

首先呢,首页面是由一个工具栏,以及一个冒险模式按钮,背景图,加背景音乐组成。

工具栏就直接使用了QT的ui界面布局,拖拉形成 ,其中只有一个退出按钮。

退出按钮的信号槽

  1. connect(ui->actiontuichu,&QAction::triggered,[=](){this->close();});

冒险模式按钮

  1. QString Img=":/graphics/Screen/Adventure_0.png";
  2. QPushButton * StartBtn = new QPushButton(this);
  3. StartBtn->move(this->width()*0.55,this->height()*0.2);
  4. QPixmap pix;
  5. pix.load(Img);
  6. StartBtn->setFixedSize( pix.width(),pix.height()); //设置图片固定大小
  7. StartBtn->setStyleSheet("QPushButton{border:0px;}"); //设置不规则图片样式
  8. StartBtn->setIcon(pix); //设置图标
  9. StartBtn->setIconSize(QSize(pix.width(),pix.height())); //设置图标大小

特点是要求按钮是以图片的形式,并且通过使用切换原图给它添加的点击闪烁特效让它更生动。

背景图

  1. void MainScene::paintEvent(QPaintEvent *)
  2. {
  3. QPainter painter(this);
  4. QPixmap pix;
  5. pix.load(":/graphics/Screen/MainMenu.png");
  6. painter.drawPixmap(0,0,this->width(),this->height(),pix);
  7. }

特点是使用绘画事件。

背景音乐

方法一:

  1. QMediaPlayer *startplayer = new QMediaPlayer;
  2. connect(startplayer, SIGNAL(positionChanged(qint64)), this, SLOT(positionChanged(qint64)));
  3. startplayer->setMedia(QUrl::fromLocalFile("D:/Qt/Project/Piants vs. Zombies/PiantsVSZombies/graphics/Screen/Faster.wav"));
  4. startplayer->setVolume(100); //0~100音量范围,默认是100
  5. startplayer->play();

方法二:

  1. QSound * startSound = new QSound( ":/graphics/audio/bleep.wav",this);
  2. QSound::play(":/graphics/Screen/Faster.wav");
  3. startSound->setLoops(-1);
  4. startSound->play();

我原本使用方法二,但是方法二只能用wav文件,且适合短暂的音效(好吧,我试了使用短暂的音效 也不行 不知道为什么 看着网上人家的视频可以。。。)

所以我使用了方法一,但是还是遇到一个问题,相对路径,播放不了,绝对路径才行,这样一来就很难受,如果我要打包这游戏给别人玩,别人安装路径和我设置不一样就听不到音效了,这也是我还需要克服的一个难点。

首页面

这个时候我们需要实现“点击冒险模式进入下一页面”的功能,显然我们需要connect点击按钮信号以及切换页面的槽函数。

首先是要新建一个地图选择页面:

然后在mainscene.h里面#include”chooselevelscene.h”:

再会回到 mainscene.cpp文件里 connect:

这样你就可以实现切换页面啦。

选择地图页面

然后就是对选择地图页面进行布局,这个我没有添加ui界面,所以使用纯代码敲出那些控件。具体如下:

然后就是建立了6个按钮 分别进入到6个同的地图(目前我只做了一个地图,所以有5个会弹出以下这个)

唯一有用的按钮是这个:

  1. playScene =new PlayScene;
  2. QPushButton * Btn1 = new QPushButton("早晨草原",this);
  3. Btn1->resize( 212,40); //重置按钮大小
  4. Btn1->move(180,224);
  5. Btn1->setStyleSheet("QPushButton{font-family:'楷体';font-size:28px;}\
  6. QPushButton:hover{background-color:rgb(50, 170, 200)}");
  7. connect(Btn1,&QPushButton::clicked,[=](){ //进入第一个地图
  8. playScene->setGeometry(this->geometry());
  9. this->hide();
  10. playScene->show();
  11. });

也是切页,和上述具体操作差不多。

下一期就要讲如何实现植物大战僵尸的游戏主体部分了。

上传的附件 cloud_download Piants vs. Zombies.zip ( 56.66mb, 12次下载 )
eject