Game.qml Example Filedemos/mobile/quickhit/Game.qml/**************************************************************************** ** ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtDeclarative module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor ** the names of its contributors may be used to endorse or promote ** products derived from this software without specific prior written ** permission. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** $QT_END_LICENSE$ ** ****************************************************************************/ import QtQuick 1.0 import "Game.js" as GameScript Item { id: gameArea width: 360; height: 640 // NOTE: have to exists some default sizes anchors.fill: parent objectName: "gameArea" // Who win, you or computer property bool gameOverProperty: false // for info message to user property variant messageBox // Level activated signal for Qt side to load activated level signal levelActivated(int index) // Pause whole game, if level is loaded function pauseGame() { if (GameScript.levelPlugin) { GameScript.pauseGame(true) myShip.focus = false btnPause.opacity = 0 menu.showPauseMenu() } } // Qt side call this for QML take new level into use function levelReadyForCreation() { // Hide menu menu.hideMenu() // Show message message.showMessage("Loading Level...",2000) // Wait before create level levelCreationTimer.restart() } // Fires ememy missile. Function is called from Qt side function fireEnemyMissile(aXpox, aFromYpos, aToYpos) { GameScript.fireEnemyMissile(aXpox, aFromYpos, aToYpos) } // Game Over handling. Function is called from Qt side function gameOver(youWin) { // Stop GameEngine timers GameEngine.enableEngineTimer(false) gameOverProperty = youWin GameScript.hideMissiles() gameOverTimer.restart() //GameEngine.vibra() } // End game and show menu function endGame(showMessage) { backgroundPic.opacity = 1 // Stop GameEngine timers GameEngine.enableEngineTimer(false) // Do game over GameScript.gameOver() GameScript.hideMissiles() // Clear GameEngine QML objects GameEngine.clearQmlObjects() myShip.opacity = 0 myShip.focus = false btnPause.opacity = 0 idMainLogo.opacity = 1 menu.showLevelMenu() if (showMessage) { message.showMessage("Game End",2000) } } // Timer for level creationing Timer { id: levelCreationTimer interval: 1000; running: false; repeat: false onTriggered: { btnPause.opacity = 1 myShip.opacity = 1 myShip.focus = true // Create new level var ret = GameScript.createLevel() if (ret==0) { backgroundPic.opacity = 0 // Find QML object for GameEngine GameEngine.findQmlObjects() // Enable GameEngine timer GameEngine.enableEngineTimer(true) } else { // Level cannot be created! endGame(false) } } } // Timer for game over Timer { id: gameOverTimer interval: 1500; running: false; repeat: false onTriggered: { backgroundPic.opacity = 1 idMainLogo.opacity = 1 // Do game over GameScript.gameOver() // Clear GameEngine QML objects GameEngine.clearQmlObjects() menu.showLevelMenu() if (gameOverProperty) { GameEngine.playInternalSound(4) message.showMessage("Game Over, You win!",2000) } else { GameEngine.playInternalSounds(3,3) message.showMessage("Game Over, You lose",2000) } } } // Menu signal to slot connections Connections { target: menu // Level selected onLevelSelected: { // Stop bigship animation bigShipAnim.stop() bigShip.opacity = 0 // Hide logo idMainLogo.opacity = 0 // Signal level activated gameArea.levelActivated(levelIndex) } // Level resumed selected onResumeSelected: { menu.hideMenu() GameScript.pauseGame(false) myShip.focus = true } } // This component creation completed Component.onCompleted: { // Show main Level selection menu menu.showLevelMenu() // Start big ship animation bigShipAnim.restart() // Set variable messageBox = message // Play game start sound GameEngine.gameStartSound() // Fade splash screen fadeAnim.restart() // Rotate splash logo rotAnim.restart() } // Background image for the game Image { id: backgroundPic z:1 source: "qrc:/gfx/background2.png" fillMode: Image.PreserveAspectCrop smooth: true anchors.fill: parent } Image { id: bigShip source: "qrc:/gfx/bigship.png" z:1.5 smooth: true x: width * -1 y: parent.height * 0.55 } SequentialAnimation { id: bigShipAnim; NumberAnimation {target:bigShip; property:"x"; to:gameArea.width; easing.type: Easing.Linear; duration: 80000 } PropertyAction {target:bigShip; properties: "opacity"; value: 0} } // Enemies grid Item { // This is general level QML plaseholder // Into this is level QML created in createLevel() id:levelId anchors.fill: parent z:2 } Image { id: idMainLogo z:19 source: "qrc:/gfx/quickhit_logo.png" smooth: true anchors.horizontalCenter: gameArea.horizontalCenter y:gameArea.height / 10 * 1 } // Game menu Menu { z:20 id:menu width: gameArea.width / 5 * 4 height: gameArea.height / 10 * 4 anchors.verticalCenter: gameArea.verticalCenter anchors.horizontalCenter: gameArea.horizontalCenter } // My ship MyShip { z:10 id: myShip opacity: 0 } // Mouse area of your ship MouseArea { //anchors.fill: parent width: parent.width height: myShip.height x:0 y:gameArea.height - myShip.height drag.target: myShip drag.axis: Drag.XAxis drag.minimumX: 0 drag.maximumX: gameArea.width - myShip.width property int startPos: 0 property int dragCount: 0 onPressed: { startPos = mouseX dragCount = 0 } onPositionChanged: { //dragCount = Math.abs(mouseX-startPos) } onReleased: { //if (dragCount<20) { myShip.fire() //} } } // Pause button Button { id: btnSound z:12 //animationEnabled: false anchors.top: parent.top anchors.topMargin: 10 buttonPath: "qrc:/gfx/soundOn.png" buttonId: 4 width: gameArea.width / 10 height: gameArea.width / 10 x: gameArea.width - width - 15 opacity: 1 Connections { target: btnSound onBtnClicked: { if (btnSound.buttonId==4) { // Sound off btnSound.buttonPath = "qrc:/gfx/soundOff.png" btnSound.buttonId = 5 GameEngine.enableSounds(false) } else { // Sound on btnSound.buttonPath = "qrc:/gfx/soundOn.png" btnSound.buttonId = 4 GameEngine.enableSounds(true) } } } } // Pause button Button { id: btnPause z:13 anchors.top: parent.top anchors.topMargin: 10 buttonPath: "qrc:/gfx/pause.png" buttonId: 3 width: gameArea.width / 10 height: gameArea.width / 10 x: gameArea.width - width - btnPause.width - 15*2 opacity: 0 Connections { target: btnPause onBtnClicked: { GameScript.pauseGame(true) myShip.focus = false btnPause.opacity = 0 menu.showPauseMenu() } } } // Hidden missiles ready for to be launched Missile { z:3 id: missile_1 x:0 y:10 } Missile { z:4 id: missile_2 x: 20 y:10 } Missile { z:5 id: missile_3 x: 40 y:10 } Missile { z:6 id: missile_4 x: 60 y:10 } Missile { z:7 id: missile_5 x: 80 y:10 } Missile { z:8 objectName: "enemy_missile" id: enemy_missile_1 enemyMissile: true } Missile { z:9 objectName: "enemy_missile" id: enemy_missile_2 enemyMissile: true } // Messages to the user Message { id: message z:21 } // Splach screen Rectangle { id: blackFace x:-2 y:0 width: parent.width + 2 height: parent.height z:100 color: "black" opacity: 1 MouseArea { anchors.fill: parent onPressed: { mouse.accepted = true fadeAnim.stop() blackFace.opacity = 0 } } Image { id: idLogo source: "qrc:/gfx/quickhit_logo.png" smooth: true anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter opacity: 0 } NumberAnimation { id: rotAnim; target: idLogo; property: "rotation"; to: 20; duration: 9000 } } // Splach screen animation SequentialAnimation { id: fadeAnim PauseAnimation {duration: 1000 } NumberAnimation {target: idLogo; property: "opacity"; from: 0; to: 1; duration: 2000 } PauseAnimation {duration: 2000 } NumberAnimation {target: idLogo; property: "opacity"; from: 1; to: 0; duration: 2000 } NumberAnimation {target: blackFace; property: "opacity"; from: 1; to: 0; duration: 2000 } } } |
Cette page est une traduction d'une page de la documentation de Qt, écrite par Nokia Corporation and/or its subsidiary(-ies). Les éventuels problèmes résultant d'une mauvaise traduction ne sont pas imputables à Nokia. | Qt 4.8 | |
Copyright © 2012 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon, vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD. | ||
Vous avez déniché une erreur ? Un bug ? Une redirection cassée ? Ou tout autre problème, quel qu'il soit ? Ou bien vous désirez participer à ce projet de traduction ? N'hésitez pas à nous contacter ou par MP ! |
Copyright © 2000-2012 - www.developpez.com