翻金币游戏-大体介绍和资源文件,主场景,选择关卡场景设置

现在要开始实战做一个翻金币游戏,是这样的环境
在这里插入图片描述
一共二十关,金币一面金色,一面银色。翻一个会使周围四个一起翻转,目标是所有金币都是金色。
首先需要添加这些图片资源,方法不多说,主要是资源包括八张金币不同位置的图片,翻转效果是动态实现的,利用帧数不同位置金币实现。back按钮按下会不同,所以资源文件有两个back按钮。

3.主场景配置
我们创建一个主场景的类。设置宽高,标题等,并且对开始菜单项中的退出按钮进行处理。最后重写绘图事件实现背景图片的插入。
在这里插入图片描述

接下来,我们要实现:按下start按钮(有一个跳跃的特效,让用户知道按下了按钮),然后跳到选择关卡的界面。

默认的按钮是没有跳跃效果的。所以需要自定义一个按钮mypushbotton,这个点前面也说过。

mypushbutton::mypushbutton(QString normalImg,QString pressImg)
 {
     this->normalImgPath=normalImg;
     this->pressImgPath=pressImg;
     QPixmap pix;
     bool ret=pix.load(normalImg);
     if(!ret)
     {
         qDebug()<<"加载失败";
         return;
     }
     this->setFixedSize(pix.width(),pix.height());//设置按钮的宽高,和图片资源一样
     this->setIcon(pix);//设置图标
     this->setIconSize(QSize(pix.width(),pix.height()));//设置图标大小
 }

 void mypushbutton::zoom1()
 {
     //创建动态对象
     QPropertyAnimation * animation = new QPropertyAnimation(this,"geometry");
     //设置动画时间间隔
     animation->setDuration(200);

     //起始位置
     animation->setStartValue(QRect(this->x(),this->y(),this->width(),this->height()));
     //结束位置
     animation->setEndValue(QRect(this->x(),this->y()+10,this->width(),this->height()));

     //设置弹跳曲线
     animation->setEasingCurve(QEasingCurve::OutBounce);

     //执行动画
     animation->start();

 }
 void mypushbutton::zoom2()
 {
     //创建动态对象
     QPropertyAnimation * animation = new QPropertyAnimation(this,"geometry");
     //设置动画时间间隔
     animation->setDuration(200);

     //起始位置
     animation->setStartValue(QRect(this->x(),this->y()+10,this->width(),this->height()));
     //结束位置
     animation->setEndValue(QRect(this->x(),this->y(),this->width(),this->height()));

     //设置弹跳曲线
     animation->setEasingCurve(QEasingCurve::OutBounce);

     //执行动画
     animation->start();

 }

这两部分是设置开始按钮和图标。

 mypushbutton *startbtn=new mypushbutton(":/res/MenuSceneStartButton.png");
    startbtn->setParent(this);
    startbtn->move(this->width()*0.5-startbtn->width()*0.5,this->height()*0.7);
    //startbtn->show();
    connect(startbtn,&mypushbutton::clicked,[=](){
        qDebug() << "点击了开始";
        //做弹起特效
        startbtn->zoom1(); //向下跳跃
        startbtn->zoom2(); //向上跳跃

这一部分是创建并显示出来。其中zoom其实就是一个跳跃的动画效果,不做也不影响游戏本身。

接下来,我们要实现按下开始按钮跳到选择关卡的场景。
必然的,需要新建一个选择关卡场景的类。然后点击开始,隐藏主场景,跳到选择关卡场景。

QTimer::singleShot(500,this,[=](){
               //自身隐藏
               this->hide();
               //显示选择关卡场景
               choosescene->show();
           });

这一段代码就在开始按钮的信号槽函数里面追加。
这样点击就会跳到一个新的空白的界面。接下来设置选择关卡的大小背景等。

chooselevel::chooselevel(QWidget *parent) : QMainWindow(parent)
{
    //配置选择关卡场景
    //设置窗口固定大小
    this->setFixedSize(320,588);
    //设置图标
    this->setWindowIcon(QPixmap(":/res/Coin0001.png"));
    //设置标题
    this->setWindowTitle("选择关卡");

    //创建菜单栏
    QMenuBar * bar = this->menuBar();
    this->setMenuBar(bar);
    //创建开始菜单
    QMenu * startMenu = bar->addMenu("开始");
    //创建按钮菜单项
    QAction * quitAction = startMenu->addAction("退出");
    //点击退出 退出游戏
    connect(quitAction,&QAction::triggered,[=]()
    {
        this->close();
    });
}
void chooselevel::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QPixmap pix;
pix.load(":/res/OtherSceneBg.png");
painter.drawPixmap(0,0,this->width(),this->height(),pix);

//加载标题
pix.load(":/res/Title.png");
painter.drawPixmap( (this->width() - pix.width())*0.5,30,pix.width(),pix.height(),pix);

}

接下来我们需要实现关卡按钮的设置,可以把这个按钮看成mypushbutton类的一个对象。
实现很容易,只是要实现矩阵形状的,我们要设置关卡按钮的位置。当然两层for循环可以,一层也能实现,通过取余取模,因为逻辑上二维,物理排列上实际可以看成是一维的。
在这里插入图片描述
到这里,选择关卡场景也布置完毕,接下来就是游戏场景了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值