<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Silveira Neto &#187; ogv</title>
	<atom:link href="http://silveiraneto.net/tag/ogv/feed/" rel="self" type="application/rss+xml" />
	<link>http://silveiraneto.net</link>
	<description></description>
	<lastBuildDate>Fri, 09 Mar 2012 04:13:27 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>JavaFX, how to create a rpg like game</title>
		<link>http://silveiraneto.net/2008/12/08/javafx-how-to-create-a-rpg-like-game/</link>
		<comments>http://silveiraneto.net/2008/12/08/javafx-how-to-create-a-rpg-like-game/#comments</comments>
		<pubDate>Mon, 08 Dec 2008 07:38:04 +0000</pubDate>
		<dc:creator>Silveira</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[applet]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[game development]]></category>
		<category><![CDATA[gamedev]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java Web Start]]></category>
		<category><![CDATA[JavaFX]]></category>
		<category><![CDATA[jfx]]></category>
		<category><![CDATA[ogv]]></category>
		<category><![CDATA[openjfx]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://silveiraneto.net/?p=1861</guid>
		<description><![CDATA[<a href="http://silveiraneto.net/2008/12/08/javafx-how-to-create-a-rpg-like-game/" title="JavaFX, how to create a rpg like game"></a>JavaFX 1.0 is out and there are tons of new cool features, specially for game development.trans I&#8217;ll show in this tutorial how to create a very simple demo that shows how to load imtrages, handle sprites, collisions and keyboard events &#8230;<p class="read-more"><a href="http://silveiraneto.net/2008/12/08/javafx-how-to-create-a-rpg-like-game/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://silveiraneto.net/2008/12/08/javafx-how-to-create-a-rpg-like-game/" title="JavaFX, how to create a rpg like game"></a><p><a href="http://javafx.com">JavaFX 1.0</a> is out and there are tons of new cool features, specially for game development.trans</p>
<p>I&#8217;ll show in this tutorial how to create a very simple demo that shows how to load imtrages, handle sprites, collisions and keyboard events that you can use to create a game with a old school rpg like vision.</p>
<p>For the background scenario I&#8217;m using the house <a title="My Free Tileset version 2" href="http://silveiraneto.net/2008/08/31/my-free-tileset-version-2/">that I drew</a> and we&#8217;ll call as <strong>house.png</strong>.</p>
<p style="text-align: center;"><a title="Pixelart home" href="http://silveiraneto.net/wp-content/uploads/2008/08/silveira_neto_gpl_pixelart_kitchen_home1.png"><img class="size-full wp-image-1190 aligncenter" title="House pixelart free GPL" src="../wp-content/uploads/2008/08/silveira_neto_gpl_pixelart_kitchen_home1.png" alt="" width="416" height="384" /></a></p>
<p>That we load as a <a title="JavaFX API" href="http://java.sun.com/javafx/1/docs/api/javafx.scene.image/javafx.scene.image.Image.html">Image</a> and place into a <a title="JavaFX API" href="http://java.sun.com/javafx/1/docs/api/javafx.scene.image/javafx.scene.image.ImageView.html">ImageView</a>.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">ImageView<span style="color: #009900;">&#123;</span>
   image<span style="color: #339933;">:</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}house.png&quot;</span><span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>For the character I&#8217;m using the last character I drew, <a title="The Nerdy Guy" href="http://silveiraneto.net/2008/12/07/nerdy-guy-my-free-charset-version-2/">the nerdy guy</a>.</p>
<p style="text-align: center;"><img class="size-full wp-image-1863 aligncenter" title="nerdyguy creative commons att share alike" src="../wp-content/uploads/2008/12/nerdyguy_from_silveiranetonet_creativecommons_att_share_alike.png" alt="" width="101" height="183" /></p>
<p>To make the animation easier, I spited it into 9 pieces:</p>
<p><strong>down0.png</strong>, <strong>down1.png</strong> and <strong>down2.png</strong></p>
<p><a href="http://silveiraneto.net/wp-content/uploads/2008/12/down0.png"><img class="alignnone size-full wp-image-1867" title="down0" src="http://silveiraneto.net/wp-content/uploads/2008/12/down0.png" alt="" width="30" height="39" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2008/12/down1.png"><img class="alignnone size-full wp-image-1868" title="down1" src="http://silveiraneto.net/wp-content/uploads/2008/12/down1.png" alt="" width="30" height="39" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2008/12/down2.png"><img class="alignnone size-full wp-image-1869" title="down2" src="http://silveiraneto.net/wp-content/uploads/2008/12/down2.png" alt="" width="30" height="39" /></a></p>
<p><strong>left0.png</strong>, <strong>left1.png</strong> and <strong>left2.png</strong></p>
<p><a href="http://silveiraneto.net/wp-content/uploads/2008/12/left0.png"><img class="alignnone size-full wp-image-1874" title="left0" src="http://silveiraneto.net/wp-content/uploads/2008/12/left0.png" alt="" width="30" height="39" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2008/12/left1.png"><img class="alignnone size-full wp-image-1875" title="left1" src="http://silveiraneto.net/wp-content/uploads/2008/12/left1.png" alt="" width="30" height="39" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2008/12/left2.png"><img class="alignnone size-full wp-image-1876" title="left2" src="http://silveiraneto.net/wp-content/uploads/2008/12/left2.png" alt="" width="30" height="39" /></a></p>
<p><strong>right0.png</strong>, <strong>right1.png</strong> and <strong>righ2.png</strong></p>
<p><a href="http://silveiraneto.net/wp-content/uploads/2008/12/right0.png"><img class="alignnone size-full wp-image-1872" title="right0" src="http://silveiraneto.net/wp-content/uploads/2008/12/right0.png" alt="" width="30" height="40" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2008/12/right1.png"><img class="alignnone size-full wp-image-1873" title="right1" src="http://silveiraneto.net/wp-content/uploads/2008/12/right1.png" alt="" width="30" height="40" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2008/12/right2.png"><img class="alignnone size-medium wp-image-1872" title="right2" src="http://silveiraneto.net/wp-content/uploads/2008/12/right2.png" alt="" width="30" height="40" /></a></p>
<p><strong>up0.png</strong>,<strong> up1.png </strong>and <strong>up2.png</strong></p>
<p><a href="http://silveiraneto.net/wp-content/uploads/2008/12/up0.png"><img class="alignnone size-full wp-image-1877" title="up0" src="http://silveiraneto.net/wp-content/uploads/2008/12/up0.png" alt="" width="30" height="40" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2008/12/up1.png"><img class="alignnone size-full wp-image-1878" title="up1" src="http://silveiraneto.net/wp-content/uploads/2008/12/up1.png" alt="" width="30" height="40" /></a> <a href="http://silveiraneto.net/wp-content/uploads/2008/12/up2.png"><img class="alignnone size-full wp-image-1879" title="up2" src="http://silveiraneto.net/wp-content/uploads/2008/12/up2.png" alt="" width="30" height="40" /></a></p>
<blockquote><p><img class="alignnone size-full wp-image-1881" title="warning" src="http://silveiraneto.net/wp-content/uploads/2008/12/dialog-warning.png" alt="" width="16" height="16" /> All images I&#8217;m using should be in the same directory of source code.</p></blockquote>
<p>Let&#8217;s start loading the scenario and a single character sprite.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.stage.Stage</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.Scene</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.image.*</span><span style="color: #339933;">;</span>
&nbsp;
Stage <span style="color: #009900;">&#123;</span>
   title<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;RPG-like demo&quot;</span>, width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">424</span>, height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">412</span>
   visible<span style="color: #339933;">:</span> <span style="color: #000066; font-weight: bold;">true</span>
   scene<span style="color: #339933;">:</span> Scene<span style="color: #009900;">&#123;</span>
      content<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
         ImageView<span style="color: #009900;">&#123;</span>
         image<span style="color: #339933;">:</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}house.png&quot;</span><span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span>,
         ImageView<span style="color: #009900;">&#123;</span>
            x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">320</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">80</span>
            image<span style="color: #339933;">:</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}down1.png&quot;</span><span style="color: #009900;">&#125;</span>
         <span style="color: #009900;">&#125;</span>
      <span style="color: #009900;">&#93;</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Saved as Game.fx you can compile and run with in your terminal:</p>
