QtSensors.qtsensors-maze-example
src="https://assets.ubuntu.com/v1/f7525235-maze.png" alt="" />
Maze in QML
To write a QML application that will use the TiltSensor QML sensors type you need to do the following steps:
Import the QtSensors 5.x declarative plugin:
import QtSensors 5.0
Add the Sensor QML types into your qml file.
In this example we use the TiltSensor with values based in degrees and an accuracy of 5 degree:
TiltSensor { id: tiltSensor active: true }
Starting the sensor can be done by setting the 'enabled' property to true:
onTriggered: { if (!tiltSensor.enabled) tiltSensor.active = true;
The mouse should move by a factor of the tilt value:
var xstep = 0; xstep = tiltSensor.reading.yRotation 0.1 //acceleration var ystep = 0; ystep = tiltSensor.reading.xRotation 0.1 //acceleration
The walk direction of the mouse takes into account some collision detection:
if (xstep < 1 && xstep > 0) xstep = 0 else if (xstep > -1 && xstep < 0) xstep = 0 if (ystep < 1 && ystep > 0) ystep = 0; else if (ystep > -1 && ystep < 0) ystep = 0; if ((xstep < 0 && mouseCtrl.x > 0 && Lib.canMove(mouseCtrl.x + xstep,mouseCtrl.y))) { xval = mouseCtrl.x + xstep; } else if (xstep > 0 && mouseCtrl.x < (Lib.cellDimension (Lib.dimension - 1)) && Lib.canMove(mouseCtrl.x + xstep,mouseCtrl.y)) { xval = mouseCtrl.x + xstep; } else xval = mouseCtrl.x; if (ystep < 0 && mouseCtrl.y > 0 && Lib.canMove(mouseCtrl.x, mouseCtrl.y + ystep)) { yval = mouseCtrl.y + ystep; } else if (ystep > 0 && (mouseCtrl.y < (Lib.cellDimension (Lib.dimension - 1))) && Lib.canMove(mouseCtrl.x, mouseCtrl.y + ystep)) { yval = mouseCtrl.y + ystep; } else yval = mouseCtrl.y mouseCtrl.move(xval, yval);
The rotation of the mouse image is determined according to the angle that the mouse is moving.
var a = newy - mouse.y var b = newx - mouse.x var c = distance(mouse.x, mouse.y, newx, newy) var radians_to_degrees = 57.2957795 if (a > 0) angle = -Math.acos(a / b) radians_to_degrees else angle = -Math.asin(b / c) radians_to_degrees if (b > 0) angle = -Math.acos(a / c) radians_to_degrees else angle = Math.acos(a / c) radians_to_degrees if (angle < 0) angle = 360 + angle img.rotation = angle mouse.x = newx; mouse.y = newy;
Files:
- maze/Congratulation.qml
- maze/LabyrinthSquare.qml
- maze/Mouse.qml
- maze/lib.js
- maze/maze.qml
- maze/android/AndroidManifest.xml
- maze/components/ApplicationWindow.qml
- maze/components/Button.qml
- maze/main.cpp
- maze/maze.pro
- maze/maze.qrc