After little playing with QML and little bit of google. I came up with following code.
Following code is for my sprite QML element in Sprite.qml file. Here main trick is to use clip property of Item element. Which clips own painting, as well as the painting of its children, to its bounding rectangle.
Item{ id:sprite clip: true property alias running: timer.running; property int frame:0 property int frameCount: 0; property alias source:image.source Image{ id:image x:-sprite.width*sprite.frame } Timer { id:timer interval: 200; running: false; repeat: true onTriggered: { nextFrame(); } } function nextFrame() { sprite.frame = ++sprite.frame % sprite.frameCount } }
Following code shows how we can use above code.
Rectangle { width: 400 height: 100 Sprite { x:150 width: 64;height: 64 source: "dragon.png" running: true frameCount: 5 } }
Following is demo from above code.
Hi, nice blog you have here. I have a question about animation. The problem is I'm using multiple images (as if extracted frames from GIF) instead of sprite sheet. So what is the best solution to make it animate with different frame speed? For example, you want to make the frame go slower (500ms) and then make the frame faster (100ms).
ReplyDeletelol, nevermine, I just figure it out. Just combine the extracted images as a single sprite sheet and use it like yours. Thanks for the great post. =^__^=
Delete:) glad that it helped you
DeleteThis is greatt
ReplyDelete