<blockquote><p>$ javafxc Game.fx</p>
<p>$ javafx Game</p></blockquote>
<p style="text-align: center;"><a href="http://silveiraneto.net/wp-content/uploads/2008/12/screenshot1.png"><img class="size-full wp-image-1883 aligncenter" title="javafx rpg like game demo" src="http://silveiraneto.net/wp-content/uploads/2008/12/screenshot1.png" alt="" width="451" height="433" /></a></p>
<blockquote><p><img class="alignnone size-full wp-image-1881" title="warning" src="http://silveiraneto.net/wp-content/uploads/2008/12/dialog-warning.png" alt="" width="16" height="16" /> <strong>Hint:</strong> You can use <a title="JavaFX Downloads" href="http://javafx.com/downloads">NetBeans 6.5 JavaFX plugin</a> to easier the JavaFX development.</p></blockquote>
<p>To put animation on the character we load all sprites into four lists. Each list for each direction.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// sprites</span>
def up    <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i in <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span>..<span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}up{i}.png&quot;</span>    <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span>
def right <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i in <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span>..<span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}right{i}.png&quot;</span> <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span>
def down  <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i in <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span>..<span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}down{i}.png&quot;</span>  <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span>
def left  <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i in <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span>..<span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}left{i}.png&quot;</span>  <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span></pre></div></div>

