• 打地鼠游戏(2)


    GraphicsView坐标体系:

    在之前添加一张图片的图元构成的场景被显式时,发现呈现在view中的位置是在中间位置的。这是因为这一张图片尺寸较小,它构成的场景小于GraphicsView容器,所以在中间位置上显式。

    GraphicsView有两套坐标体系:

    1、就是上面提及到的,当场景小于GraphicsView容器时,那么就以容器的中心点作为原点:

    再看下,如果是两张图片构成的场景情况:

     1 #include "myscene.h"
     2 
     3 MyScene::MyScene(QObject *parent) : QGraphicsScene(parent)
     4 {
     5     //添加图元到场景
     6     this->item = new myitem();
     7     this->addItem(this->item);
     8 
     9     myitem* item2 = new myitem();
    10     /*
    11     item2->boundingRect().width()   //图片的宽
    12     setPos(x,y)
    13     */
    14     item2->setPos(item2->boundingRect().width(),item2->boundingRect().height());
    15     this->addItem(item2);
    16 }

    如果增加显式图元到4张,当前场景大小超过了view容器,这时就以左上角作为原点:

    但是,如果将当前窗口进行扩大,又发现显式到view容器的中间了,这就说明,显式选用那种坐标规则,是系统决定的。

    设置打地鼠背景——将显式4x4的上述图片

    场景还是只有一个场景,不过这个场景而是由16个图元构成的,每个图元还是由一个图片构成。

     1 #ifndef MYSCENE_H        //------------------------------------------MyScene.h
     2 #define MYSCENE_H
     3 
     4 #include "myitem.h"
     5 
     6 #include <QObject>
     7 #include <QGraphicsScene>
     8 
     9 class MyScene : public QGraphicsScene
    10 {
    11     Q_OBJECT  /*具备信号与槽能力的关键*/
    12 public:
    13     explicit MyScene(QObject *parent = nullptr);
    14 
    15 signals:
    16 
    17 public slots:
    18 
    19 private:
    20     myitem *item[16]; //当前一个场景由4x4个图元构成,每一个图元都是一张图片构成
    21 };
    22 
    23 #endif // MYSCENE_H

    添加图元到场景:

     1 #include "myscene.h"
     2 
     3 MyScene::MyScene(QObject *parent) : QGraphicsScene(parent)
     4 {
     5 
     6     //添加图元到场景
     7     for(int i = 0;i<16;i++){
     8         this->item[i] = new myitem();
     9         //设置坐标
    10         double x = i/4 * this->item[i]->boundingRect().width();
    11         double y = i%4 * this->item[i]->boundingRect().height();
    12         this->item[i]->setPos(x,y);
    13         this->addItem(this->item[i]);
    14     }
    15 
    16 }
    17 
    18 MyScene::~MyScene(){
    19     for(int i = 0;i<16;i++){
    20         delete this->item[i];
    21     }
    22 }

    演示效果:

    内在的趣味,表面的繁琐
  • 相关阅读:
    String类中的常用方法(Java)
    Struts2的Lambda表达式的使用
    Struts2的环境搭建
    Servlet 3.0
    关于URLWriter的用法
    PrintStream与PrintWriter
    java中的System.nanoTime与System.currentTime
    java多线程之CyclicBarrier类
    多线程java IO之管道流
    消费者与生产者
  • 原文地址:https://www.cnblogs.com/data1213/p/10850634.html
Copyright © 2020-2023  润新知