108 lines
2.7 KiB
QML
108 lines
2.7 KiB
QML
// Copyright (C) 2021 The Qt Company Ltd.
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
|
|
|
import QtQuick
|
|
import QtQuick.Particles
|
|
|
|
pragma ComponentBehavior: Bound
|
|
|
|
Rectangle {
|
|
id: root
|
|
color: "black"
|
|
width: 640
|
|
height: 480
|
|
ParticleSystem {
|
|
id: sys
|
|
}
|
|
ImageParticle {
|
|
system: sys
|
|
source: "qrc:///particleresources/glowdot.png"
|
|
color: "white"
|
|
colorVariation: 1.0
|
|
alpha: 0.1
|
|
}
|
|
|
|
Component {
|
|
id: emitterComp
|
|
Emitter {
|
|
id: container
|
|
Emitter {
|
|
id: emitMore
|
|
system: sys
|
|
emitRate: 128
|
|
lifeSpan: 600
|
|
size: 16
|
|
endSize: 8
|
|
velocity: AngleDirection {
|
|
angleVariation: 360
|
|
magnitude: 60
|
|
}
|
|
}
|
|
|
|
property int life: 2600
|
|
property real targetX: 0
|
|
property real targetY: 0
|
|
function go() {
|
|
xAnim.start()
|
|
yAnim.start()
|
|
container.enabled = true
|
|
}
|
|
system: sys
|
|
emitRate: 32
|
|
lifeSpan: 600
|
|
size: 24
|
|
endSize: 8
|
|
NumberAnimation on x {
|
|
id: xAnim;
|
|
to: container.targetX
|
|
duration: container.life
|
|
running: false
|
|
}
|
|
NumberAnimation on y {
|
|
id: yAnim;
|
|
to: container.targetY
|
|
duration: container.life
|
|
running: false
|
|
}
|
|
Timer {
|
|
interval: container.life
|
|
running: true
|
|
onTriggered: container.destroy()
|
|
}
|
|
}
|
|
}
|
|
|
|
function customEmit(x, y) {
|
|
//! [0]
|
|
for (var i = 0; i < 8; i++) {
|
|
let obj = emitterComp.createObject(root)
|
|
obj.x = x
|
|
obj.y = y
|
|
obj.targetX = Math.random() * 240 - 120 + obj.x
|
|
obj.targetY = Math.random() * 240 - 120 + obj.y
|
|
obj.life = Math.round(Math.random() * 2400) + 200
|
|
obj.emitRate = Math.round(Math.random() * 32) + 32
|
|
obj.go()
|
|
}
|
|
//! [0]
|
|
}
|
|
|
|
Timer {
|
|
interval: 10000
|
|
triggeredOnStart: true
|
|
running: true
|
|
repeat: true
|
|
onTriggered: root.customEmit(Math.random() * 320, Math.random() * 480)
|
|
}
|
|
TapHandler {
|
|
onTapped: function(event) { root.customEmit(event.pressPosition.x, event.pressPosition.y) }
|
|
}
|
|
|
|
Text {
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
text: qsTr("Click Somewhere")
|
|
color: "white"
|
|
font.pixelSize: 24
|
|
}
|
|
}
|