<p>And create vars to store the character position and frame of animation.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">var frame <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
var posx <span style="color: #339933;">=</span> <span style="color: #cc66cc;">320</span><span style="color: #339933;">;</span>
var posy <span style="color: #339933;">=</span> <span style="color: #cc66cc;">80</span><span style="color: #339933;">;</span></pre></div></div>

<p>Also store the house background.</p>
<pre>// house background
def house = ImageView{ image: Image {url: "{__DIR__}house.png"} };</pre>
<p>I create booleans to store some key states and at each interval of time I see how they are and do something about. You can handle keyboard event with less code but I like this way because keep visual and game logics a little bit more separated.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// keyboard</span>
var    upkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
var rightkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
var  downkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
var  leftkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// player</span>
var player <span style="color: #339933;">=</span> ImageView<span style="color: #009900;">&#123;</span>
   x<span style="color: #339933;">:</span> bind posx y<span style="color: #339933;">:</span> bind posy
   image<span style="color: #339933;">:</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}down1.png&quot;</span><span style="color: #009900;">&#125;</span>
   onKeyPressed<span style="color: #339933;">:</span> function<span style="color: #009900;">&#40;</span>e<span style="color: #339933;">:</span><span style="color: #003399;">KeyEvent</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_DOWN</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      downkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_UP</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         upkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_LEFT</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         leftkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_RIGHT</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         rightkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// onKeyPressed</span>
&nbsp;
   onKeyReleased<span style="color: #339933;">:</span> function<span style="color: #009900;">&#40;</span>e<span style="color: #339933;">:</span> <span style="color: #003399;">KeyEvent</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_DOWN</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         downkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_UP</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         upkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_LEFT</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         leftkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_RIGHT</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         rightkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// onKeyReleased</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>See a video of the game working so far:</p>
