轉帖|使用教程|編輯:鮑佳佳|2021-03-18 11:08:55.213|閱讀 461 次
概述:第一項任務是生成游戲塊。每次單擊“新建游戲”按鈕時,游戲畫布上都會填充一組新的隨機塊。由于我們需要為每個新游戲動態生成新塊,因此我們無法使用Repeater來定義塊。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
Qt是一個跨平臺框架,通常用作圖形工具包,它不僅創建CLI應用程序中非常有用。而且它也可以在三種主要的臺式機操作系統以及移動操作系統(如Symbian,Nokia Belle,Meego Harmattan,MeeGo或BB10)以及嵌入式設備,Android(Necessitas)和iOS的端口上運行。現在我們為你提供了免費的試用版。
Qt組件推薦:
現在我們已經編寫了一些類型,讓我們開始編寫游戲。
第一項任務是生成游戲塊。每次單擊“新建游戲”按鈕時,游戲畫布上都會填充一組新的隨機塊。由于我們需要為每個新游戲動態生成新塊,因此我們無法使用Repeater來定義塊。相反,我們將使用JavaScript創建塊。
這是JavaScript代碼,用于生成包含在新文件中的塊samegame.js。該代碼在下面說明。
var blockSize = 40; 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 * } 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; }
該startNewGame()函數刪除在先前游戲中創建的塊,并計算填充新游戲的游戲窗口所需的塊的行數和列數。然后,它創建一個數組來存儲所有游戲塊,并調用createBlock()創建足夠的塊來填充游戲窗口。
createBlock()函數從Block.qml文件創建一個塊,然后將新塊移動到其在游戲畫布上的位置。這涉及幾個步驟:
將JavaScript組件連接到QML
現在,我們需要samegame.js從QML文件中調用JavaScript代碼。為此,我們添加以下行samegame.qml,將JavaScript文件作為模塊導入到該行:
import "samegame.js" as SameGame
這使我們可以samegame.js使用“ SameGame”作為前綴來引用任何函數:例如SameGame.startNewGame()或SameGame.createBlock()。這意味著我們現在可以將New Game按鈕的onClicked處理程序連接到該startNewGame()函數,如下所示:
Button { anchors { left: parent.left; verticalCenter: parent.verticalCenter } text: "New Game" onClicked: SameGame.startNewGame() }
因此,當您單擊“新建游戲”按鈕時,將startNewGame()被調用并生成一個塊字段,如下所示:
現在,我們有了一個方塊屏幕,我們可以開始添加游戲機制了。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: