Я пытаюсь сделать что-то вроде игры с фоном, который прокручивается до бесконечности. Чтобы заставить его работать, я использовал прямоугольник и слой. Слой используется для цвета фона. Слой используется для рисования линии поверх прямоугольника. Я добавляю своего рода смещение, чтобы изменить положение фона, но без какого-либо эффекта ...
import QtQuick 2.0
Item {
id: root;
property color colorBackground: Qt.rgba(0.9, 0.9, 0.9, 1.0);
property color colorStroke: Qt.rgba(0.1, 0.1, 0.1, 1.0);
property real mapPosition: 0.0;
layer.enabled: true;
layer.effect: ShaderEffect {
property color colorStroke: root.colorStroke;
property real widthRectangle: rectangle.width;
property real heightRectangle: rectangle.height;
property real cellSize: rectangle.width / 5;
property real mapPosition: root.mapPosition;
fragmentShader: "
uniform lowp sampler2D source; // this item
uniform highp vec4 colorStroke;
uniform highp float widthRectangle;
uniform highp float heightRectangle;
uniform highp float cellSize;
uniform highp float mapPosition;
varying highp vec2 qt_TexCoord0;
void main() {
lowp vec4 p = texture2D(source, qt_TexCoord0);
gl_FragColor = p;
float x = qt_TexCoord0.x * widthRectangle;
float y = qt_TexCoord0.y * heightRectangle + mapPosition;
if (mod(x, cellSize) <= 1.0)
gl_FragColor = colorStroke;
if (mod(y, cellSize) <= 1.0)
gl_FragColor = colorStroke;
}";
}
Rectangle {
id: rectangle;
color: root.colorBackground;
anchors.fill: parent;
}
}
Чтобы изменить положение, я использую это:
import "GameLogic.js" as GameLogic
Background {
anchors.fill: parent;
mapPosition: GameLogic.mapPosition;
}
Но кажется, что фон вообще не двигается ... Любые идеи?
Это идея. Я буду искать как это сделать





Почему бы просто не использовать два прямоугольника, один за другим?