zoukankan      html  css  js  c++  java
  • 打地鼠游戏(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 }

    演示效果:

    内在的趣味,表面的繁琐
  • 相关阅读:
    html自定义加载动画
    数据结构与算法:贪心算法简介
    WEB 前端常用字体和色值你知道多少?
    为什么浮点精度运算会有问题
    Java 字符串格式示例
    使用 Java 和 Maven (JBake) 生成静态网站
    硅谷钢铁侠
    Flink中的5种窗口使用场景
    prometheus-operator监控k8s资源
    fluentd收集k8s集群pod日志
  • 原文地址:https://www.cnblogs.com/data1213/p/10850634.html
Copyright © 2011-2022 走看看