<p style="text-align: center;"><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/Xv5z-9LGuOc&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/Xv5z-9LGuOc&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></object></p>
<p>Now we will add collisions. In a <a href="http://silveiraneto.net/2008/10/30/javafx-rectangular-collision-detection/">previous post</a> I showed some math behind bounding box game collisions. The good news are that you no longer need to worry about that. There are a lot of API improvements in JavaFX 1.0 that do all the hard work for you, specially the new classes on javafx.geometry package, <a href="http://java.sun.com/javafx/1/docs/api/javafx.geometry/javafx.geometry.Rectangle2D.html">Rectangle2D</a> and <a href="http://java.sun.com/javafx/1/docs/api/javafx.geometry/javafx.geometry.Point2D.html">Point2D</a>.</p>
<p>We create rectangles that represent the obstacles in the house.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// collidable obstacles</span>
def obstacles <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> y<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> width<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">382</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> y<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">414</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">384</span> y<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> width<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">382</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">128</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> width<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">224</span> y<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> width<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">288</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">288</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">128</span> width<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">96</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">352</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">128</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">352</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">224</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">320</span> width<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">96</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">128</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">64</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">128</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">64</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">250</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">250</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">64</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">200</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">255</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">20</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">20</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">200</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">170</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">20</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">20</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">257</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">288</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">320</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">64</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">64</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">352</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">295</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">60</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">327</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">64</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">23</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></div></div>

<p style="text-align: center;"><img class="size-full wp-image-1887 aligncenter" title="bounding boxes" src="http://silveiraneto.net/wp-content/uploads/2008/12/boundingboxes.png" alt="" width="416" height="384" /></p>
<p>We just have to change a little bit the game logics in order to handle collisions.</p>
<p style="text-align: center;"><img class="size-full wp-image-1889 aligncenter" title="boudingbox" src="http://silveiraneto.net/wp-content/uploads/2008/12/boudingbox.png" alt="" width="200" height="260" /></p>
<p>We define a bounding box around the player, it&#8217;s a rectangle from (4, 25) at the player coordinates system and with width 19 and height 10. The idea is to prospect where the player will be in the next step, see if it&#8217;s bouding box don&#8217;t collide with any obstacle and so pass it to the real game position.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// game logics</span>
var gamelogics <span style="color: #339933;">=</span> Timeline <span style="color: #009900;">&#123;</span>
   repeatCount<span style="color: #339933;">:</span> Timeline.<span style="color: #006633;">INDEFINITE</span>
   keyFrames<span style="color: #339933;">:</span> KeyFrame <span style="color: #009900;">&#123;</span>
      time <span style="color: #339933;">:</span> 1s<span style="color: #339933;">/</span><span style="color: #cc66cc;">8</span>
      action<span style="color: #339933;">:</span> function<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         var nextposx <span style="color: #339933;">=</span> posx<span style="color: #339933;">;</span>
         var nextposy <span style="color: #339933;">=</span> posy<span style="color: #339933;">;</span>
         <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>downkey<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            nextposy <span style="color: #339933;">+=</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
            player.<span style="color: #006633;">image</span> <span style="color: #339933;">=</span> down<span style="color: #009900;">&#91;</span><span style="color: #339933;">++</span>frame mod <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
         <span style="color: #009900;">&#125;</span>
         <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>upkey<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            nextposy <span style="color: #339933;">-=</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
            player.<span style="color: #006633;">image</span> <span style="color: #339933;">=</span> up<span style="color: #009900;">&#91;</span><span style="color: #339933;">++</span>frame mod <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
         <span style="color: #009900;">&#125;</span>
         <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>rightkey<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            nextposx <span style="color: #339933;">+=</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
            player.<span style="color: #006633;">image</span> <span style="color: #339933;">=</span> right<span style="color: #009900;">&#91;</span><span style="color: #339933;">++</span>frame mod <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
         <span style="color: #009900;">&#125;</span>
         <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>leftkey<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            nextposx <span style="color: #339933;">-=</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
            player.<span style="color: #006633;">image</span> <span style="color: #339933;">=</span> left<span style="color: #009900;">&#91;</span><span style="color: #339933;">++</span>frame mod <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
         <span style="color: #009900;">&#125;</span>
         <span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>obst in obstacles<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>obst.<span style="color: #006633;">boundsInLocal</span>.<span style="color: #006633;">intersects</span><span style="color: #009900;">&#40;</span>nextposx <span style="color: #339933;">+</span> <span style="color: #cc66cc;">4</span>, nextposy <span style="color: #339933;">+</span> <span style="color: #cc66cc;">25</span>, <span style="color: #cc66cc;">19</span>, <span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
               <span style="color: #000000; font-weight: bold;">return</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
         <span style="color: #009900;">&#125;</span>
         posx <span style="color: #339933;">=</span> nextposx<span style="color: #339933;">;</span>
         posy <span style="color: #339933;">=</span> nextposy<span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>This is enough to do the trick but I also added a way to smoothly show the obstacles when pressing the space key.</p>
