Как проверять состояние/положение спрайта?
Пытаюсь разобраться со спрайтами и анимацией в qml в qt и не особо понимаю такую вещь, как мне динамически, тоесть постоянно делать проверку на что либо касательно спрайта? Например как постоянно проверять через if else его место нахождение? Вот мой код:
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
SpriteSequence {
id: image
objectName: "sprSeq"
width: 25
height: 25
y:150
Sprite {
name: "1"
id: sprite
objectName: "ssprite"
source: "orangeGuy_animated.png"
frameCount: 18
frameWidth: 32
frameHeight: 26
frameSync: true
}
Sprite {
name: "2"
id: sprite2
source: "orangeGuy_animated_back.png"
frameCount: 18
frameWidth: 32
frameHeight: 26
frameSync: true
}
Sprite {
name: "3"
id: sprite3
source: "orangeGuy_animated.png"
frameCount: 1
frameWidth: 32
frameHeight: 26
frameSync: true
}
}
PropertyAnimation {
id: runningSprite
objectName: "runningSprt"
target: image
property: "x"
duration: 5000
from: 0
to: 500
//alwaysRunToEnd: true
onFinished: {
if (runningSprite.property === "y") {
image.jumpTo("3");
runningSprite.running = false
runningSprite.property = "y"
runningSprite.from = image.y
runningSprite.to = (image.y+60)
runningSprite.duration = 250
runningSprite.running = true
}
}
Тоесть мне нужна где то либо функция либо еще что то которая для примера делает следущее:
if (sprite.x > 100) {
console.log("Вы за пределами карты!")
}
Тоесть как я понимаю для этого нужно что то что постоянно следит за моим спрайтом и постоянно будет проводить проверку. Помогите пожалуйста. Спасибо
Ответы (1 шт):
У свойств объектов qml есть сигнал Changed. У объекта Sprite нет свойства x. Соответственно вам нужно написать слот на изменение frameX или взять свойство х родительского объекта.
Sprite {
...
onFrameXChanged: {
if (frameX > 100) {
console.log("Вы за пределами карты!")
}
Или можно создать отслеживающее свойство типа bool:
property var isStopped: (sprite.frameX > 100) ? printOutOfBounce() : true
function printOutOfBounce() {
console.log("Вы за пределами карты!")
return false
}