[SOLVED] Reference error: Can't find variable...
-
wrote on 10 May 2013, 12:23 last edited by
Hey there!
Currently trying to follow one of the game guides on qt-project http://qt-project.org/doc/qt-4.8/declarative-tutorials-samegame-samegame1.html.However when I run the main qml file named "samegame.qml" my terminal give me the error "Reference error: Can't find variable floodFill. Basicly I don't know why this is happening since I have more or less copied what the guide says, would be nice with some advice!
Here's the code so far:
samegame.js
@ var blockSize = 30;
var maxColumn = 10;
var maxRow = 15;
var maxIndex = maxColumn * maxRow;
var board = new Array(maxIndex);
var component;//Index function used instead of a 2D array
function index(column, row) {
return column + (row * maxColumn);
}function startNewGame() {
//Delete blocks from previous game
for (var i = 0; i < maxIndex; i++) {
if (board[i] != null)
board[i].destroy();
}//Calculate board size maxColumn = Math.floor(background.width / blockSize); maxRow = Math.floor(background.height / blockSize); maxIndex = maxRow * maxColumn; //Initialize Board board = new Array(maxIndex); for (var column = 0; column < maxColumn; column++) { for (var row = 0; row < maxRow; row++) { board[index(column, row)] = null; createBlock(column, row); } }
}
function createBlock(column, row) {
if (component == null)
component = Qt.createComponent("Block.qml");// Note that if Block.qml was not a local file, component.status would be // Loading and we should wait for the component's statusChanged() signal to // know when the file is downloaded and ready before calling createObject(). if (component.status == Component.Ready) { var dynamicObject = component.createObject(background); if (dynamicObject == null) { console.log("error creating block"); console.log(component.errorString()); return false; } dynamicObject.x = column * blockSize; dynamicObject.y = row * blockSize; dynamicObject.width = blockSize; dynamicObject.height = blockSize; board[index(column, row)] = dynamicObject; } else { console.log("error loading block component"); console.log(component.errorString()); return false; } return true;
}
function handleClick(xPos, yPos) {
var column = Math.floor(xPos / gameCanvas.blockSize);
var row = Math.floor(yPos / gameCanvas.blockSize);
if (column >= maxColumn || column < 0 || row >= maxRow || row < 0)
return;
if (board[index(column, row)] == null)
return;
//If it's a valid block, remove it and all connected (does nothing if it's not connected)
floodFill(column, row, -1);
if (fillFound <= 0)
return;
gameCanvas.score += (fillFound - 1) * (fillFound - 1);
shuffleDown();
victoryCheck();
}function victoryCheck() {
//Award bonus points if no blocks left
var deservesBonus = true;
for (var column = maxColumn - 1; column >= 0; column--)
if (board[index(column, maxRow - 1)] != null)
deservesBonus = false;
if (deservesBonus)
gameCanvas.score += 500;//Check whether game has finished if (deservesBonus || !(floodMoveCheck(0, maxRow - 1, -1))) dialog.show("Game Over. Your score is " + gameCanvas.score);
}@
samegame.qml
@import QtQuick 1.0
import "samegame.js" as SameGameRectangle {
id: screenwidth: 490; height: 720 SystemPalette { id: activePalette } Item { width: parent.width anchors { top: parent.top; bottom: toolBar.top } Image { id: background anchors.fill: parent source: "img/rsz_3test.jpg" fillMode: Image.PreserveAspectCrop } Item { id: gameCanvas property int score: 0 property int blockSize: 40 width: parent.width - (parent.width % blockSize) height: parent.height - (parent.height % blockSize) anchors.centerIn: parent MouseArea { anchors.fill: parent onClicked: SameGame.handleClick(mouse.x, mouse.y) } } } Rectangle { id: toolBar width: parent.width; height: 30 color: activePalette.window anchors.bottom: screen.bottom Button { anchors { left: parent.left; verticalCenter: parent.verticalCenter } text: "New Game" onClicked: SameGame.startNewGame() } Text { id: score anchors { right: parent.right; verticalCenter: parent.verticalCenter } text: "Score: Who knows?" } }
}@
Would be very happy for an answer! Thanks in advance!
-
wrote on 11 May 2013, 08:34 last edited by
floodFill is a function which is missing in your samegame.js.
Have a look at
http://qt-project.org/doc/qt-4.8/declarative-tutorials-samegame-samegame4-content-samegame-js.html -
wrote on 11 May 2013, 09:33 last edited by
Argh, thanks...didn't realise that they skipped the part where they explained the floodFill function. Guess it sometimes would be worth it to read the guide a bit more thoroughly. Once again Thank you!
1/3