<p style="text-align: center;"><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/k-MHh6irvwE&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/k-MHh6irvwE&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></object></p>
<p>Here is the complete source code.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">Game</span><span style="color: #339933;">;</span> 
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.stage.Stage</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.image.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.input.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.paint.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.scene.shape.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javafx.animation.*</span><span style="color: #339933;">;</span>
&nbsp;
var frame <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
var posx <span style="color: #339933;">=</span> <span style="color: #cc66cc;">320</span><span style="color: #339933;">;</span>
var posy <span style="color: #339933;">=</span> <span style="color: #cc66cc;">80</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// sprites</span>
def up    <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i in <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span>..<span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}up{i}.png&quot;</span>    <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span>
def right <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i in <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span>..<span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}right{i}.png&quot;</span> <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span>
def down  <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i in <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span>..<span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}down{i}.png&quot;</span>  <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span>
def left  <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i in <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span>..<span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}left{i}.png&quot;</span>  <span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// house background</span>
def house <span style="color: #339933;">=</span> ImageView<span style="color: #009900;">&#123;</span> image<span style="color: #339933;">:</span> <span style="color: #003399;">Image</span> <span style="color: #009900;">&#123;</span>url<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;{__DIR__}house.png&quot;</span><span style="color: #009900;">&#125;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// keyboard</span>
var    upkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
var rightkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
var  downkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
var  leftkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// player</span>
var player <span style="color: #339933;">=</span> ImageView<span style="color: #009900;">&#123;</span>
   x<span style="color: #339933;">:</span> bind posx y<span style="color: #339933;">:</span> bind posy image<span style="color: #339933;">:</span> down<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span>
   onKeyPressed<span style="color: #339933;">:</span> function<span style="color: #009900;">&#40;</span>e<span style="color: #339933;">:</span><span style="color: #003399;">KeyEvent</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_DOWN</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         downkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_UP</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         upkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_LEFT</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         leftkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_RIGHT</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         rightkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_SPACE</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
         <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>fade<span style="color: #339933;">==</span><span style="color: #cc66cc;">0.0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
         	fadein.<span style="color: #006633;">playFromStart</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>fade<span style="color: #339933;">==</span><span style="color: #cc66cc;">1.0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				fadeout.<span style="color: #006633;">playFromStart</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// onKeyPressed</span>
&nbsp;
   onKeyReleased<span style="color: #339933;">:</span> function<span style="color: #009900;">&#40;</span>e<span style="color: #339933;">:</span> <span style="color: #003399;">KeyEvent</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_DOWN</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         downkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_UP</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         upkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_LEFT</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         leftkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span><span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">code</span> <span style="color: #339933;">==</span> KeyCode.<span style="color: #006633;">VK_RIGHT</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         rightkey <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// onKeyReleased</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// collidable obstacles</span>
