From a0b89b80c933cca852e62cc73208cdbc0d3dcc25 Mon Sep 17 00:00:00 2001 From: Lorn Potter Date: Tue, 29 May 2012 13:49:12 +1000 Subject: make mouse move better ine Maze example, add acceleration. Fix up docs Use only one mouse gif and rotate it instead. also add screensaver inhibit. Change-Id: I4268bdec9346ee389e9b485e8c37d43a1e607128 Reviewed-by: Lincoln Ramsay --- doc/src/examples/maze.qdoc | 11 +- examples/QtSensors/QtSensors_maze/Mouse.qml | 76 +++++--------- .../QtSensors/QtSensors_maze/QtSensors_maze.qml | 115 ++++++++++----------- .../QtSensors_maze/content/mouse_left.gif | Bin 970 -> 0 bytes .../QtSensors_maze/content/mouse_leftdown.gif | Bin 976 -> 0 bytes .../QtSensors_maze/content/mouse_leftup.gif | Bin 976 -> 0 bytes .../QtSensors_maze/content/mouse_right.gif | Bin 971 -> 0 bytes .../QtSensors_maze/content/mouse_rightdown.gif | Bin 977 -> 0 bytes .../QtSensors_maze/content/mouse_rightup.gif | Bin 975 -> 0 bytes .../QtSensors/QtSensors_maze/content/mouse_up.gif | Bin 970 -> 0 bytes examples/QtSensors/QtSensors_maze/lib.js | 8 +- 11 files changed, 99 insertions(+), 111 deletions(-) delete mode 100644 examples/QtSensors/QtSensors_maze/content/mouse_left.gif delete mode 100644 examples/QtSensors/QtSensors_maze/content/mouse_leftdown.gif delete mode 100644 examples/QtSensors/QtSensors_maze/content/mouse_leftup.gif delete mode 100644 examples/QtSensors/QtSensors_maze/content/mouse_right.gif delete mode 100644 examples/QtSensors/QtSensors_maze/content/mouse_rightdown.gif delete mode 100644 examples/QtSensors/QtSensors_maze/content/mouse_rightup.gif delete mode 100644 examples/QtSensors/QtSensors_maze/content/mouse_up.gif diff --git a/doc/src/examples/maze.qdoc b/doc/src/examples/maze.qdoc index ed2aeabc..d9f561e7 100644 --- a/doc/src/examples/maze.qdoc +++ b/doc/src/examples/maze.qdoc @@ -51,8 +51,17 @@ \snippet ../examples/QtSensors/QtSensors_maze/QtSensors_maze.qml 2 - To determine the walk direction of the mouse we use the following if -else statements: + The mouse should move by a factor of the tilt value: \snippet ../examples/QtSensors/QtSensors_maze/QtSensors_maze.qml 3 + + The walk direction of the mouse takes into account some collision detection: + + \snippet ../examples/QtSensors/QtSensors_maze/QtSensors_maze.qml 4 + + The rotation of the mouse image is determined according to the angle that the mouse is moving. + + \snippet ../examples/QtSensors/QtSensors_maze/Mouse.qml 0 + */ diff --git a/examples/QtSensors/QtSensors_maze/Mouse.qml b/examples/QtSensors/QtSensors_maze/Mouse.qml index 55dac18d..434acebb 100644 --- a/examples/QtSensors/QtSensors_maze/Mouse.qml +++ b/examples/QtSensors/QtSensors_maze/Mouse.qml @@ -51,66 +51,46 @@ Item { y: 0 width: Lib.cellDimension height: Lib.cellDimension - state: 'right' + property int angle AnimatedImage { id: img + source: "content/mouse_down.gif" anchors.fill: parent visible: true } - //for different moves we have different gif animations - states: [ - State { - name: "up" - PropertyChanges { target: img; source: "content/mouse_up.gif" } - }, - State { - name: "down" - PropertyChanges { target: img; source: "content/mouse_down.gif" } - }, - State { - name: "left" - PropertyChanges { target: img; source: "content/mouse_left.gif" } - }, - State { - name: "right" - PropertyChanges { target: img; source: "content/mouse_right.gif" } - }, - - State { - name: "rightup" - PropertyChanges { target: img; source: "content/mouse_rightup.gif" } - }, - State { - name: "rightdown" - PropertyChanges { target: img; source: "content/mouse_rightdown.gif" } - }, - State { - name: "leftup" - PropertyChanges { target: img; source: "content/mouse_leftup.gif" } - }, - State { - name: "leftdown" - PropertyChanges { target: img; source: "content/mouse_leftdown.gif" } - } - - ] + function distance(origX, origY, newX, newY) { + return Math.sqrt((Math.pow((newX - origX),2)) + (Math.pow((newY - origY),2))) + } //Function for moving the mouse function move(newx, newy) { - var newstatus = ""; - if (mouse.x < newx) - newstatus += "right"; - else if (mouse.x > newx) - newstatus += "left"; - if (mouse.y < newy) - newstatus += "down"; - else if (mouse.y > newy) - newstatus += "up"; - mouse.state = newstatus; + if (mouse.x === newx && mouse.y === newy) + return + // somehow this actually works +//! [0] + 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; +//! [0] } } diff --git a/examples/QtSensors/QtSensors_maze/QtSensors_maze.qml b/examples/QtSensors/QtSensors_maze/QtSensors_maze.qml index f52c00f2..40c1d1dd 100644 --- a/examples/QtSensors/QtSensors_maze/QtSensors_maze.qml +++ b/examples/QtSensors/QtSensors_maze/QtSensors_maze.qml @@ -75,6 +75,7 @@ import "components" //! [0] import QtSensors 5.0 //! [0] +import QtSystemInfo 5.0 //Import the javascript functions for this game import "lib.js" as Lib @@ -85,6 +86,7 @@ ApplicationWindow { property Mouse mouseCtrl; property LabyrinthSquare cheeseSquare; property Congratulation congratulation; + ScreenSaver { screenSaverEnabled: !tiltTimer.running } Rectangle { id: gameRect @@ -108,17 +110,17 @@ ApplicationWindow { //create labyrinth elements (only at the first time) var needloadcomponent = false; - if (Lib.objectArray === null){ + if (Lib.objectArray === null) { needloadcomponent = true; Lib.objectArray = new Array(Lib.dimension * Lib.dimension); } var idx = 0; - for (var y = 0; y < Lib.dimension; y++ ){ - for (var x = 0; x < Lib.dimension; x++ ){ + for (var y = 0; y < Lib.dimension; y++ ) { + for (var x = 0; x < Lib.dimension; x++ ) { var component = null; //create labyrinth components (only at the first time) - if (needloadcomponent){ + if (needloadcomponent) { component = Qt.createComponent("LabyrinthSquare.qml"); if (component.status == Component.Ready) { var square = component.createObject(parent); @@ -127,7 +129,7 @@ ApplicationWindow { square.val = Lib.labyrinth[x][y]; square.updateImage(); Lib.objectArray[idx] = square; - if (x == (Lib.dimension - 1) && y == (Lib.dimension - 1)){ + if (x == (Lib.dimension - 1) && y == (Lib.dimension - 1)) { cheeseSquare = square; var component1 = Qt.createComponent("Congratulation.qml"); if (component1.status == Component.Ready) { @@ -140,7 +142,7 @@ ApplicationWindow { else{ Lib.objectArray[idx].val = Lib.labyrinth[x][y]; Lib.objectArray[idx].updateImage(); - if (x == (Lib.dimension - 1) && y == (Lib.dimension - 1)){ + if (x == (Lib.dimension - 1) && y == (Lib.dimension - 1)) { cheeseSquare = Lib.objectArray[idx]; congratulation.visible = false; } @@ -152,7 +154,7 @@ ApplicationWindow { //Lib.printLab(); //this is for debug. Labyrinth will be printed out in the console //Create the mouse control (only at the first time) - if (mouseCtrl === null){ + if (mouseCtrl === null) { var component = Qt.createComponent("Mouse.qml"); if (component.status == Component.Ready) { mouseCtrl = component.createObject(parent); @@ -164,7 +166,6 @@ ApplicationWindow { //Start the Tilt reader timer tiltTimer.running = true; - tiltSensor.calibrate(); } } } @@ -193,7 +194,7 @@ ApplicationWindow { return; //check if already solved - if (Lib.won !== true){ + if (Lib.won !== true) { Lib.sec += 0.05; timePlayingLabel.text = Math.floor(Lib.sec) + " seconds"; @@ -203,60 +204,45 @@ ApplicationWindow { //! [3] var xstep = 0; - if (tiltSensor.yRotation > 0) - xstep = 1; - else if (tiltSensor.yRotation < 0) - xstep = -1; + xstep = tiltSensor.yRotation * 0.1 //acceleration + var ystep = 0; - if (tiltSensor.xRotation > 0) - ystep = 1; - else if (tiltSensor.xRotation < 0) - ystep = -1; + ystep = tiltSensor.xRotation * 0.1 //acceleration //! [3] +//! [4] + if (xstep < 1 && xstep > 0) + xstep = 0 + else if (xstep > -1 && xstep < 0) + xstep = 0 - if (xstep < 0){ - if (mouseCtrl.x > 0){ - if (Lib.canMove(mouseCtrl.x + xstep, mouseCtrl.y)){ - xval = mouseCtrl.x + xstep; - } - } - } - else if (xstep > 0){ - if (mouseCtrl.x < (Lib.cellDimension * (Lib.dimension - 1))){ - if (Lib.canMove(mouseCtrl.x + xstep, mouseCtrl.y)){ - xval = mouseCtrl.x + xstep; - } - } - } - if (ystep < 0){ - if (mouseCtrl.y > 0){ - if (Lib.canMove(mouseCtrl.x, mouseCtrl.y + ystep)){ - yval = mouseCtrl.y + ystep; - } - } - } - else if (ystep > 0){ - if (mouseCtrl.y < (Lib.cellDimension * (Lib.dimension - 1))){ - if (Lib.canMove(mouseCtrl.x, mouseCtrl.y + ystep)){ - yval = mouseCtrl.y + ystep; - } - } - } - if (xval >= 0 && yval >= 0) - mouseCtrl.move(xval, yval); + if (ystep < 1 && ystep > 0) + ystep = 0; + else if (ystep > -1 && ystep < 0) + ystep = 0; - //move the mouse in the allwed position - else{ - if (xval >= 0){ - mouseCtrl.move(xval, mouseCtrl.y); - } - if (yval >= 0){ - mouseCtrl.move(mouseCtrl.x, yval); - } - } - } - else{ + 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); +//! [4] + + } else { //game won, stop the tilt meter mainWnd.cheeseSquare.val = 4; mainWnd.cheeseSquare.updateImage(); @@ -267,6 +253,7 @@ ApplicationWindow { } } + //Button to start a new Game Button{ id: newGameButton @@ -282,6 +269,18 @@ ApplicationWindow { startTimer.start(); } } + Button{ + id: calibrateButton + anchors.left: gameRect.left + anchors.top: newGameButton.bottom + anchors.topMargin: 5 + height: 30 + width: 100 + text: "calibrate" + onClicked: { + tiltSensor.calibrate(); + } + } //Label to print out the game time Text{ diff --git a/examples/QtSensors/QtSensors_maze/content/mouse_left.gif b/examples/QtSensors/QtSensors_maze/content/mouse_left.gif deleted file mode 100644 index 265d2bab..00000000 Binary files a/examples/QtSensors/QtSensors_maze/content/mouse_left.gif and /dev/null differ diff --git a/examples/QtSensors/QtSensors_maze/content/mouse_leftdown.gif b/examples/QtSensors/QtSensors_maze/content/mouse_leftdown.gif deleted file mode 100644 index bdcd708f..00000000 Binary files a/examples/QtSensors/QtSensors_maze/content/mouse_leftdown.gif and /dev/null differ diff --git a/examples/QtSensors/QtSensors_maze/content/mouse_leftup.gif b/examples/QtSensors/QtSensors_maze/content/mouse_leftup.gif deleted file mode 100644 index a8b1e8f6..00000000 Binary files a/examples/QtSensors/QtSensors_maze/content/mouse_leftup.gif and /dev/null differ diff --git a/examples/QtSensors/QtSensors_maze/content/mouse_right.gif b/examples/QtSensors/QtSensors_maze/content/mouse_right.gif deleted file mode 100644 index a95d02cc..00000000 Binary files a/examples/QtSensors/QtSensors_maze/content/mouse_right.gif and /dev/null differ diff --git a/examples/QtSensors/QtSensors_maze/content/mouse_rightdown.gif b/examples/QtSensors/QtSensors_maze/content/mouse_rightdown.gif deleted file mode 100644 index 00bc3e18..00000000 Binary files a/examples/QtSensors/QtSensors_maze/content/mouse_rightdown.gif and /dev/null differ diff --git a/examples/QtSensors/QtSensors_maze/content/mouse_rightup.gif b/examples/QtSensors/QtSensors_maze/content/mouse_rightup.gif deleted file mode 100644 index e0153eb4..00000000 Binary files a/examples/QtSensors/QtSensors_maze/content/mouse_rightup.gif and /dev/null differ diff --git a/examples/QtSensors/QtSensors_maze/content/mouse_up.gif b/examples/QtSensors/QtSensors_maze/content/mouse_up.gif deleted file mode 100644 index 19220ebe..00000000 Binary files a/examples/QtSensors/QtSensors_maze/content/mouse_up.gif and /dev/null differ diff --git a/examples/QtSensors/QtSensors_maze/lib.js b/examples/QtSensors/QtSensors_maze/lib.js index fccce18f..3bae6a86 100644 --- a/examples/QtSensors/QtSensors_maze/lib.js +++ b/examples/QtSensors/QtSensors_maze/lib.js @@ -228,19 +228,19 @@ function canMove(x, y) var dy = ycenter - (idy * cellDimension + ( cellDimension / 2 )); if (dx > 0){ - if (labyrinth[idx + 1][idy] == 1) + if (labyrinth[idx][idy] == 1) return false; } if (dx < 0){ - if (labyrinth[idx - 1][idy] == 1) + if (labyrinth[idx][idy] == 1) return false; } if (dy > 0){ - if (labyrinth[idx][idy + 1] == 1) + if (labyrinth[idx][idy] == 1) return false; } if (dy < 0){ - if (labyrinth[idx][idy - 1] == 1) + if (labyrinth[idx][idy] == 1) return false; } //check if won -- cgit v1.2.3