summaryrefslogtreecommitdiffstats
path: root/basicsuite/sensors/Accelbubble.qml
diff options
context:
space:
mode:
authorRainer Keller <rainer.keller@digia.com>2014-03-19 12:37:19 +0100
committerRainer Keller <rainer.keller@digia.com>2014-04-02 16:14:00 +0300
commit9939d72b1e2f67a7af52cc798ae4fd9742d086f6 (patch)
treec492b8023bbf3c0203556854b679254a38b50121 /basicsuite/sensors/Accelbubble.qml
parent68b1318fd37cef8cda4c33f20a72f49fee9e65d5 (diff)
Make sensors demo not rely on measurement errors
The former implementation only updates the bubble when notified by a sensor changed event. This is not optimal because when the accelerometer is kept at a constant tilt the value does not change anymore but the bubble has to move further nevertheless. Change-Id: I24793b4c8da3fdc75eb3054acd88976d053149e3 Reviewed-by: Topi Reiniƶ <topi.reinio@digia.com> Reviewed-by: Eirik Aavitsland <eirik.aavitsland@digia.com>
Diffstat (limited to 'basicsuite/sensors/Accelbubble.qml')
-rw-r--r--basicsuite/sensors/Accelbubble.qml64
1 files changed, 43 insertions, 21 deletions
diff --git a/basicsuite/sensors/Accelbubble.qml b/basicsuite/sensors/Accelbubble.qml
index 7fba4d4..c5aeefc 100644
--- a/basicsuite/sensors/Accelbubble.qml
+++ b/basicsuite/sensors/Accelbubble.qml
@@ -42,6 +42,33 @@ import QtQuick 2.0
import QtSensors 5.0
Item {
+ function calc() {
+ if (xAnimation.running || yAnimation.running)
+ return
+
+ var newX = (bubble.x + calcRoll(accel.reading.x, accel.reading.y, accel.reading.z) * .8)
+ var newY = (bubble.y - calcPitch(accel.reading.x, accel.reading.y, accel.reading.z) * .8)
+
+ if (newX < 0)
+ newX = 0
+ if (newY < 0)
+ newY = 0
+
+ var right = field.width - bubble.width
+ var bottom = field.height - bubble.height
+
+ if (newX > right)
+ newX = right
+ if (newY > bottom)
+ newY = bottom
+
+ bubble.x = newX
+ bubble.y = newY
+
+ yBehavior.enabled = true
+ xBehavior.enabled = true
+ }
+
Rectangle {
id: field
color: "lightblue"
@@ -52,26 +79,13 @@ Item {
Accelerometer {
id: accel
active:true
- onReadingChanged: {
- var newX = (bubble.x + calcRoll(accel.reading.x, accel.reading.y, accel.reading.z) * .1)
- var newY = (bubble.y - calcPitch(accel.reading.x, accel.reading.y, accel.reading.z) * .1)
-
- if (newX < 0)
- newX = 0
- if (newY < 0)
- newY = 0
-
- var right = field.width - bubble.width
- var bottom = field.height - bubble.height
-
- if (newX > right)
- newX = right
- if (newY > bottom)
- newY = bottom
+ }
- bubble.x = newX
- bubble.y = newY
- }
+ Timer {
+ interval: 100
+ running: true
+ repeat: true
+ onTriggered: calc()
}
Image {
@@ -85,15 +99,23 @@ Item {
smooth: true
Behavior on y {
+ id: yBehavior
+ enabled: false
SmoothedAnimation {
+ id: yAnimation
easing.type: Easing.Linear
- duration: 100
+ duration: 40
+ onRunningChanged: calc()
}
}
Behavior on x {
+ id: xBehavior
+ enabled: false
SmoothedAnimation {
+ id: xAnimation
easing.type: Easing.Linear
- duration: 100
+ duration: 40
+ onRunningChanged: calc()
}
}
}