def obstacles <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> y<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> width<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">382</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> y<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">414</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">384</span> y<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> width<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">382</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">128</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> width<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">224</span> y<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> width<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">288</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">288</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">128</span> width<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">96</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>   <span style="color: #cc66cc;">0</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">352</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">128</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">352</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">224</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">320</span> width<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">RED</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">96</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">128</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">64</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">128</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">64</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">250</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">64</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">250</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">64</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">200</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">255</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">20</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">20</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">200</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">170</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">20</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">20</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">257</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">288</span> y<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">320</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">192</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">64</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">64</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span> <span style="color: #cc66cc;">352</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">295</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">32</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">60</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
	<span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span>  <span style="color: #cc66cc;">32</span> y<span style="color: #339933;">:</span> <span style="color: #cc66cc;">327</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">64</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">23</span> stroke<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">YELLOW</span> <span style="color: #009900;">&#125;</span>,
<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// game logics</span>
var gamelogics <span style="color: #339933;">=</span> Timeline <span style="color: #009900;">&#123;</span>
   repeatCount<span style="color: #339933;">:</span> Timeline.<span style="color: #006633;">INDEFINITE</span>
   keyFrames<span style="color: #339933;">:</span> KeyFrame <span style="color: #009900;">&#123;</span>
      time <span style="color: #339933;">:</span> 1s<span style="color: #339933;">/</span><span style="color: #cc66cc;">8</span>
      action<span style="color: #339933;">:</span> function<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
         var nextposx <span style="color: #339933;">=</span> posx<span style="color: #339933;">;</span>
         var nextposy <span style="color: #339933;">=</span> posy<span style="color: #339933;">;</span>
         <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>downkey<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            nextposy <span style="color: #339933;">+=</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
            player.<span style="color: #006633;">image</span> <span style="color: #339933;">=</span> down<span style="color: #009900;">&#91;</span><span style="color: #339933;">++</span>frame mod <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
         <span style="color: #009900;">&#125;</span>
         <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>upkey<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            nextposy <span style="color: #339933;">-=</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
            player.<span style="color: #006633;">image</span> <span style="color: #339933;">=</span> up<span style="color: #009900;">&#91;</span><span style="color: #339933;">++</span>frame mod <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
         <span style="color: #009900;">&#125;</span>
         <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>rightkey<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            nextposx <span style="color: #339933;">+=</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
            player.<span style="color: #006633;">image</span> <span style="color: #339933;">=</span> right<span style="color: #009900;">&#91;</span><span style="color: #339933;">++</span>frame mod <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
         <span style="color: #009900;">&#125;</span>
         <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>leftkey<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            nextposx <span style="color: #339933;">-=</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span>
            player.<span style="color: #006633;">image</span> <span style="color: #339933;">=</span> left<span style="color: #009900;">&#91;</span><span style="color: #339933;">++</span>frame mod <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
         <span style="color: #009900;">&#125;</span>
         <span style="color: #000000; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>obst in obstacles<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>obst.<span style="color: #006633;">boundsInLocal</span>.<span style="color: #006633;">intersects</span><span style="color: #009900;">&#40;</span>nextposx <span style="color: #339933;">+</span> <span style="color: #cc66cc;">4</span>, nextposy <span style="color: #339933;">+</span> <span style="color: #cc66cc;">25</span>, <span style="color: #cc66cc;">19</span>, <span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
               <span style="color: #000000; font-weight: bold;">return</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
         <span style="color: #009900;">&#125;</span>
         posx <span style="color: #339933;">=</span> nextposx<span style="color: #339933;">;</span>
         posy <span style="color: #339933;">=</span> nextposy<span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
