<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-403830458419686723</id><updated>2012-02-16T05:15:30.104-03:00</updated><title type='text'>sergiosvieira</title><subtitle type='html'>All about Computer Science.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sergiosvieira.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/403830458419686723/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sergiosvieira.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Antônio Sérgio de Sousa Vieira</name><uri>http://www.blogger.com/profile/14016249331223233496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_7tntANiB5uA/SUrOQRpPtLI/AAAAAAAAAAk/0_l8X1sAkZE/s1600-R/sergiovieira.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-403830458419686723.post-7545533240337005047</id><published>2009-01-04T15:49:00.006-03:00</published><updated>2009-01-04T17:08:34.517-03:00</updated><title type='text'>JavaFX Penguins Demo Version</title><content type='html'>Hello,&lt;br /&gt;&lt;br /&gt;A long time ago, Fabricio Catae developed a demo using c++. Today I created a version of Penguins Demo using JavaFX.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bidleiloes.com.br/s/javafx/JavaFXApplication1.html"&gt;Penguins Demo&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/9D9BK5STpLk&amp;hl=en&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/9D9BK5STpLk&amp;hl=en&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="background-color:#5D7CBA; border-color: #353535; color:#0; font-family:Arial, Helvetica, sans-serif; font-size:11px; padding:0px; border-width:1px; border-style:solid"&gt;&lt;tr style="background-color:#FFFFFF;"&gt;&lt;td align="center" style="padding:5px"&gt;&lt;a href="http://www.esnips.com/doc/820dee91-e4d9-4208-b585-0b9cf6b46d2e/penguins/?widget=documentIcon"&gt;&lt;img border="0" alt="penguins" title="click to Viewpenguins" src="/images/thumbs/thumb.zip.gif"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background-color:#FFFFFF;"&gt;&lt;td style="padding:5px" align="center"&gt;&lt;strong&gt;&lt;a style="color:#333333" href="http://www.esnips.com/doc/820dee91-e4d9-4208-b585-0b9cf6b46d2e/penguins/?widget=documentIcon"&gt;penguins.zip&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding:5px; font-size:9px; color:#FFFFFF" valign="bottom"&gt;Hosted by &lt;a href="http://www.esnips.com" style="color:#FFFFFF"&gt;eSnips&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_7tntANiB5uA/SWEGTCOQNZI/AAAAAAAAABg/SWjoqrhke-g/s1600-h/scenario.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 200px;" src="http://4.bp.blogspot.com/_7tntANiB5uA/SWEGTCOQNZI/AAAAAAAAABg/SWjoqrhke-g/s320/scenario.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5287514361593607570" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_7tntANiB5uA/SWEGbv6edkI/AAAAAAAAABo/5RAHCX38Hss/s1600-h/penguim.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 10px; height: 90px;" src="http://4.bp.blogspot.com/_7tntANiB5uA/SWEGbv6edkI/AAAAAAAAABo/5RAHCX38Hss/s320/penguim.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5287514511297640002" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;STYLE TYPE="text/css"&gt;&lt;!--&lt;br /&gt;.syntax0 {&lt;br /&gt;color: #000000;&lt;br /&gt;}&lt;br /&gt;.syntax1 {&lt;br /&gt;color: #cc0000;&lt;br /&gt;}&lt;br /&gt;.syntax2 {&lt;br /&gt;color: #ff8400;&lt;br /&gt;}&lt;br /&gt;.syntax3 {&lt;br /&gt;color: #6600cc;&lt;br /&gt;}&lt;br /&gt;.syntax4 {&lt;br /&gt;color: #cc6600;&lt;br /&gt;}&lt;br /&gt;.syntax5 {&lt;br /&gt;color: #ff0000;&lt;br /&gt;}&lt;br /&gt;.syntax6 {&lt;br /&gt;color: #9966ff;&lt;br /&gt;}&lt;br /&gt;.syntax7 {&lt;br /&gt;background: #ffffcc;&lt;br /&gt;color: #ff0066;&lt;br /&gt;}&lt;br /&gt;.syntax8 {&lt;br /&gt;color: #006699;&lt;br /&gt;font-weight: bold;&lt;br /&gt;}&lt;br /&gt;.syntax9 {&lt;br /&gt;color: #009966;&lt;br /&gt;font-weight: bold;&lt;br /&gt;}&lt;br /&gt;.syntax10 {&lt;br /&gt;color: #0099ff;&lt;br /&gt;font-weight: bold;&lt;br /&gt;}&lt;br /&gt;.syntax11 {&lt;br /&gt;color: #66ccff;&lt;br /&gt;font-weight: bold;&lt;br /&gt;}&lt;br /&gt;.syntax12 {&lt;br /&gt;color: #02b902;&lt;br /&gt;}&lt;br /&gt;.syntax13 {&lt;br /&gt;color: #ff00cc;&lt;br /&gt;}&lt;br /&gt;.syntax14 {&lt;br /&gt;color: #cc00cc;&lt;br /&gt;}&lt;br /&gt;.syntax15 {&lt;br /&gt;color: #9900cc;&lt;br /&gt;}&lt;br /&gt;.syntax16 {&lt;br /&gt;color: #6600cc;&lt;br /&gt;}&lt;br /&gt;.syntax17 {&lt;br /&gt;color: #0000ff;&lt;br /&gt;}&lt;br /&gt;.syntax18 {&lt;br /&gt;color: #000000;&lt;br /&gt;font-weight: bold;&lt;br /&gt;}&lt;br /&gt;.gutter {&lt;br /&gt;background: #dbdbdb;&lt;br /&gt;color: #000000;&lt;br /&gt;}&lt;br /&gt;.gutterH {&lt;br /&gt;background: #dbdbdb;&lt;br /&gt;color: #990066;&lt;br /&gt;}&lt;br /&gt;--&gt;&lt;br /&gt;&lt;/STYLE&gt;&lt;br /&gt;&lt;PRE&gt;&lt;SPAN CLASS="gutter"&gt;   1:&lt;/SPAN&gt;/*&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;   2:&lt;/SPAN&gt; * Penguim.fx&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;   3:&lt;/SPAN&gt; *&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;   4:&lt;/SPAN&gt; * Created on 04/01/2009, 11:38:24&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;   5:&lt;/SPAN&gt; */&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;   6:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;   7:&lt;/SPAN&gt;package javafxapplication1;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;   8:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;   9:&lt;/SPAN&gt;import javafx.animation.KeyFrame;&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  10:&lt;/SPAN&gt;import javafx.animation.Timeline;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  11:&lt;/SPAN&gt;import javafx.geometry.Rectangle2D;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  12:&lt;/SPAN&gt;import javafx.scene.CustomNode;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  13:&lt;/SPAN&gt;import javafx.scene.image.Image;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  14:&lt;/SPAN&gt;import javafx.scene.image.ImageView;&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  15:&lt;/SPAN&gt;import javafx.scene.Node;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  16:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  17:&lt;/SPAN&gt;/**&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  18:&lt;/SPAN&gt; * @author sergiosvieira@gmail.com&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  19:&lt;/SPAN&gt; */&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  20:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  21:&lt;/SPAN&gt;public class Penguim extends CustomNode {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  22:&lt;/SPAN&gt;    var start: Duration;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  23:&lt;/SPAN&gt;    var falling: Boolean = true;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  24:&lt;/SPAN&gt;    var walking: Boolean = false;&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  25:&lt;/SPAN&gt;    var left: Boolean = false;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  26:&lt;/SPAN&gt;    var imageView: ImageView;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  27:&lt;/SPAN&gt;    var currentSprite: Integer = 8;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  28:&lt;/SPAN&gt;    var sSprite: Integer;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  29:&lt;/SPAN&gt;    var fSprite: Integer;&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  30:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  31:&lt;/SPAN&gt;    public var started: Boolean = false;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  32:&lt;/SPAN&gt;    public var timeLine : Timeline;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  33:&lt;/SPAN&gt;    public var spriteWidth: Integer; // Sprite Width&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  34:&lt;/SPAN&gt;    public var spriteHeight: Integer; // Sprite Height&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  35:&lt;/SPAN&gt;    public var image: Image;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  36:&lt;/SPAN&gt;    public var x: Integer on replace {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  37:&lt;/SPAN&gt;        imageView.x = x;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  38:&lt;/SPAN&gt;    };&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  39:&lt;/SPAN&gt;    public var y: Integer on replace {&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  40:&lt;/SPAN&gt;        imageView.y = y;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  41:&lt;/SPAN&gt;    };&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  42:&lt;/SPAN&gt;    var max: Number;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  43:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  44:&lt;/SPAN&gt;    function loop() {&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  45:&lt;/SPAN&gt;        if (falling) {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  46:&lt;/SPAN&gt;            y += 4;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  47:&lt;/SPAN&gt;            if (y &amp;gt;= 345) {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  48:&lt;/SPAN&gt;                y = 345;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  49:&lt;/SPAN&gt;                falling = false;&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  50:&lt;/SPAN&gt;                walking = true;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  51:&lt;/SPAN&gt;            }&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  52:&lt;/SPAN&gt;        } else {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  53:&lt;/SPAN&gt;            if (walking) {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  54:&lt;/SPAN&gt;                if (left) {&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  55:&lt;/SPAN&gt;                    if (currentSprite &amp;gt;= sSprite and currentSprite &amp;lt;= fSprite) {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  56:&lt;/SPAN&gt;                    currentSprite++;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  57:&lt;/SPAN&gt;                    } else {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  58:&lt;/SPAN&gt;                        sSprite = 4;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  59:&lt;/SPAN&gt;                        fSprite = 6;&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  60:&lt;/SPAN&gt;                        currentSprite = sSprite;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  61:&lt;/SPAN&gt;                    }&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  62:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  63:&lt;/SPAN&gt;                    if (x &amp;lt;= 150) {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  64:&lt;/SPAN&gt;                        left = false;&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  65:&lt;/SPAN&gt;                    }&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  66:&lt;/SPAN&gt;                    x -= 3;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  67:&lt;/SPAN&gt;                } else {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  68:&lt;/SPAN&gt;                    if (currentSprite &amp;gt;= sSprite and currentSprite &amp;lt;= fSprite) {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  69:&lt;/SPAN&gt;                    currentSprite++;&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  70:&lt;/SPAN&gt;                    } else {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  71:&lt;/SPAN&gt;                        sSprite = 0;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  72:&lt;/SPAN&gt;                        fSprite = 2;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  73:&lt;/SPAN&gt;                        currentSprite = sSprite;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  74:&lt;/SPAN&gt;                    }&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  75:&lt;/SPAN&gt;                    if (x &amp;gt;= 370) {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  76:&lt;/SPAN&gt;                        left = true;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  77:&lt;/SPAN&gt;                    }&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  78:&lt;/SPAN&gt;                    x += 3;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  79:&lt;/SPAN&gt;                }&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  80:&lt;/SPAN&gt;            }&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  81:&lt;/SPAN&gt;        }&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  82:&lt;/SPAN&gt;    }&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  83:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  84:&lt;/SPAN&gt;    init {&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  85:&lt;/SPAN&gt;        def cols = (image.width / spriteWidth) - 1;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  86:&lt;/SPAN&gt;        def rows = (image.height / spriteHeight) - 1;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  87:&lt;/SPAN&gt;        max = (cols + 1) * (rows + 1);&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  88:&lt;/SPAN&gt;        def viewPorts =&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  89:&lt;/SPAN&gt;        for (i in [0..rows]){&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  90:&lt;/SPAN&gt;            for ( j in [0..cols]) {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  91:&lt;/SPAN&gt;                Rectangle2D {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  92:&lt;/SPAN&gt;                    minX: j * spriteWidth&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  93:&lt;/SPAN&gt;                    minY: i * spriteHeight&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  94:&lt;/SPAN&gt;                    width: spriteWidth&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  95:&lt;/SPAN&gt;                    height: spriteHeight&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  96:&lt;/SPAN&gt;                }&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  97:&lt;/SPAN&gt;            }&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  98:&lt;/SPAN&gt;        }&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  99:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 100:&lt;/SPAN&gt;        timeLine = Timeline {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 101:&lt;/SPAN&gt;            repeatCount: Timeline.INDEFINITE&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 102:&lt;/SPAN&gt;            keyFrames: [&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 103:&lt;/SPAN&gt;                KeyFrame {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 104:&lt;/SPAN&gt;                    time: 60ms&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 105:&lt;/SPAN&gt;                    action: function(): Void {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 106:&lt;/SPAN&gt;                        loop();&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 107:&lt;/SPAN&gt;                    }&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 108:&lt;/SPAN&gt;                }&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 109:&lt;/SPAN&gt;            ]&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 110:&lt;/SPAN&gt;        };&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 111:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 112:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 113:&lt;/SPAN&gt;        imageView = ImageView {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 114:&lt;/SPAN&gt;            x: bind x&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 115:&lt;/SPAN&gt;            y: bind y&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 116:&lt;/SPAN&gt;            image: image&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 117:&lt;/SPAN&gt;            viewport: bind viewPorts[currentSprite]&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 118:&lt;/SPAN&gt;            fitWidth: 20&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 119:&lt;/SPAN&gt;            preserveRatio: true&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 120:&lt;/SPAN&gt;            smooth: false&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 121:&lt;/SPAN&gt;        }&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 122:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 123:&lt;/SPAN&gt;    }&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 124:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 125:&lt;/SPAN&gt;    override public function create(): Node {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 126:&lt;/SPAN&gt;        imageView&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 127:&lt;/SPAN&gt;    }&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 128:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 129:&lt;/SPAN&gt;}&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 130:&lt;/SPAN&gt;&lt;br /&gt;&lt;/PRE&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;PRE&gt;&lt;SPAN CLASS="gutter"&gt;   1:&lt;/SPAN&gt;/*&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;   2:&lt;/SPAN&gt; * Main.fx&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;   3:&lt;/SPAN&gt; *&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;   4:&lt;/SPAN&gt; * Created on 04/01/2009, 09:45:50&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;   5:&lt;/SPAN&gt; */&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;   6:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;   7:&lt;/SPAN&gt;package javafxapplication1;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;   8:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;   9:&lt;/SPAN&gt;import javafx.animation.KeyFrame;&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  10:&lt;/SPAN&gt;import javafx.animation.Timeline;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  11:&lt;/SPAN&gt;import javafx.scene.image.Image;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  12:&lt;/SPAN&gt;import javafx.scene.image.ImageView;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  13:&lt;/SPAN&gt;import javafx.scene.paint.Color;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  14:&lt;/SPAN&gt;import javafx.scene.Scene;&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  15:&lt;/SPAN&gt;import javafx.scene.text.Font;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  16:&lt;/SPAN&gt;import javafx.scene.text.FontWeight;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  17:&lt;/SPAN&gt;import javafx.scene.text.Text;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  18:&lt;/SPAN&gt;import javafx.scene.text.TextAlignment;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  19:&lt;/SPAN&gt;import javafx.scene.text.TextOrigin;&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  20:&lt;/SPAN&gt;import javafx.stage.Stage;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  21:&lt;/SPAN&gt;import java.lang.Math;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  22:&lt;/SPAN&gt;/**&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  23:&lt;/SPAN&gt; * @author sergiosvieira@gmail.com&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  24:&lt;/SPAN&gt; */&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  25:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  26:&lt;/SPAN&gt;var scenario = ImageView {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  27:&lt;/SPAN&gt;    image: Image {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  28:&lt;/SPAN&gt;        url: &amp;quot;{__DIR__}scenario.png&amp;quot;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  29:&lt;/SPAN&gt;    }&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  30:&lt;/SPAN&gt;    fitWidth: 640&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  31:&lt;/SPAN&gt;    preserveRatio: true&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  32:&lt;/SPAN&gt;    smooth: false&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  33:&lt;/SPAN&gt;}&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  34:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  35:&lt;/SPAN&gt;def penguim = Image {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  36:&lt;/SPAN&gt;    url: &amp;quot;{__DIR__}penguim.png&amp;quot;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  37:&lt;/SPAN&gt;}&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  38:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  39:&lt;/SPAN&gt;var currentMsg: Integer = 0;&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  40:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  41:&lt;/SPAN&gt;def msgTimes: Duration[] = [&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  42:&lt;/SPAN&gt;    0.1s,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  43:&lt;/SPAN&gt;    3s,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  44:&lt;/SPAN&gt;    6s,&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  45:&lt;/SPAN&gt;    8s,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  46:&lt;/SPAN&gt;    13.7s,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  47:&lt;/SPAN&gt;    14.4s,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  48:&lt;/SPAN&gt;    15.1s,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  49:&lt;/SPAN&gt;    17s,&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  50:&lt;/SPAN&gt;    19s,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  51:&lt;/SPAN&gt;    23s,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  52:&lt;/SPAN&gt;    25s,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  53:&lt;/SPAN&gt;    28s,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  54:&lt;/SPAN&gt;    31s,&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  55:&lt;/SPAN&gt;    33s,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  56:&lt;/SPAN&gt;    36s,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  57:&lt;/SPAN&gt;    39s,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  58:&lt;/SPAN&gt;    42s,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  59:&lt;/SPAN&gt;    45s,&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  60:&lt;/SPAN&gt;    48s,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  61:&lt;/SPAN&gt;    51s,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  62:&lt;/SPAN&gt;    53s,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  63:&lt;/SPAN&gt;    55s,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  64:&lt;/SPAN&gt;    58s,&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  65:&lt;/SPAN&gt;    61s,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  66:&lt;/SPAN&gt;    64s,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  67:&lt;/SPAN&gt;    67s,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  68:&lt;/SPAN&gt;    70s,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  69:&lt;/SPAN&gt;    73s,&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  70:&lt;/SPAN&gt;    76s,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  71:&lt;/SPAN&gt;    85s,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  72:&lt;/SPAN&gt;    90s,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  73:&lt;/SPAN&gt;    93s,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  74:&lt;/SPAN&gt;    96s&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  75:&lt;/SPAN&gt;];&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  76:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  77:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  78:&lt;/SPAN&gt;def messages: String[] = [&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  79:&lt;/SPAN&gt;    &amp;quot;Era uma tarde calma...&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  80:&lt;/SPAN&gt;    &amp;quot;Quando...&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  81:&lt;/SPAN&gt;    &amp;quot;AAAAAAHHHHHHHHHHHHHHH!!!&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  82:&lt;/SPAN&gt;    &amp;quot;Estamos Caindo!!!&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  83:&lt;/SPAN&gt;    &amp;quot;Plaft!&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  84:&lt;/SPAN&gt;    &amp;quot;           Pleft!          &amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  85:&lt;/SPAN&gt;    &amp;quot;                     Ploft!&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  86:&lt;/SPAN&gt;    &amp;quot;Onde n&amp;oacute;s estamos?&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  87:&lt;/SPAN&gt;    &amp;quot;Numa ilha, seu burro!&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  88:&lt;/SPAN&gt;    &amp;quot;Uma ilha s&amp;oacute; pra gente!?&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  89:&lt;/SPAN&gt;    &amp;quot;Fica quieto! Estamos perdidos!&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  90:&lt;/SPAN&gt;    &amp;quot;...&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  91:&lt;/SPAN&gt;    &amp;quot;Hummm... agora est&amp;aacute; melhor!&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  92:&lt;/SPAN&gt;    &amp;quot;Deixe-me pensar.&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  93:&lt;/SPAN&gt;    &amp;quot;Por qu&amp;ecirc;? Afinal, sou um g&amp;ecirc;nio.&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  94:&lt;/SPAN&gt;    &amp;quot;G&amp;ecirc;nio??? Voc&amp;ecirc; &amp;eacute; louco!&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt;  95:&lt;/SPAN&gt;    &amp;quot;Sil&amp;ecirc;ncio!!!&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  96:&lt;/SPAN&gt;    &amp;quot;&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  97:&lt;/SPAN&gt;    &amp;quot;Olha, vamos pensar juntos.&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  98:&lt;/SPAN&gt;    &amp;quot;N&amp;oacute;s estamos numa ilha...&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt;  99:&lt;/SPAN&gt;    &amp;quot;Muito, mas muito pequena...&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 100:&lt;/SPAN&gt;    &amp;quot;Pequen&amp;iacute;ssima...&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 101:&lt;/SPAN&gt;    &amp;quot;Esse lugar &amp;eacute; insuficiente para n&amp;oacute;s 3!&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 102:&lt;/SPAN&gt;    &amp;quot;Est&amp;aacute; compreendendo?&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 103:&lt;/SPAN&gt;    &amp;quot;Entendi! Hoje n&amp;oacute;s estamos com azar!&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 104:&lt;/SPAN&gt;    &amp;quot;...&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 105:&lt;/SPAN&gt;    &amp;quot;Olha o lado bom, somos s&amp;oacute; n&amp;oacute;s 3.&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 106:&lt;/SPAN&gt;    &amp;quot;Verdade! Poderia ser pio...&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 107:&lt;/SPAN&gt;    &amp;quot;...#@*%#)^@ !!!&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 108:&lt;/SPAN&gt;    &amp;quot;Socorro!!! N&amp;atilde;o consigo ver nada.&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 109:&lt;/SPAN&gt;    &amp;quot;Penguins Demo - v0.10&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 110:&lt;/SPAN&gt;    &amp;quot;By FSC - Dez/97&amp;quot;,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 111:&lt;/SPAN&gt;    &amp;quot;JavaFX version by S&amp;eacute;rgio Vieira :)&amp;quot;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 112:&lt;/SPAN&gt;];&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 113:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 114:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 115:&lt;/SPAN&gt;var text = Text {    &lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 116:&lt;/SPAN&gt;    x: 100&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 117:&lt;/SPAN&gt;    y: 370&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 118:&lt;/SPAN&gt;    fill: Color.WHITE&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 119:&lt;/SPAN&gt;    //wrappingWidth: 200&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 120:&lt;/SPAN&gt;    content: bind messages[currentMsg];&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 121:&lt;/SPAN&gt;    textOrigin: TextOrigin.TOP;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 122:&lt;/SPAN&gt;    textAlignment: TextAlignment.CENTER;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 123:&lt;/SPAN&gt;    font: Font.font(&amp;quot;Sans serif&amp;quot;, FontWeight.BOLD, 25)&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 124:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 125:&lt;/SPAN&gt;};&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 126:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 127:&lt;/SPAN&gt;var penguim1 = Penguim {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 128:&lt;/SPAN&gt;    image: penguim&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 129:&lt;/SPAN&gt;    x: 257&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 130:&lt;/SPAN&gt;    y: -20&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 131:&lt;/SPAN&gt;    spriteWidth: 10&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 132:&lt;/SPAN&gt;    spriteHeight: 10&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 133:&lt;/SPAN&gt;};&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 134:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 135:&lt;/SPAN&gt;var penguim2 = Penguim {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 136:&lt;/SPAN&gt;    image: penguim&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 137:&lt;/SPAN&gt;    x: 257&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 138:&lt;/SPAN&gt;    y: -70&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 139:&lt;/SPAN&gt;    spriteWidth: 10&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 140:&lt;/SPAN&gt;    spriteHeight: 10&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 141:&lt;/SPAN&gt;};&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 142:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 143:&lt;/SPAN&gt;var penguim3 = Penguim {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 144:&lt;/SPAN&gt;    image: penguim&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 145:&lt;/SPAN&gt;    x: 257&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 146:&lt;/SPAN&gt;    y: -120&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 147:&lt;/SPAN&gt;    spriteWidth: 10&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 148:&lt;/SPAN&gt;    spriteHeight: 10&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 149:&lt;/SPAN&gt;};&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 150:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 151:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 152:&lt;/SPAN&gt;def times =&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 153:&lt;/SPAN&gt;for (i in [0..36]) {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 154:&lt;/SPAN&gt;    KeyFrame {&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 155:&lt;/SPAN&gt;        time: msgTimes[i]&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 156:&lt;/SPAN&gt;        action: function() {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 157:&lt;/SPAN&gt;            currentMsg = i;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 158:&lt;/SPAN&gt;        }&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 159:&lt;/SPAN&gt;    }&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 160:&lt;/SPAN&gt;}&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 161:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 162:&lt;/SPAN&gt;def penguins =&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 163:&lt;/SPAN&gt;for (i in [0..100]) {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 164:&lt;/SPAN&gt;    var rand = 150 + (&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 165:&lt;/SPAN&gt;    Math.random() * 220).intValue();&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 166:&lt;/SPAN&gt;    var randy = 200 + (&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 167:&lt;/SPAN&gt;    Math.random() * 320).intValue();&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 168:&lt;/SPAN&gt;    randy *= -1;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 169:&lt;/SPAN&gt;    Penguim {&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 170:&lt;/SPAN&gt;        image: penguim&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 171:&lt;/SPAN&gt;        x: rand&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 172:&lt;/SPAN&gt;        y: randy&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 173:&lt;/SPAN&gt;        spriteWidth: 10&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 174:&lt;/SPAN&gt;        spriteHeight: 10&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 175:&lt;/SPAN&gt;    };&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 176:&lt;/SPAN&gt;};&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 177:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 178:&lt;/SPAN&gt;Timeline {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 179:&lt;/SPAN&gt;    //repeatCount: Timeline.INDEFINITE&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 180:&lt;/SPAN&gt;    keyFrames: [&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 181:&lt;/SPAN&gt;        times&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 182:&lt;/SPAN&gt;    ]&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 183:&lt;/SPAN&gt;}.play();&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 184:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 185:&lt;/SPAN&gt;Timeline {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 186:&lt;/SPAN&gt;    //repeatCount: Timeline.INDEFINITE&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 187:&lt;/SPAN&gt;    keyFrames: [&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 188:&lt;/SPAN&gt;        KeyFrame {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 189:&lt;/SPAN&gt;            time: 8s&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 190:&lt;/SPAN&gt;            action: function() {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 191:&lt;/SPAN&gt;                penguim1.timeLine.play();&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 192:&lt;/SPAN&gt;                penguim2.timeLine.play();&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 193:&lt;/SPAN&gt;                penguim3.timeLine.play();&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 194:&lt;/SPAN&gt;            }&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 195:&lt;/SPAN&gt;        },&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 196:&lt;/SPAN&gt;        KeyFrame {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 197:&lt;/SPAN&gt;            time: 71s&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 198:&lt;/SPAN&gt;            action: function() {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 199:&lt;/SPAN&gt;                for (i in [0..100]) {&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 200:&lt;/SPAN&gt;                    penguins[i].timeLine.play();&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 201:&lt;/SPAN&gt;                }&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 202:&lt;/SPAN&gt;                insert penguins into stage.scene.content&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 203:&lt;/SPAN&gt;            }&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 204:&lt;/SPAN&gt;        }&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 205:&lt;/SPAN&gt;    ]&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 206:&lt;/SPAN&gt;}.play();&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 207:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 208:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 209:&lt;/SPAN&gt;var stage = Stage {&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 210:&lt;/SPAN&gt;    title: &amp;quot;Penguins Demo - Fabr&amp;iacute;cio Catae - JavaFX version by sergiosvieira@gmail.com&amp;quot;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 211:&lt;/SPAN&gt;    width: 640&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 212:&lt;/SPAN&gt;    height: 425&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 213:&lt;/SPAN&gt;    scene: Scene {&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 214:&lt;/SPAN&gt;        content: [&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 215:&lt;/SPAN&gt;            scenario,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 216:&lt;/SPAN&gt;            penguim1,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 217:&lt;/SPAN&gt;            penguim2,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 218:&lt;/SPAN&gt;            penguim3,&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 219:&lt;/SPAN&gt;            text&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 220:&lt;/SPAN&gt;        ]&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 221:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 222:&lt;/SPAN&gt;    }&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 223:&lt;/SPAN&gt;}&lt;br /&gt;&lt;SPAN CLASS="gutter"&gt; 224:&lt;/SPAN&gt;&lt;br /&gt;&lt;SPAN CLASS="gutterH"&gt; 225:&lt;/SPAN&gt;&lt;br /&gt;&lt;/PRE&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/403830458419686723-7545533240337005047?l=sergiosvieira.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sergiosvieira.blogspot.com/feeds/7545533240337005047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sergiosvieira.blogspot.com/2009/01/javafx-penguins-demo-version.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/403830458419686723/posts/default/7545533240337005047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/403830458419686723/posts/default/7545533240337005047'/><link rel='alternate' type='text/html' href='http://sergiosvieira.blogspot.com/2009/01/javafx-penguins-demo-version.html' title='JavaFX Penguins Demo Version'/><author><name>Antônio Sérgio de Sousa Vieira</name><uri>http://www.blogger.com/profile/14016249331223233496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_7tntANiB5uA/SUrOQRpPtLI/AAAAAAAAAAk/0_l8X1sAkZE/s1600-R/sergiovieira.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_7tntANiB5uA/SWEGTCOQNZI/AAAAAAAAABg/SWjoqrhke-g/s72-c/scenario.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-403830458419686723.post-3905966926978691638</id><published>2009-01-03T10:53:00.005-03:00</published><updated>2009-01-03T14:27:48.417-03:00</updated><title type='text'>JavaFX Player Movement Example</title><content type='html'>Hi,&lt;br /&gt;&lt;br /&gt;Today I created an example of using the player movement. For that, I used the Bomberman sprites.&lt;br /&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="background-color:#5D7CBA; border-color: #353535; color:#0; font-family:Arial, Helvetica, sans-serif; font-size:11px; padding:0px; border-width:1px; border-style:solid"&gt;&lt;tr style="background-color:#FFFFFF;"&gt;&lt;td align="center" style="padding:5px"&gt;&lt;a href="http://www.esnips.com/doc/99ef1beb-8cd4-4b99-a14a-8b96a12c8219/bomberman/?widget=documentIcon"&gt;&lt;img border="0" alt="bomberman" title="click to Viewbomberman" src="/images/thumbs/any.gif"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background-color:#FFFFFF;"&gt;&lt;td style="padding:5px" align="center"&gt;&lt;strong&gt;&lt;a style="color:#333333" href="http://www.esnips.com/doc/99ef1beb-8cd4-4b99-a14a-8b96a12c8219/bomberman/?widget=documentIcon"&gt;bomberman.rar&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding:5px; font-size:9px; color:#FFFFFF" valign="bottom"&gt;Hosted by &lt;a href="http://www.esnips.com" style="color:#FFFFFF"&gt;eSnips&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/nX3UF_LJXjI&amp;hl=pt-br&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/nX3UF_LJXjI&amp;hl=pt-br&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7tntANiB5uA/SV91If77DfI/AAAAAAAAABQ/kLb1tD1C028/s1600-h/bomberman.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 68px;" src="http://2.bp.blogspot.com/_7tntANiB5uA/SV91If77DfI/AAAAAAAAABQ/kLb1tD1C028/s320/bomberman.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5287073276428488178" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_7tntANiB5uA/SV91QZtoDNI/AAAAAAAAABY/RjQXrY9nVmU/s1600-h/blocos.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 128px; height: 16px;" src="http://3.bp.blogspot.com/_7tntANiB5uA/SV91QZtoDNI/AAAAAAAAABY/RjQXrY9nVmU/s320/blocos.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5287073412196863186" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;style type="text/css"&gt;&lt;!--&lt;br /&gt;.syntax0 {&lt;br /&gt;color: #000000;&lt;br /&gt;}&lt;br /&gt;.syntax1 {&lt;br /&gt;color: #cc0000;&lt;br /&gt;}&lt;br /&gt;.syntax2 {&lt;br /&gt;color: #ff8400;&lt;br /&gt;}&lt;br /&gt;.syntax3 {&lt;br /&gt;color: #6600cc;&lt;br /&gt;}&lt;br /&gt;.syntax4 {&lt;br /&gt;color: #cc6600;&lt;br /&gt;}&lt;br /&gt;.syntax5 {&lt;br /&gt;color: #ff0000;&lt;br /&gt;}&lt;br /&gt;.syntax6 {&lt;br /&gt;color: #9966ff;&lt;br /&gt;}&lt;br /&gt;.syntax7 {&lt;br /&gt;background: #ffffcc;&lt;br /&gt;color: #ff0066;&lt;br /&gt;}&lt;br /&gt;.syntax8 {&lt;br /&gt;color: #006699;&lt;br /&gt;font-weight: bold;&lt;br /&gt;}&lt;br /&gt;.syntax9 {&lt;br /&gt;color: #009966;&lt;br /&gt;font-weight: bold;&lt;br /&gt;}&lt;br /&gt;.syntax10 {&lt;br /&gt;color: #0099ff;&lt;br /&gt;font-weight: bold;&lt;br /&gt;}&lt;br /&gt;.syntax11 {&lt;br /&gt;color: #66ccff;&lt;br /&gt;font-weight: bold;&lt;br /&gt;}&lt;br /&gt;.syntax12 {&lt;br /&gt;color: #02b902;&lt;br /&gt;}&lt;br /&gt;.syntax13 {&lt;br /&gt;color: #ff00cc;&lt;br /&gt;}&lt;br /&gt;.syntax14 {&lt;br /&gt;color: #cc00cc;&lt;br /&gt;}&lt;br /&gt;.syntax15 {&lt;br /&gt;color: #9900cc;&lt;br /&gt;}&lt;br /&gt;.syntax16 {&lt;br /&gt;color: #6600cc;&lt;br /&gt;}&lt;br /&gt;.syntax17 {&lt;br /&gt;color: #0000ff;&lt;br /&gt;}&lt;br /&gt;.syntax18 {&lt;br /&gt;color: #000000;&lt;br /&gt;font-weight: bold;&lt;br /&gt;}&lt;br /&gt;.gutter {&lt;br /&gt;background: #dbdbdb;&lt;br /&gt;color: #000000;&lt;br /&gt;}&lt;br /&gt;.gutterH {&lt;br /&gt;background: #dbdbdb;&lt;br /&gt;color: #990066;&lt;br /&gt;}&lt;br /&gt;--&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="syntax0"&gt;&lt;span class="gutter"&gt;   1:&lt;/span&gt;/*&lt;br /&gt;&lt;span class="gutter"&gt;   2:&lt;/span&gt; * Bomberman.fx&lt;br /&gt;&lt;span class="gutter"&gt;   3:&lt;/span&gt; *&lt;br /&gt;&lt;span class="gutter"&gt;   4:&lt;/span&gt; * Created on 03/01/2009, 09:08:25&lt;br /&gt;&lt;span class="gutterH"&gt;   5:&lt;/span&gt; */&lt;br /&gt;&lt;span class="gutter"&gt;   6:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutter"&gt;   7:&lt;/span&gt;package moving;&lt;br /&gt;&lt;span class="gutter"&gt;   8:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutter"&gt;   9:&lt;/span&gt;import javafx.animation.KeyFrame;&lt;br /&gt;&lt;span class="gutterH"&gt;  10:&lt;/span&gt;import javafx.animation.Timeline;&lt;br /&gt;&lt;span class="gutter"&gt;  11:&lt;/span&gt;import javafx.geometry.Rectangle2D;&lt;br /&gt;&lt;span class="gutter"&gt;  12:&lt;/span&gt;import javafx.scene.CustomNode;&lt;br /&gt;&lt;span class="gutter"&gt;  13:&lt;/span&gt;import javafx.scene.image.Image;&lt;br /&gt;&lt;span class="gutter"&gt;  14:&lt;/span&gt;import javafx.scene.image.ImageView;&lt;br /&gt;&lt;span class="gutterH"&gt;  15:&lt;/span&gt;import javafx.scene.input.KeyCode;&lt;br /&gt;&lt;span class="gutter"&gt;  16:&lt;/span&gt;import javafx.scene.input.KeyEvent;&lt;br /&gt;&lt;span class="gutter"&gt;  17:&lt;/span&gt;import javafx.scene.Node;&lt;br /&gt;&lt;span class="gutter"&gt;  18:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutter"&gt;  19:&lt;/span&gt;/**&lt;br /&gt;&lt;span class="gutterH"&gt;  20:&lt;/span&gt; * @author sergio&lt;br /&gt;&lt;span class="gutter"&gt;  21:&lt;/span&gt; */&lt;br /&gt;&lt;span class="gutter"&gt;  22:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutter"&gt;  23:&lt;/span&gt;public class Bomberman extends CustomNode {&lt;br /&gt;&lt;span class="gutter"&gt;  24:&lt;/span&gt;    var up: Boolean = false; var down: Boolean = false;&lt;br /&gt;&lt;span class="gutterH"&gt;  25:&lt;/span&gt;    var left: Boolean = false; var right: Boolean = false;&lt;br /&gt;&lt;span class="gutter"&gt;  26:&lt;/span&gt;    var none: Boolean = true;&lt;br /&gt;&lt;span class="gutter"&gt;  27:&lt;/span&gt;    var firstSprite: Integer = 39;&lt;br /&gt;&lt;span class="gutter"&gt;  28:&lt;/span&gt;    var lastSprite: Integer = 0;&lt;br /&gt;&lt;span class="gutter"&gt;  29:&lt;/span&gt;    var imageView: ImageView;&lt;br /&gt;&lt;span class="gutterH"&gt;  30:&lt;/span&gt;    var currentSprite: Integer = 0;&lt;br /&gt;&lt;span class="gutter"&gt;  31:&lt;/span&gt;    public var x: Integer on replace {&lt;br /&gt;&lt;span class="gutter"&gt;  32:&lt;/span&gt;        imageView.x = x&lt;br /&gt;&lt;span class="gutter"&gt;  33:&lt;/span&gt;    }&lt;br /&gt;&lt;span class="gutter"&gt;  34:&lt;/span&gt;    public var y: Integer on replace {&lt;br /&gt;&lt;span class="gutterH"&gt;  35:&lt;/span&gt;        imageView.y = y&lt;br /&gt;&lt;span class="gutter"&gt;  36:&lt;/span&gt;    }&lt;br /&gt;&lt;span class="gutter"&gt;  37:&lt;/span&gt;    public var spriteWidth: Integer;&lt;br /&gt;&lt;span class="gutter"&gt;  38:&lt;/span&gt;    public var spriteHeight: Integer;&lt;br /&gt;&lt;span class="gutter"&gt;  39:&lt;/span&gt;    public var image: Image;&lt;br /&gt;&lt;span class="gutterH"&gt;  40:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutter"&gt;  41:&lt;/span&gt;    override public function create(): Node {&lt;br /&gt;&lt;span class="gutter"&gt;  42:&lt;/span&gt;        imageView&lt;br /&gt;&lt;span class="gutter"&gt;  43:&lt;/span&gt;    }&lt;br /&gt;&lt;span class="gutter"&gt;  44:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutterH"&gt;  45:&lt;/span&gt;    function loop() {&lt;br /&gt;&lt;span class="gutter"&gt;  46:&lt;/span&gt;        if (none) {&lt;br /&gt;&lt;span class="gutter"&gt;  47:&lt;/span&gt;            currentSprite = firstSprite&lt;br /&gt;&lt;span class="gutter"&gt;  48:&lt;/span&gt;        } else {&lt;br /&gt;&lt;span class="gutter"&gt;  49:&lt;/span&gt;            if (up) {&lt;br /&gt;&lt;span class="gutterH"&gt;  50:&lt;/span&gt;                firstSprite = 20;&lt;br /&gt;&lt;span class="gutter"&gt;  51:&lt;/span&gt;                lastSprite = 28;&lt;br /&gt;&lt;span class="gutter"&gt;  52:&lt;/span&gt;                if (currentSprite &amp;gt;= firstSprite and currentSprite &amp;lt;= lastSprite) {&lt;br /&gt;&lt;span class="gutter"&gt;  53:&lt;/span&gt;                    currentSprite++;&lt;br /&gt;&lt;span class="gutter"&gt;  54:&lt;/span&gt;                } else {&lt;br /&gt;&lt;span class="gutterH"&gt;  55:&lt;/span&gt;                    currentSprite = firstSprite;&lt;br /&gt;&lt;span class="gutter"&gt;  56:&lt;/span&gt;                }&lt;br /&gt;&lt;span class="gutter"&gt;  57:&lt;/span&gt;                y -= 2;&lt;br /&gt;&lt;span class="gutter"&gt;  58:&lt;/span&gt;            } else&lt;br /&gt;&lt;span class="gutter"&gt;  59:&lt;/span&gt;            if (down) {&lt;br /&gt;&lt;span class="gutterH"&gt;  60:&lt;/span&gt;                firstSprite = 30;&lt;br /&gt;&lt;span class="gutter"&gt;  61:&lt;/span&gt;                lastSprite = 38;&lt;br /&gt;&lt;span class="gutter"&gt;  62:&lt;/span&gt;                if (currentSprite &amp;gt;= firstSprite and currentSprite &amp;lt;= lastSprite) {&lt;br /&gt;&lt;span class="gutter"&gt;  63:&lt;/span&gt;                    currentSprite++;&lt;br /&gt;&lt;span class="gutter"&gt;  64:&lt;/span&gt;                } else {                    &lt;br /&gt;&lt;span class="gutterH"&gt;  65:&lt;/span&gt;                    currentSprite = firstSprite;&lt;br /&gt;&lt;span class="gutter"&gt;  66:&lt;/span&gt;                }&lt;br /&gt;&lt;span class="gutter"&gt;  67:&lt;/span&gt;                y += 2;&lt;br /&gt;&lt;span class="gutter"&gt;  68:&lt;/span&gt;            } else&lt;br /&gt;&lt;span class="gutter"&gt;  69:&lt;/span&gt;            if (left) {&lt;br /&gt;&lt;span class="gutterH"&gt;  70:&lt;/span&gt;                firstSprite = 19;&lt;br /&gt;&lt;span class="gutter"&gt;  71:&lt;/span&gt;                lastSprite = 11;&lt;br /&gt;&lt;span class="gutter"&gt;  72:&lt;/span&gt;                if (currentSprite &amp;lt;= firstSprite and currentSprite &amp;gt;= lastSprite) {&lt;br /&gt;&lt;span class="gutter"&gt;  73:&lt;/span&gt;                    currentSprite--;&lt;br /&gt;&lt;span class="gutter"&gt;  74:&lt;/span&gt;                } else {&lt;br /&gt;&lt;span class="gutterH"&gt;  75:&lt;/span&gt;                    currentSprite = firstSprite;&lt;br /&gt;&lt;span class="gutter"&gt;  76:&lt;/span&gt;                }&lt;br /&gt;&lt;span class="gutter"&gt;  77:&lt;/span&gt;                x -= 2;&lt;br /&gt;&lt;span class="gutter"&gt;  78:&lt;/span&gt;            } else&lt;br /&gt;&lt;span class="gutter"&gt;  79:&lt;/span&gt;            if (right) {&lt;br /&gt;&lt;span class="gutterH"&gt;  80:&lt;/span&gt;                firstSprite = 9;&lt;br /&gt;&lt;span class="gutter"&gt;  81:&lt;/span&gt;                lastSprite = 1;&lt;br /&gt;&lt;span class="gutter"&gt;  82:&lt;/span&gt;                if (currentSprite &amp;lt;= firstSprite and currentSprite &amp;gt;= lastSprite) {&lt;br /&gt;&lt;span class="gutter"&gt;  83:&lt;/span&gt;                    currentSprite--;&lt;br /&gt;&lt;span class="gutter"&gt;  84:&lt;/span&gt;                } else {&lt;br /&gt;&lt;span class="gutterH"&gt;  85:&lt;/span&gt;                    currentSprite = firstSprite;&lt;br /&gt;&lt;span class="gutter"&gt;  86:&lt;/span&gt;                }&lt;br /&gt;&lt;span class="gutter"&gt;  87:&lt;/span&gt;                x += 2;&lt;br /&gt;&lt;span class="gutter"&gt;  88:&lt;/span&gt;            }&lt;br /&gt;&lt;span class="gutter"&gt;  89:&lt;/span&gt;        }&lt;br /&gt;&lt;span class="gutterH"&gt;  90:&lt;/span&gt;    }&lt;br /&gt;&lt;span class="gutter"&gt;  91:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutter"&gt;  92:&lt;/span&gt;    init {&lt;br /&gt;&lt;span class="gutter"&gt;  93:&lt;/span&gt;        def cols = (image.width / spriteWidth) - 1;&lt;br /&gt;&lt;span class="gutter"&gt;  94:&lt;/span&gt;        def rows = (image.height / spriteHeight) - 1;&lt;br /&gt;&lt;span class="gutterH"&gt;  95:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutter"&gt;  96:&lt;/span&gt;        def viewPorts =&lt;br /&gt;&lt;span class="gutter"&gt;  97:&lt;/span&gt;        for (i in [0..rows]){&lt;br /&gt;&lt;span class="gutter"&gt;  98:&lt;/span&gt;            for ( j in [0..cols]) {&lt;br /&gt;&lt;span class="gutter"&gt;  99:&lt;/span&gt;                Rectangle2D {&lt;br /&gt;&lt;span class="gutterH"&gt; 100:&lt;/span&gt;                    minX: j * spriteWidth&lt;br /&gt;&lt;span class="gutter"&gt; 101:&lt;/span&gt;                    minY: i * spriteHeight&lt;br /&gt;&lt;span class="gutter"&gt; 102:&lt;/span&gt;                    width: spriteWidth&lt;br /&gt;&lt;span class="gutter"&gt; 103:&lt;/span&gt;                    height: spriteHeight&lt;br /&gt;&lt;span class="gutter"&gt; 104:&lt;/span&gt;                }&lt;br /&gt;&lt;span class="gutterH"&gt; 105:&lt;/span&gt;            }&lt;br /&gt;&lt;span class="gutter"&gt; 106:&lt;/span&gt;        }&lt;br /&gt;&lt;span class="gutter"&gt; 107:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutter"&gt; 108:&lt;/span&gt;        Timeline {&lt;br /&gt;&lt;span class="gutter"&gt; 109:&lt;/span&gt;            repeatCount: Timeline.INDEFINITE&lt;br /&gt;&lt;span class="gutterH"&gt; 110:&lt;/span&gt;            keyFrames: [&lt;br /&gt;&lt;span class="gutter"&gt; 111:&lt;/span&gt;                KeyFrame {&lt;br /&gt;&lt;span class="gutter"&gt; 112:&lt;/span&gt;                    time: 20ms&lt;br /&gt;&lt;span class="gutter"&gt; 113:&lt;/span&gt;                    action: function(): Void {&lt;br /&gt;&lt;span class="gutter"&gt; 114:&lt;/span&gt;                        loop();&lt;br /&gt;&lt;span class="gutterH"&gt; 115:&lt;/span&gt;                    }&lt;br /&gt;&lt;span class="gutter"&gt; 116:&lt;/span&gt;                }&lt;br /&gt;&lt;span class="gutter"&gt; 117:&lt;/span&gt;            ]&lt;br /&gt;&lt;span class="gutter"&gt; 118:&lt;/span&gt;        }.play();&lt;br /&gt;&lt;span class="gutter"&gt; 119:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutterH"&gt; 120:&lt;/span&gt;        imageView = ImageView {&lt;br /&gt;&lt;span class="gutter"&gt; 121:&lt;/span&gt;            x: bind x&lt;br /&gt;&lt;span class="gutter"&gt; 122:&lt;/span&gt;            y: bind y&lt;br /&gt;&lt;span class="gutter"&gt; 123:&lt;/span&gt;            image: this.image&lt;br /&gt;&lt;span class="gutter"&gt; 124:&lt;/span&gt;            viewport: bind viewPorts[currentSprite]&lt;br /&gt;&lt;span class="gutterH"&gt; 125:&lt;/span&gt;            onKeyPressed: function( e: KeyEvent ):Void {&lt;br /&gt;&lt;span class="gutter"&gt; 126:&lt;/span&gt;                none = false;&lt;br /&gt;&lt;span class="gutter"&gt; 127:&lt;/span&gt;                if (e.code == KeyCode.VK_DOWN) {&lt;br /&gt;&lt;span class="gutter"&gt; 128:&lt;/span&gt;                    down = true;&lt;br /&gt;&lt;span class="gutter"&gt; 129:&lt;/span&gt;                } else&lt;br /&gt;&lt;span class="gutterH"&gt; 130:&lt;/span&gt;                if (e.code == KeyCode.VK_UP) {&lt;br /&gt;&lt;span class="gutter"&gt; 131:&lt;/span&gt;                    up = true;&lt;br /&gt;&lt;span class="gutter"&gt; 132:&lt;/span&gt;                } else&lt;br /&gt;&lt;span class="gutter"&gt; 133:&lt;/span&gt;                if (e.code == KeyCode.VK_LEFT) {&lt;br /&gt;&lt;span class="gutter"&gt; 134:&lt;/span&gt;                    left = true;&lt;br /&gt;&lt;span class="gutterH"&gt; 135:&lt;/span&gt;                } else&lt;br /&gt;&lt;span class="gutter"&gt; 136:&lt;/span&gt;                if (e.code == KeyCode.VK_RIGHT) {&lt;br /&gt;&lt;span class="gutter"&gt; 137:&lt;/span&gt;                    right = true;&lt;br /&gt;&lt;span class="gutter"&gt; 138:&lt;/span&gt;                }&lt;br /&gt;&lt;span class="gutter"&gt; 139:&lt;/span&gt;            }&lt;br /&gt;&lt;span class="gutterH"&gt; 140:&lt;/span&gt;            onKeyReleased: function( e: KeyEvent ):Void {                &lt;br /&gt;&lt;span class="gutter"&gt; 141:&lt;/span&gt;                if (e.code == KeyCode.VK_DOWN) {&lt;br /&gt;&lt;span class="gutter"&gt; 142:&lt;/span&gt;                    down = false;&lt;br /&gt;&lt;span class="gutter"&gt; 143:&lt;/span&gt;                } else&lt;br /&gt;&lt;span class="gutter"&gt; 144:&lt;/span&gt;                if (e.code == KeyCode.VK_UP) {&lt;br /&gt;&lt;span class="gutterH"&gt; 145:&lt;/span&gt;                    up = false;&lt;br /&gt;&lt;span class="gutter"&gt; 146:&lt;/span&gt;                } else&lt;br /&gt;&lt;span class="gutter"&gt; 147:&lt;/span&gt;                if (e.code == KeyCode.VK_LEFT) {&lt;br /&gt;&lt;span class="gutter"&gt; 148:&lt;/span&gt;                    left = false;&lt;br /&gt;&lt;span class="gutter"&gt; 149:&lt;/span&gt;                } else&lt;br /&gt;&lt;span class="gutterH"&gt; 150:&lt;/span&gt;                if (e.code == KeyCode.VK_RIGHT) {&lt;br /&gt;&lt;span class="gutter"&gt; 151:&lt;/span&gt;                    right = false;&lt;br /&gt;&lt;span class="gutter"&gt; 152:&lt;/span&gt;                }&lt;br /&gt;&lt;span class="gutter"&gt; 153:&lt;/span&gt;            }&lt;br /&gt;&lt;span class="gutter"&gt; 154:&lt;/span&gt;        }&lt;br /&gt;&lt;span class="gutterH"&gt; 155:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutter"&gt; 156:&lt;/span&gt;        if (imageView.image.error) {&lt;br /&gt;&lt;span class="gutter"&gt; 157:&lt;/span&gt;            println(&amp;quot;Error: image {imageView.image.url} not found!&amp;quot;);&lt;br /&gt;&lt;span class="gutter"&gt; 158:&lt;/span&gt;        }&lt;br /&gt;&lt;span class="gutter"&gt; 159:&lt;/span&gt;    }&lt;br /&gt;&lt;span class="gutterH"&gt; 160:&lt;/span&gt;}&lt;br /&gt;&lt;span class="gutter"&gt; 161:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="syntax0"&gt;&lt;span class="gutter"&gt;   1:&lt;/span&gt;/*&lt;br /&gt;&lt;span class="gutter"&gt;   2:&lt;/span&gt; * Main.fx&lt;br /&gt;&lt;span class="gutter"&gt;   3:&lt;/span&gt; *&lt;br /&gt;&lt;span class="gutter"&gt;   4:&lt;/span&gt; * Created on 03/01/2009, 08:36:28&lt;br /&gt;&lt;span class="gutterH"&gt;   5:&lt;/span&gt; */&lt;br /&gt;&lt;span class="gutter"&gt;   6:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutter"&gt;   7:&lt;/span&gt;package moving;&lt;br /&gt;&lt;span class="gutter"&gt;   8:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutter"&gt;   9:&lt;/span&gt;import javafx.geometry.Rectangle2D;&lt;br /&gt;&lt;span class="gutterH"&gt;  10:&lt;/span&gt;import javafx.scene.image.Image;&lt;br /&gt;&lt;span class="gutter"&gt;  11:&lt;/span&gt;import javafx.scene.image.ImageView;&lt;br /&gt;&lt;span class="gutter"&gt;  12:&lt;/span&gt;import javafx.scene.paint.Color;&lt;br /&gt;&lt;span class="gutter"&gt;  13:&lt;/span&gt;import javafx.scene.Scene;&lt;br /&gt;&lt;span class="gutter"&gt;  14:&lt;/span&gt;import javafx.scene.text.Font;&lt;br /&gt;&lt;span class="gutterH"&gt;  15:&lt;/span&gt;import javafx.scene.text.Text;&lt;br /&gt;&lt;span class="gutter"&gt;  16:&lt;/span&gt;import javafx.scene.text.TextAlignment;&lt;br /&gt;&lt;span class="gutter"&gt;  17:&lt;/span&gt;import javafx.stage.Stage;&lt;br /&gt;&lt;span class="gutter"&gt;  18:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutter"&gt;  19:&lt;/span&gt;/**&lt;br /&gt;&lt;span class="gutterH"&gt;  20:&lt;/span&gt; * @author S&amp;eacute;rgio Vieira - 03/01/2009 - sergiosvieira@gmail.com&lt;br /&gt;&lt;span class="gutter"&gt;  21:&lt;/span&gt; */&lt;br /&gt;&lt;span class="gutter"&gt;  22:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutter"&gt;  23:&lt;/span&gt;var bomberman = Bomberman {&lt;br /&gt;&lt;span class="gutter"&gt;  24:&lt;/span&gt;    x: 320&lt;br /&gt;&lt;span class="gutterH"&gt;  25:&lt;/span&gt;    y: 240&lt;br /&gt;&lt;span class="gutter"&gt;  26:&lt;/span&gt;    spriteHeight: 24&lt;br /&gt;&lt;span class="gutter"&gt;  27:&lt;/span&gt;    spriteWidth: 17&lt;br /&gt;&lt;span class="gutter"&gt;  28:&lt;/span&gt;    image: Image {&lt;br /&gt;&lt;span class="gutter"&gt;  29:&lt;/span&gt;        url: &amp;quot;{__DIR__}bomberman.png&amp;quot;&lt;br /&gt;&lt;span class="gutterH"&gt;  30:&lt;/span&gt;    }&lt;br /&gt;&lt;span class="gutter"&gt;  31:&lt;/span&gt;};&lt;br /&gt;&lt;span class="gutter"&gt;  32:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutter"&gt;  33:&lt;/span&gt;var tiles =&lt;br /&gt;&lt;span class="gutter"&gt;  34:&lt;/span&gt;for (i in [0..40]) {&lt;br /&gt;&lt;span class="gutterH"&gt;  35:&lt;/span&gt;    for(j in [0..30]) {&lt;br /&gt;&lt;span class="gutter"&gt;  36:&lt;/span&gt;        ImageView {&lt;br /&gt;&lt;span class="gutter"&gt;  37:&lt;/span&gt;            image: Image {&lt;br /&gt;&lt;span class="gutter"&gt;  38:&lt;/span&gt;                url: &amp;quot;{__DIR__}blocos.png&amp;quot;&lt;br /&gt;&lt;span class="gutter"&gt;  39:&lt;/span&gt;            }&lt;br /&gt;&lt;span class="gutterH"&gt;  40:&lt;/span&gt;            x: i * 16&lt;br /&gt;&lt;span class="gutter"&gt;  41:&lt;/span&gt;            y: j * 16&lt;br /&gt;&lt;span class="gutter"&gt;  42:&lt;/span&gt;            viewport: Rectangle2D {&lt;br /&gt;&lt;span class="gutter"&gt;  43:&lt;/span&gt;                minX: 0&lt;br /&gt;&lt;span class="gutter"&gt;  44:&lt;/span&gt;                minY: 0&lt;br /&gt;&lt;span class="gutterH"&gt;  45:&lt;/span&gt;                width: 16&lt;br /&gt;&lt;span class="gutter"&gt;  46:&lt;/span&gt;                height: 16&lt;br /&gt;&lt;span class="gutter"&gt;  47:&lt;/span&gt;            }&lt;br /&gt;&lt;span class="gutter"&gt;  48:&lt;/span&gt;        }&lt;br /&gt;&lt;span class="gutter"&gt;  49:&lt;/span&gt;    }&lt;br /&gt;&lt;span class="gutterH"&gt;  50:&lt;/span&gt;}&lt;br /&gt;&lt;span class="gutter"&gt;  51:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutter"&gt;  52:&lt;/span&gt;Stage {&lt;br /&gt;&lt;span class="gutter"&gt;  53:&lt;/span&gt;    title: &amp;quot;Player Movement Example - sergiosvieira@gmail.com&amp;quot;&lt;br /&gt;&lt;span class="gutter"&gt;  54:&lt;/span&gt;    width: 640&lt;br /&gt;&lt;span class="gutterH"&gt;  55:&lt;/span&gt;    height: 480&lt;br /&gt;&lt;span class="gutter"&gt;  56:&lt;/span&gt;    scene: Scene {&lt;br /&gt;&lt;span class="gutter"&gt;  57:&lt;/span&gt;        fill: Color.WHITE;&lt;br /&gt;&lt;span class="gutter"&gt;  58:&lt;/span&gt;        content: [&lt;br /&gt;&lt;span class="gutter"&gt;  59:&lt;/span&gt;            tiles,&lt;br /&gt;&lt;span class="gutterH"&gt;  60:&lt;/span&gt;            bomberman&lt;br /&gt;&lt;span class="gutter"&gt;  61:&lt;/span&gt;        ]&lt;br /&gt;&lt;span class="gutter"&gt;  62:&lt;/span&gt;    }&lt;br /&gt;&lt;span class="gutter"&gt;  63:&lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/403830458419686723-3905966926978691638?l=sergiosvieira.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sergiosvieira.blogspot.com/feeds/3905966926978691638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sergiosvieira.blogspot.com/2009/01/javafx-player-movement-example.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/403830458419686723/posts/default/3905966926978691638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/403830458419686723/posts/default/3905966926978691638'/><link rel='alternate' type='text/html' href='http://sergiosvieira.blogspot.com/2009/01/javafx-player-movement-example.html' title='JavaFX Player Movement Example'/><author><name>Antônio Sérgio de Sousa Vieira</name><uri>http://www.blogger.com/profile/14016249331223233496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_7tntANiB5uA/SUrOQRpPtLI/AAAAAAAAAAk/0_l8X1sAkZE/s1600-R/sergiovieira.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_7tntANiB5uA/SV91If77DfI/AAAAAAAAABQ/kLb1tD1C028/s72-c/bomberman.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-403830458419686723.post-1682027400247255275</id><published>2009-01-02T17:45:00.008-03:00</published><updated>2009-01-03T14:29:04.935-03:00</updated><title type='text'>JavaFX Animated Sprite Example</title><content type='html'>Hi there,&lt;br /&gt;&lt;br /&gt;it is my first post about javafx. I created an Animated Sprite Class. Look there!&lt;br /&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="background-color:#5D7CBA; border-color: #353535; color:#0; font-family:Arial, Helvetica, sans-serif; font-size:11px; padding:0px; border-width:1px; border-style:solid"&gt;&lt;tr style="background-color:#FFFFFF;"&gt;&lt;td align="center" style="padding:5px"&gt;&lt;a href="http://www.esnips.com/doc/b631ff69-aa09-4d20-839c-1f2940184023/spriteanimation/?widget=documentIcon"&gt;&lt;img border="0" alt="spriteanimation" title="click to Viewspriteanimation" src="/images/thumbs/any.gif"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="background-color:#FFFFFF;"&gt;&lt;td style="padding:5px" align="center"&gt;&lt;strong&gt;&lt;a style="color:#333333" href="http://www.esnips.com/doc/b631ff69-aa09-4d20-839c-1f2940184023/spriteanimation/?widget=documentIcon"&gt;spriteanimation.ra...&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding:5px; font-size:9px; color:#FFFFFF" valign="bottom"&gt;Hosted by &lt;a href="http://www.esnips.com" style="color:#FFFFFF"&gt;eSnips&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_7tntANiB5uA/SV5-QAouKGI/AAAAAAAAABA/K661aasQZKY/s1600-h/agente.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_7tntANiB5uA/SV5-QAouKGI/AAAAAAAAABA/K661aasQZKY/s320/agente.png" alt="" id="BLOGGER_PHOTO_ID_5286801826093344866" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_7tntANiB5uA/SV6Bs17OWHI/AAAAAAAAABI/yj5YEz5HSLw/s1600-h/agent.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 142px; height: 320px;" src="http://2.bp.blogspot.com/_7tntANiB5uA/SV6Bs17OWHI/AAAAAAAAABI/yj5YEz5HSLw/s320/agent.png" alt="" id="BLOGGER_PHOTO_ID_5286805619969251442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/jjjc1hiUgPE&amp;hl=pt-br&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/jjjc1hiUgPE&amp;hl=pt-br&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;style type="text/css"&gt;&lt;!-- .syntax0 { color: #000000; } .syntax1 { color: #cc0000; } .syntax2 { color: #ff8400; } .syntax3 { color: #6600cc; } .syntax4 { color: #cc6600; } .syntax5 { color: #ff0000; } .syntax6 { color: #9966ff; } .syntax7 { background: #ffffcc; color: #ff0066; } .syntax8 { color: #006699; font-weight: bold; } .syntax9 { color: #009966; font-weight: bold; } .syntax10 { color: #0099ff; font-weight: bold; } .syntax11 { color: #66ccff; font-weight: bold; } .syntax12 { color: #02b902; } .syntax13 { color: #ff00cc; } .syntax14 { color: #cc00cc; } .syntax15 { color: #9900cc; } .syntax16 { color: #6600cc; } .syntax17 { color: #0000ff; } .syntax18 { color: #000000; font-weight: bold; } .gutter { background: #dbdbdb; color: #000000; } .gutterH { background: #dbdbdb; color: #990066; } --&gt;&lt;/style&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="syntax0"&gt;&lt;span class="gutter"&gt;   1:&lt;/span&gt;/*&lt;br /&gt;&lt;span class="gutter"&gt;   2:&lt;/span&gt; * Main.fx&lt;br /&gt;&lt;span class="gutter"&gt;   3:&lt;/span&gt; *&lt;br /&gt;&lt;span class="gutter"&gt;   4:&lt;/span&gt; * Created on 31/12/2008, 22:27:26&lt;br /&gt;&lt;span class="gutterH"&gt;   5:&lt;/span&gt; */&lt;br /&gt;&lt;span class="gutter"&gt;   6:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutter"&gt;   7:&lt;/span&gt;package spriteanimation;&lt;br /&gt;&lt;span class="gutter"&gt;   8:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutter"&gt;   9:&lt;/span&gt;import javafx.geometry.Rectangle2D;&lt;br /&gt;&lt;span class="gutterH"&gt;  10:&lt;/span&gt;import javafx.scene.image.Image;&lt;br /&gt;&lt;span class="gutter"&gt;  11:&lt;/span&gt;import javafx.scene.paint.Color;&lt;br /&gt;&lt;span class="gutter"&gt;  12:&lt;/span&gt;import javafx.scene.Scene;&lt;br /&gt;&lt;span class="gutter"&gt;  13:&lt;/span&gt;import javafx.stage.Stage;&lt;br /&gt;&lt;span class="gutter"&gt;  14:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutterH"&gt;  15:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutter"&gt;  16:&lt;/span&gt;/**&lt;br /&gt;&lt;span class="gutter"&gt;  17:&lt;/span&gt; * @author Sérgio Vieira - 02/01/2009 - sergiosvieira@gmail.com&lt;br /&gt;&lt;span class="gutter"&gt;  18:&lt;/span&gt; */&lt;br /&gt;&lt;span class="gutter"&gt;  19:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutterH"&gt;  20:&lt;/span&gt;var stage = Stage {&lt;br /&gt;&lt;span class="gutter"&gt;  21:&lt;/span&gt;    title: "Animated Sprite Example - sergiosvieira@gmail.com"&lt;br /&gt;&lt;span class="gutter"&gt;  22:&lt;/span&gt;    width: 640&lt;br /&gt;&lt;span class="gutter"&gt;  23:&lt;/span&gt;    height: 480&lt;br /&gt;&lt;span class="gutter"&gt;  24:&lt;/span&gt;    onClose: function(): Void {&lt;br /&gt;&lt;span class="gutterH"&gt;  25:&lt;/span&gt;        java.lang.System.exit(0);&lt;br /&gt;&lt;span class="gutter"&gt;  26:&lt;/span&gt;    }&lt;br /&gt;&lt;span class="gutter"&gt;  27:&lt;/span&gt;    scene: Scene {&lt;br /&gt;&lt;span class="gutter"&gt;  28:&lt;/span&gt;        fill: Color.BLACK;&lt;br /&gt;&lt;span class="gutter"&gt;  29:&lt;/span&gt;        content: [&lt;br /&gt;&lt;span class="gutterH"&gt;  30:&lt;/span&gt;        ]&lt;br /&gt;&lt;span class="gutter"&gt;  31:&lt;/span&gt;    }&lt;br /&gt;&lt;span class="gutter"&gt;  32:&lt;/span&gt;}&lt;br /&gt;&lt;span class="gutter"&gt;  33:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutter"&gt;  34:&lt;/span&gt;for (i in [0..8]) {&lt;br /&gt;&lt;span class="gutterH"&gt;  35:&lt;/span&gt;    for (j in [0..8]) {&lt;br /&gt;&lt;span class="gutter"&gt;  36:&lt;/span&gt;    insert Player {&lt;br /&gt;&lt;span class="gutter"&gt;  37:&lt;/span&gt;            currentSprite: 0&lt;br /&gt;&lt;span class="gutter"&gt;  38:&lt;/span&gt;            cols: 7&lt;br /&gt;&lt;span class="gutter"&gt;  39:&lt;/span&gt;            rows: 17&lt;br /&gt;&lt;span class="gutterH"&gt;  40:&lt;/span&gt;            sprH: 32&lt;br /&gt;&lt;span class="gutter"&gt;  41:&lt;/span&gt;            sprW: 32&lt;br /&gt;&lt;span class="gutter"&gt;  42:&lt;/span&gt;            x: i * 32&lt;br /&gt;&lt;span class="gutter"&gt;  43:&lt;/span&gt;            y: j * 32&lt;br /&gt;&lt;span class="gutter"&gt;  44:&lt;/span&gt;            sprites: Image {&lt;br /&gt;&lt;span class="gutterH"&gt;  45:&lt;/span&gt;                url: "{__DIR__}agent.png"&lt;br /&gt;&lt;span class="gutter"&gt;  46:&lt;/span&gt;            }&lt;br /&gt;&lt;span class="gutter"&gt;  47:&lt;/span&gt;            fitWidth: 32&lt;br /&gt;&lt;span class="gutter"&gt;  48:&lt;/span&gt;    } into stage.scene.content;&lt;br /&gt;&lt;span class="gutter"&gt;  49:&lt;/span&gt;    }&lt;br /&gt;&lt;span class="gutterH"&gt;  50:&lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;style type="text/css"&gt;!-- .syntax0 { color: #000000; } .syntax1 { color: #cc0000; } .syntax2 { color: #ff8400; } .syntax3 { color: #6600cc; } .syntax4 { color: #cc6600; } .syntax5 { color: #ff0000; } .syntax6 { color: #9966ff; } .syntax7 { background: #ffffcc; color: #ff0066; } .syntax8 { color: #006699; font-weight: bold; } .syntax9 { color: #009966; font-weight: bold; } .syntax10 { color: #0099ff; font-weight: bold; } .syntax11 { color: #66ccff; font-weight: bold; } .syntax12 { color: #02b902; } .syntax13 { color: #ff00cc; } .syntax14 { color: #cc00cc; } .syntax15 { color: #9900cc; } .syntax16 { color: #6600cc; } .syntax17 { color: #0000ff; } .syntax18 { color: #000000; font-weight: bold; } .gutter { background: #dbdbdb; color: #000000; } .gutterH { background: #dbdbdb; color: #990066; } --&gt;&lt;/style&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="syntax0"&gt;&lt;span class="gutter"&gt;   1:&lt;/span&gt;/*&lt;br /&gt;&lt;span class="gutter"&gt;   2:&lt;/span&gt; * Agent.fx&lt;br /&gt;&lt;span class="gutter"&gt;   3:&lt;/span&gt; *&lt;br /&gt;&lt;span class="gutter"&gt;   4:&lt;/span&gt; * Created on 02/01/2009, 16:56:45&lt;br /&gt;&lt;span class="gutterH"&gt;   5:&lt;/span&gt; */&lt;br /&gt;&lt;span class="gutter"&gt;   6:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutter"&gt;   7:&lt;/span&gt;package spriteanimation;&lt;br /&gt;&lt;span class="gutter"&gt;   8:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutter"&gt;   9:&lt;/span&gt;import javafx.animation.KeyFrame;&lt;br /&gt;&lt;span class="gutterH"&gt;  10:&lt;/span&gt;import javafx.animation.Timeline;&lt;br /&gt;&lt;span class="gutter"&gt;  11:&lt;/span&gt;import javafx.geometry.Rectangle2D;&lt;br /&gt;&lt;span class="gutter"&gt;  12:&lt;/span&gt;import javafx.scene.CustomNode;&lt;br /&gt;&lt;span class="gutter"&gt;  13:&lt;/span&gt;import javafx.scene.image.Image;&lt;br /&gt;&lt;span class="gutter"&gt;  14:&lt;/span&gt;import javafx.scene.image.ImageView;&lt;br /&gt;&lt;span class="gutterH"&gt;  15:&lt;/span&gt;import javafx.scene.Node;&lt;br /&gt;&lt;span class="gutter"&gt;  16:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutter"&gt;  17:&lt;/span&gt;/**&lt;br /&gt;&lt;span class="gutter"&gt;  18:&lt;/span&gt; * @author Sérgio Vieira - 02/01/2009 - sergiosvieira@gmail.com&lt;br /&gt;&lt;span class="gutter"&gt;  19:&lt;/span&gt; */&lt;br /&gt;&lt;span class="gutterH"&gt;  20:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutter"&gt;  21:&lt;/span&gt;public class Player extends CustomNode{&lt;br /&gt;&lt;span class="gutter"&gt;  22:&lt;/span&gt;    var imageView: ImageView;&lt;br /&gt;&lt;span class="gutter"&gt;  23:&lt;/span&gt;    public var currentSprite: Integer;&lt;br /&gt;&lt;span class="gutter"&gt;  24:&lt;/span&gt;    public var sprW: Integer; // Sprite Width&lt;br /&gt;&lt;span class="gutterH"&gt;  25:&lt;/span&gt;    public var sprH: Integer; // Sprite Height&lt;br /&gt;&lt;span class="gutter"&gt;  26:&lt;/span&gt;    public var cols: Integer;&lt;br /&gt;&lt;span class="gutter"&gt;  27:&lt;/span&gt;    public var rows: Integer;&lt;br /&gt;&lt;span class="gutter"&gt;  28:&lt;/span&gt;    public var sprites: Image;&lt;br /&gt;&lt;span class="gutter"&gt;  29:&lt;/span&gt;    public var fitWidth: Integer on replace {&lt;br /&gt;&lt;span class="gutterH"&gt;  30:&lt;/span&gt;        imageView.fitWidth = fitWidth;&lt;br /&gt;&lt;span class="gutter"&gt;  31:&lt;/span&gt;    };&lt;br /&gt;&lt;span class="gutter"&gt;  32:&lt;/span&gt;    public var x: Integer on replace {&lt;br /&gt;&lt;span class="gutter"&gt;  33:&lt;/span&gt;        imageView.x = x;&lt;br /&gt;&lt;span class="gutter"&gt;  34:&lt;/span&gt;    };&lt;br /&gt;&lt;span class="gutterH"&gt;  35:&lt;/span&gt;    public var y: Integer on replace {&lt;br /&gt;&lt;span class="gutter"&gt;  36:&lt;/span&gt;        imageView.y = y;&lt;br /&gt;&lt;span class="gutter"&gt;  37:&lt;/span&gt;    };&lt;br /&gt;&lt;span class="gutter"&gt;  38:&lt;/span&gt;    def max = (cols + 1) * (rows + 1);&lt;br /&gt;&lt;span class="gutter"&gt;  39:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutterH"&gt;  40:&lt;/span&gt;    init {&lt;br /&gt;&lt;span class="gutter"&gt;  41:&lt;/span&gt;        def frames =&lt;br /&gt;&lt;span class="gutter"&gt;  42:&lt;/span&gt;        for (i in [0..rows]) {&lt;br /&gt;&lt;span class="gutter"&gt;  43:&lt;/span&gt;            for (j in [0..cols]) {&lt;br /&gt;&lt;span class="gutter"&gt;  44:&lt;/span&gt;                Rectangle2D {&lt;br /&gt;&lt;span class="gutterH"&gt;  45:&lt;/span&gt;                    minX: j * sprW,&lt;br /&gt;&lt;span class="gutter"&gt;  46:&lt;/span&gt;                    minY: i * sprH&lt;br /&gt;&lt;span class="gutter"&gt;  47:&lt;/span&gt;                    width: sprW,&lt;br /&gt;&lt;span class="gutter"&gt;  48:&lt;/span&gt;                    height: sprH&lt;br /&gt;&lt;span class="gutter"&gt;  49:&lt;/span&gt;                }&lt;br /&gt;&lt;span class="gutterH"&gt;  50:&lt;/span&gt;            }&lt;br /&gt;&lt;span class="gutter"&gt;  51:&lt;/span&gt;        };&lt;br /&gt;&lt;span class="gutter"&gt;  52:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutter"&gt;  53:&lt;/span&gt;        Timeline {&lt;br /&gt;&lt;span class="gutter"&gt;  54:&lt;/span&gt;            repeatCount: Timeline.INDEFINITE&lt;br /&gt;&lt;span class="gutterH"&gt;  55:&lt;/span&gt;            keyFrames: [&lt;br /&gt;&lt;span class="gutter"&gt;  56:&lt;/span&gt;                KeyFrame {&lt;br /&gt;&lt;span class="gutter"&gt;  57:&lt;/span&gt;                    time: 50ms&lt;br /&gt;&lt;span class="gutter"&gt;  58:&lt;/span&gt;                    action: function(): Void {&lt;br /&gt;&lt;span class="gutter"&gt;  59:&lt;/span&gt;                        play();&lt;br /&gt;&lt;span class="gutterH"&gt;  60:&lt;/span&gt;                    }&lt;br /&gt;&lt;span class="gutter"&gt;  61:&lt;/span&gt;                }&lt;br /&gt;&lt;span class="gutter"&gt;  62:&lt;/span&gt;            ]&lt;br /&gt;&lt;span class="gutter"&gt;  63:&lt;/span&gt;        }.play();&lt;br /&gt;&lt;span class="gutter"&gt;  64:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutterH"&gt;  65:&lt;/span&gt;        imageView = ImageView {&lt;br /&gt;&lt;span class="gutter"&gt;  66:&lt;/span&gt;            x: x&lt;br /&gt;&lt;span class="gutter"&gt;  67:&lt;/span&gt;            y: y&lt;br /&gt;&lt;span class="gutter"&gt;  68:&lt;/span&gt;            image: sprites&lt;br /&gt;&lt;span class="gutter"&gt;  69:&lt;/span&gt;            viewport: bind frames[currentSprite]&lt;br /&gt;&lt;span class="gutterH"&gt;  70:&lt;/span&gt;            fitWidth: fitWidth&lt;br /&gt;&lt;span class="gutter"&gt;  71:&lt;/span&gt;            preserveRatio: true&lt;br /&gt;&lt;span class="gutter"&gt;  72:&lt;/span&gt;            smooth: false&lt;br /&gt;&lt;span class="gutter"&gt;  73:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutter"&gt;  74:&lt;/span&gt;        }&lt;br /&gt;&lt;span class="gutterH"&gt;  75:&lt;/span&gt;    }&lt;br /&gt;&lt;span class="gutter"&gt;  76:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutter"&gt;  77:&lt;/span&gt;    function play(): Void {&lt;br /&gt;&lt;span class="gutter"&gt;  78:&lt;/span&gt;        if (currentSprite &amp;gt;= (max - 1)) {&lt;br /&gt;&lt;span class="gutter"&gt;  79:&lt;/span&gt;            currentSprite = 0;&lt;br /&gt;&lt;span class="gutterH"&gt;  80:&lt;/span&gt;        } else {&lt;br /&gt;&lt;span class="gutter"&gt;  81:&lt;/span&gt;            currentSprite++;&lt;br /&gt;&lt;span class="gutter"&gt;  82:&lt;/span&gt;        }&lt;br /&gt;&lt;span class="gutter"&gt;  83:&lt;/span&gt;    }&lt;br /&gt;&lt;span class="gutter"&gt;  84:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutterH"&gt;  85:&lt;/span&gt;    override public function create(): Node {&lt;br /&gt;&lt;span class="gutter"&gt;  86:&lt;/span&gt;        imageView&lt;br /&gt;&lt;span class="gutter"&gt;  87:&lt;/span&gt;    }&lt;br /&gt;&lt;span class="gutter"&gt;  88:&lt;/span&gt;&lt;br /&gt;&lt;span class="gutter"&gt;  89:&lt;/span&gt;}&lt;br /&gt;&lt;span class="gutterH"&gt;  90:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/403830458419686723-1682027400247255275?l=sergiosvieira.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sergiosvieira.blogspot.com/feeds/1682027400247255275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://sergiosvieira.blogspot.com/2009/01/javafx-animated-sprite-example.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/403830458419686723/posts/default/1682027400247255275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/403830458419686723/posts/default/1682027400247255275'/><link rel='alternate' type='text/html' href='http://sergiosvieira.blogspot.com/2009/01/javafx-animated-sprite-example.html' title='JavaFX Animated Sprite Example'/><author><name>Antônio Sérgio de Sousa Vieira</name><uri>http://www.blogger.com/profile/14016249331223233496</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_7tntANiB5uA/SUrOQRpPtLI/AAAAAAAAAAk/0_l8X1sAkZE/s1600-R/sergiovieira.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_7tntANiB5uA/SV5-QAouKGI/AAAAAAAAABA/K661aasQZKY/s72-c/agente.png' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