gamelogics.<span style="color: #006633;">play</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// obstacles view</span>
var fade <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0.0</span><span style="color: #339933;">;</span>
&nbsp;
var obstacleslayer <span style="color: #339933;">=</span> <span style="color: #003399;">Group</span> <span style="color: #009900;">&#123;</span>
   opacity<span style="color: #339933;">:</span> bind fade
   content<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
      <span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span> x<span style="color: #339933;">:</span><span style="color: #cc66cc;">0</span> y<span style="color: #339933;">:</span><span style="color: #cc66cc;">0</span> width<span style="color: #339933;">:</span><span style="color: #cc66cc;">500</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">500</span> fill<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">BLACK</span> <span style="color: #009900;">&#125;</span>,
      obstacles,
      <span style="color: #003399;">Rectangle</span> <span style="color: #009900;">&#123;</span>
        x<span style="color: #339933;">:</span> bind posx <span style="color: #339933;">+</span> <span style="color: #cc66cc;">4</span> y<span style="color: #339933;">:</span> bind posy <span style="color: #339933;">+</span> <span style="color: #cc66cc;">25</span> width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">19</span> height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">10</span>
        fill<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">LIME</span>
      <span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#93;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
var fadein <span style="color: #339933;">=</span> Timeline <span style="color: #009900;">&#123;</span>
	keyFrames<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
   	at <span style="color: #009900;">&#40;</span>0s<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>fade <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #cc66cc;">0.0</span><span style="color: #009900;">&#125;</span>
   	at <span style="color: #009900;">&#40;</span>1s<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>fade <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #cc66cc;">1.0</span><span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#93;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
var fadeout <span style="color: #339933;">=</span> Timeline <span style="color: #009900;">&#123;</span>
	keyFrames<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
   	at <span style="color: #009900;">&#40;</span>0s<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>fade <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #cc66cc;">1.0</span><span style="color: #009900;">&#125;</span>
   	at <span style="color: #009900;">&#40;</span>1s<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>fade <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> <span style="color: #cc66cc;">0.0</span><span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#93;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// game stage</span>
Stage <span style="color: #009900;">&#123;</span>
	title<span style="color: #339933;">:</span> <span style="color: #0000ff;">&quot;RPG-like demo&quot;</span>, width<span style="color: #339933;">:</span> <span style="color: #cc66cc;">424</span>, height<span style="color: #339933;">:</span> <span style="color: #cc66cc;">412</span>
	visible<span style="color: #339933;">:</span> <span style="color: #000066; font-weight: bold;">true</span>
	scene<span style="color: #339933;">:</span> Scene<span style="color: #009900;">&#123;</span>
      fill<span style="color: #339933;">:</span> <span style="color: #003399;">Color</span>.<span style="color: #006633;">BLACK</span>
		content<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>house, player, obstacleslayer<span style="color: #009900;">&#93;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><strong>Play Through Java Web Start<br />
</strong></p>
<p style="text-align: center;"><a title="Click to launch" href="http://silveiraneto.net/downloads/nerdy/dist/Nerdy.jnlp"><img class="size-full wp-image-1474 aligncenter" title="webstart" src="../wp-content/uploads/2008/10/webstart.png" alt="" width="88" height="23" /></a></p>
<p>or <a title="Applet Game" href="http://silveiraneto.net/downloads/nerdy/dist/Nerdy.html">click here to play via applet</a>, inside your browser.</p>
<p><small><strong>update: </strong>The applet version and Java Web Start versions should be working now.  The applet version on Linux seems to be having problems with the keyboard handling, use the Java Web Start version while I&#8217;m trying to fix it.</small></p>
<p><strong>Downloads:</strong></p>
<ul>
<li>Source, images and jars, <a title="Zipball with sources and images" href="http://silveiraneto.net/downloads/nerdy.zip">nerdy.zip</a></li>
<li><a title="Nerdy Game" href="http://silveiraneto.net/downloads/nerdy/">All content</a></li>
<li>First video, <a title="OGG Video" href="http://silveiraneto.net/downloads/javafx_nerdy_without_collision.ogv">javafx_nerdy_without_collision.ogv</a></li>
<li>Second video, <a title="OGG Video" href="http://silveiraneto.net/downloads/javafx_nerdy.ogv">javafx_nerdy.ogv</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://silveiraneto.net/2008/12/08/javafx-how-to-create-a-rpg-like-game/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
	</channel>
</rss>

