<?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:blogger='http://schemas.google.com/blogger/2008' 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-6299303114456153505</id><updated>2024-10-18T02:07:52.092-05:00</updated><category term="box2d"/><category term="libgdx"/><title type='text'>Tim&#39;s Adventures in Android Land</title><subtitle type='html'>A blog detailing my experiences with Android as an independent (indie) game &amp;amp; app developer.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://adventuresinandroidland.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://adventuresinandroidland.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>T. Scott</name><uri>http://www.blogger.com/profile/03609994920427459747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/-tsR_q26Bj3k/TalC2i02PpI/AAAAAAAAAE8/FWN4-y50miU/s220/xenu_avatar.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>77</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6299303114456153505.post-4161129796626409710</id><published>2013-04-01T00:03:00.001-05:00</published><updated>2013-04-01T00:03:48.076-05:00</updated><title type='text'>Stupid Reflection Tricks</title><content type='html'>The game that I&#39;m currently working on (based on parts of &lt;a href=&quot;http://box2d.org/&quot;&gt;Box2D&lt;/a&gt;, &lt;a href=&quot;http://gamadu.com/artemis/&quot;&gt;Artemis&lt;/a&gt;, &lt;a href=&quot;http://libgdx.badlogicgames.com/&quot;&gt;libGDX &lt;/a&gt;and a dash of &lt;a href=&quot;https://www.iforce2d.net/rube/&quot;&gt;RUBE &lt;/a&gt;for level design) employs reflection. &amp;nbsp;I&#39;ve got custom properties defined for various bodies, fixtures, and joints in RUBE. &amp;nbsp;Some of these custom properties are strings that are interpreted as classes for instantiation at run-time via Java reflection. &amp;nbsp;For example, I have eggs in the game that have a custom property &quot;PreSolverScript&quot;. &amp;nbsp;This field is defined with EggImpact. &amp;nbsp;EggImpact is a Java class that defines what happens when the related fixture is detected for the Box2D presolver. &amp;nbsp;This class checks the velocity of the egg object just before impact. &amp;nbsp;If the velocity is great enough, the egg receives damage and potentially breaks.&lt;br /&gt;
&lt;br /&gt;
The script references are resolved at run-time through the use of Java reflection. &amp;nbsp;Doing reflection with simple Java constructors is fairly simple. &amp;nbsp;It gets somewhat tricky when you have to worry about parameters. &amp;nbsp;Here&#39;s an example of my code that does reflection with parameterized script strings. &amp;nbsp;If parameters for a script exist, they appear as comma-separated values following the script name.&lt;br /&gt;
&lt;br /&gt;
In the example below, preSolverProperty is a string containing the custom property for the string.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String [] parms = preSolverProperty.split(&quot;,&quot;);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IPreSolverScript preSolverScript;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (parms.length &amp;gt; 1)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;preSolverScript = (IPreSolverScript)Class.forName(ScriptConstants.SCRIPT_PACKAGE_NAME + parms[0]).getConstructor(String[].class).newInstance((Object)parms);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;preSolverScript = (IPreSolverScript)Class.forName(ScriptConstants.SCRIPT_PACKAGE_NAME + preSolverProperty).newInstance();&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Courier New, Courier, monospace; font-size: x-small;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The sticking part for me was casting parms to (Object). &amp;nbsp;Without this I got a invalid number of parameters error at run-time.&lt;br /&gt;
</content><link rel='replies' type='application/atom+xml' href='http://adventuresinandroidland.blogspot.com/feeds/4161129796626409710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://adventuresinandroidland.blogspot.com/2013/04/stupid-reflection-tricks.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/4161129796626409710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/4161129796626409710'/><link rel='alternate' type='text/html' href='http://adventuresinandroidland.blogspot.com/2013/04/stupid-reflection-tricks.html' title='Stupid Reflection Tricks'/><author><name>T. Scott</name><uri>http://www.blogger.com/profile/03609994920427459747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/-tsR_q26Bj3k/TalC2i02PpI/AAAAAAAAAE8/FWN4-y50miU/s220/xenu_avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6299303114456153505.post-5085693023680126473</id><published>2012-12-02T13:13:00.001-06:00</published><updated>2012-12-02T13:13:34.503-06:00</updated><title type='text'>libgdx and iOS deployment quest - Part IV</title><content type='html'>I discovered that my installation of TortoiseHg was not 100% complete. &amp;nbsp;I had not installed kdiff3 or added any of the necessary configurations to get that tool to work. &amp;nbsp;The net result was that I was not able to do any sort of merges or &quot;diff to local&quot; type operations. &amp;nbsp;After a bit of hunting, there are additional configurations that you need to implement after installing kdiff3. &lt;br /&gt;
&lt;br /&gt;
To wit:&lt;br /&gt;
&lt;br /&gt;
1) Install kdiff3 from kdiff3.sourceforge.net.&lt;br /&gt;
2) Update your .hgrc similar to below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;
[extensions]&lt;br /&gt;hgext.bookmarks =&lt;br /&gt;hggit =&lt;br /&gt;mq =&lt;br /&gt;hgext.extdiff =&lt;br /&gt;[extdiff]&lt;br /&gt;cmd.kdiff3 =&lt;br /&gt;[merge-tools]&lt;br /&gt;kdiff3.args = $base $local $other -o $output&lt;br /&gt;kdiff3.priority=-3&lt;br /&gt;kdiff3.args=--auto --L1 base --L2 parent1 --L3 parent2 $base $local $other -o $output&lt;br /&gt;;kdiff3.fixeol=True&lt;br /&gt;kdiff3.gui=True&lt;br /&gt;kdiff3.diffargs=--L1 &#39;$plabel1&#39; --L2 &#39;$clabel&#39; $parent $child&lt;br /&gt;kdiff3.diff3args=--L1 &#39;$plabel1&#39; --L2 &#39;$clabel&#39; --L3 &#39;$plabel2&#39; $parent1 $child $parent2&lt;br /&gt;;kdiff3.diff3args=--L1 &#39;$alabel&#39; --L2 &#39;$plabel1&#39; --L3 &#39;$plabel2&#39; $ancestor $parent1 $parent2 -o $child&lt;br /&gt;kdiff3.dirdiff=True&lt;/blockquote&gt;
</content><link rel='replies' type='application/atom+xml' href='http://adventuresinandroidland.blogspot.com/feeds/5085693023680126473/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://adventuresinandroidland.blogspot.com/2012/12/libgdx-and-ios-deployment-quest-part-iv.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/5085693023680126473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/5085693023680126473'/><link rel='alternate' type='text/html' href='http://adventuresinandroidland.blogspot.com/2012/12/libgdx-and-ios-deployment-quest-part-iv.html' title='libgdx and iOS deployment quest - Part IV'/><author><name>T. Scott</name><uri>http://www.blogger.com/profile/03609994920427459747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/-tsR_q26Bj3k/TalC2i02PpI/AAAAAAAAAE8/FWN4-y50miU/s220/xenu_avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6299303114456153505.post-3590204785629238467</id><published>2012-11-25T19:37:00.000-06:00</published><updated>2012-11-25T19:52:18.497-06:00</updated><title type='text'>libgdx and iOS deployment quest - Part III</title><content type='html'>I discovered that my version of libgdx is a bit outdated and I needed to sync things up with the latest and greatest that includes ikvm support. &amp;nbsp;Since I&#39;m trying to do everything on the MacBook Pro, that means I need hg-git support. &amp;nbsp;This allows you to deal with a git repo (which is how libgdx is version controlled) from the Mercurial tool.&lt;br /&gt;
&lt;br /&gt;
On Windows, this is fairly easy. &amp;nbsp;Instructions are&amp;nbsp;&lt;a href=&quot;http://tortoisehg.bitbucket.org/manual/2.0/nonhg.html&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
On a Mac, it&#39;s also pretty easy. &amp;nbsp;If you followed the instructions for installing TortoiseHg from my earlier blogpost, you can simply open up a terminal and run this: &quot;sudo easy_install hg-git&quot;. &amp;nbsp;From there you need to edit the .hgrc file:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
[extensions]&lt;br /&gt;
hgext.bookmarks =&lt;br /&gt;
hggit =&lt;/blockquote&gt;
&lt;br /&gt;
Verify things work by entering &quot;hg help hggit.&lt;br /&gt;
&lt;br /&gt;
Hat tip to&amp;nbsp;&lt;a href=&quot;http://www.hskupin.info/2009/12/18/synchronizing-a-mercurial-repository-with-git/&quot;&gt;this site.&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
In other news, I was able to get both &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.gushikustudios.zombieslots&quot;&gt;Outbreak: Zombie Slots&lt;/a&gt; and &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.gushikustudios.toyslots&quot;&gt;Toyland Slots&lt;/a&gt; running on the MacBook Pro. &amp;nbsp;It was scary easy. &amp;nbsp;libgdx is awesome!!!&lt;br /&gt;
&lt;br /&gt;
Obligatory screenshot below:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://1.bp.blogspot.com/-XLWaXmr0H7U/ULLKbRthd8I/AAAAAAAAAJw/xlk7hIBNOfQ/s1600/Screen+Shot+2012-11-25+at+7.46.45+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;http://1.bp.blogspot.com/-XLWaXmr0H7U/ULLKbRthd8I/AAAAAAAAAJw/xlk7hIBNOfQ/s320/Screen+Shot+2012-11-25+at+7.46.45+PM.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://adventuresinandroidland.blogspot.com/feeds/3590204785629238467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://adventuresinandroidland.blogspot.com/2012/11/libgdx-and-ios-deployment-quest-part-iii.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/3590204785629238467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/3590204785629238467'/><link rel='alternate' type='text/html' href='http://adventuresinandroidland.blogspot.com/2012/11/libgdx-and-ios-deployment-quest-part-iii.html' title='libgdx and iOS deployment quest - Part III'/><author><name>T. Scott</name><uri>http://www.blogger.com/profile/03609994920427459747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/-tsR_q26Bj3k/TalC2i02PpI/AAAAAAAAAE8/FWN4-y50miU/s220/xenu_avatar.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-XLWaXmr0H7U/ULLKbRthd8I/AAAAAAAAAJw/xlk7hIBNOfQ/s72-c/Screen+Shot+2012-11-25+at+7.46.45+PM.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6299303114456153505.post-4056051600474913318</id><published>2012-11-25T13:18:00.003-06:00</published><updated>2012-11-25T13:18:54.411-06:00</updated><title type='text'>libgdx and iOS deployment quest - Part II</title><content type='html'>
 
 
 


&lt;br /&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
I got SourceTree
installed and cloning my repos, but didn&#39;t care for how it operated since I&#39;m used to the
TortoiseHg work flow. &amp;nbsp;Additionally, I noticed that it didn&#39;t set up &#39;hg&#39; to be run from the command line by default. &amp;nbsp;I could do a &quot;hg clone&quot; from the terminal which is sometimes useful versus using a GUI to do all the heavy lifting.&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
I did some more searching and came across this page: &lt;a href=&quot;https://bitbucket.org/tortoisehg/thg/wiki/developers/MacOSX&quot;&gt;https://bitbucket.org/tortoisehg/thg/wiki/developers/MacOSX&lt;/a&gt;. I came across this before as I was looking at my Hg options but didn&#39;t pursue it because the steps look way too involved and I wanted a pre-packaged approach to getting things running. &amp;nbsp;It turns out there are actually several different approaches at getting TortoiseHg running that are listed on this page... they just aren&#39;t presented very well to make you realize that.&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
At any rate, if you scroll down, you&#39;ll see instructions for installing things using HomeBrew. &amp;nbsp;They were very easy and very straightforward. &amp;nbsp;I only had a couple of hiccups where I tried to run the command and the instruction failed because it expected that I was running as root instead of a standard user. &amp;nbsp;Boiling things down, here&#39;s what I did:&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
Install Xcode
 from App Store&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
ruby -e
 &quot;$(curl -fsSkL raw.github.com/mxcl/homebrew/go)&quot;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
brew doctor&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
Open Xcode →
 Preferences → Downloads → Install command line tools&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
Set up
 .bash_profile as specified on the Wiki page (BREW setup, etc.)&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
brew install
 pyqt&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
brew install
 qscintilla2&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
sudo
 easy_install pip&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
sudo pip
 install Pygments iniparse Mercurial&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
hg clone
 &lt;a href=&quot;http://bitbucket.org/tortoisehg/thg&quot;&gt;http://bitbucket.org/tortoisehg/thg&lt;/a&gt;
 ~/Documents/TortoiseHg&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
cd
 ~/Documents/TortoiseHg&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
./thg&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
Success!  Although
it doesn&#39;t appear to have Finder integration, like the Windows
version and its Windows Explorer integration, it does work and
present me with the TortoiseHg Workbench I&#39;m extremely familiar with.&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
Success!&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
Next up, to see if I can get my Outbreak: Zombie Slots running with Eclipse on the Mac platform.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://adventuresinandroidland.blogspot.com/feeds/4056051600474913318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://adventuresinandroidland.blogspot.com/2012/11/libgdx-and-ios-deployment-quest-part-ii.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/4056051600474913318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/4056051600474913318'/><link rel='alternate' type='text/html' href='http://adventuresinandroidland.blogspot.com/2012/11/libgdx-and-ios-deployment-quest-part-ii.html' title='libgdx and iOS deployment quest - Part II'/><author><name>T. Scott</name><uri>http://www.blogger.com/profile/03609994920427459747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/-tsR_q26Bj3k/TalC2i02PpI/AAAAAAAAAE8/FWN4-y50miU/s220/xenu_avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6299303114456153505.post-3587425227727937316</id><published>2012-11-25T13:11:00.000-06:00</published><updated>2012-11-25T13:11:41.014-06:00</updated><title type='text'>libgdx and iOS deployment quest - Part I</title><content type='html'>&lt;br /&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
After seeing the successful deployment
of &lt;a href=&quot;http://www.noblemaster.com/&quot;&gt;Noblemaster&#39;s&lt;/a&gt; libgdx-based games to the iTunes store, I figured it
would be fun to port the libgdx games that I&#39;ve created to iOS and
release them to the iTunes store as well.  So, today I went out to the local Best Buy and picked up a Macbook Pro 15” MD103LL/A. &amp;nbsp;It was on sale for about $120 less than the retail price that was listed. &amp;nbsp;I could have went for the more expensive model that included more system memory, but after doing some reading, saw that adding memory is pretty simple and cost effective so I&#39;ll probably go that route.&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
I brought the machine home and the first order of business was to get it running on my network. &amp;nbsp;Fail.&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
First and foremost – for whatever
reason, the MacBook Pro would knock my Netgear WND3300 Wireless
router out of commission.  The net result (heh!) was that not only could the
Apple machine NOT get on the Internet, but it also fouled up the rest
of my network.  Other machines that were working just fine would no
longer be able to access the Internet.  This is not the first time
I&#39;ve seen this behavior.&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
My brother-in-law has had a MacBook Pro
for a while now.  Every time he has brought his machine over, he has
caused the same issues... after setting up the wireless
configuration, boom – my network goes down.  The only way to
correct this in the past has been to reset the router.&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
This time I was determined to figure
out a workaround if not an out and out fix. Using Google was worthless. &amp;nbsp;None of the tips I saw worked out. &amp;nbsp;After poking around with “ifconfig” and messing around with general settings, I noticed
that I could get things to work once again if I manually defined the
DNS values.  My standard test to verify is simply “ping &lt;a href=&quot;http://www.google.com/&quot;&gt;www.google.com&lt;/a&gt;” from a terminal window.&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
Now, normally, the DHCP server
capabilities of the router kick in and assign the router as the DNS
server for the DHCP client.  This has worked flawlessly with Windows
machine.  For some odd reason, this causes issues using an Apple
machine.  I logged into the WND3300 and took a look at its DNS
capabilities.  It&#39;s cable modem side acts a DHCP client itself, which
gets its configuration from the cable configurations that are assigned by the cable company.  I looked at
the assigned DNS server values.  They looked correct.  Based on a
hunch, I modified the “Domain Name Server (DNS) Address” setting
on the Basic Settings page from “Get Automatically From ISP” to
“Use These DNS Servers” and specified what the cable modem always
gives me.  After doing that, the MacBook Pro no longer has any issues
accessing the Internet and the other machines on the network
similarly work fine.  Whew!  That blew about an hour or so of time.&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
Next on the list was to download Xcode.
 Xcode is the IDE used for developing iOS applications.  I&#39;ve used it
a little bit in the past.  I had to log into the Apple App Store and
download it.  Annoyingly, I also had to update my credit card info on
file with Apple.  As great as everyone claims Apple is, I find this
to grate on my nerves... Especially given that Xcode is available as
a free download.  I guess I should also mention, I already had an
Apple ID that I created back when I had an iPod Touch. &amp;nbsp;So, getting that stuff up and running was annoying but not world-ending.&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
With Xcode downloaded, I needed to
install Eclipse.  Wow.  Installing Eclipse is easy.  The problem
comes in that there are about 10 different flavors of Eclipse. 
Historically, I&#39;ve always gone for Eclipse Classic.  However, this
only provides a bare minimum.  After doing some looking around, I
discovered that there is a version of Eclipse for Mobile Developers. 
Sweet!  It includes Java &lt;b&gt;and&lt;/b&gt;
C development tools.  The libgdx library backend includes certain
things written in C for performance reasons (the Box2D Physics
Engine, for example.)  I&#39;ve had to make my own tweaks to that in the
past so its been cool to have C tools available.  At any rate, I
installed that.&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
Then,
I tried to run Eclipse.  Blah.  You need the Java JDK before it will
work.  On a Windows machine, you get that from Sun.  Not so on an
Apple machine.  At a terminal prompt, I entered “javac -version”
and it prompted me for an install.  I wanted to specify an exact
version of the JDK but I didn&#39;t see an option.  I&#39;ve heard of
problems with JDK 7 and wanted to stick with JDK 6.  I bit the bullet
and just accepted whatever version the default installer selected. 
Turns out that I lucked out and am now running 1.6.0_37.  Woot!&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
Next up I wanted
to get my Mercurial repos running.  On Windows, I use TortoiseHg
which has really nice integration with Windows Explorer.  On the Mac,
there were a few options and I decided to give Atlassian&#39;s SourceTree
a shot.  I&#39;ve got my repos hosted on Bitbucket so it seemed to make
sense since BB is operated by Atlassian. &amp;nbsp;(Note: There has been an update on this -- I&#39;m now using TortoiseHg on my Macbook Pro.)&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
In order to access
my BB repos, I apparently need to get the ssh keys configured.  I
tried to follow &lt;a href=&quot;https://confluence.atlassian.com/pages/viewpage.action?pageId=282173660&quot;&gt;Atlassian&#39;s directions &lt;/a&gt;where they imply that you&#39;ll
be prompted to enter your ssh key info when you try to clone a
project.  This will supposedly add your key to your system&#39;s
keychain.  That&#39;s not the case.  Trying to clone a repo resulted in
an invalid URL problem and I couldn&#39;t get any further than that.&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
So, I copied my
private BB ssh key over to the MacBook.  In order to access my repos,
I need to have my ssh key in the Mac&#39;s key ring.  This is done via
“ssh-add -K /path/to/key/here”.  So I did this, got prompted for
the passphrase and then.. it failed.  Mwah?  I generated the key
using Puttygen and use it on nearly a daily basis, so I&#39;m 100% the
passphrase was being entered in correctly.  Turns out that you need
to use PuttyGen to export the key in an &lt;i&gt;openSSH&lt;/i&gt; format.  After doing
that, I could add the key successfully.&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
Next up was to get
my graphical development environment going.  This meant getting
Inkscape and GIMP up and running.  Since I&#39;m running OS X 10.8
(Mountain Lion), this is not as straightforward as simply installing
the related dmgs.  No.  Trying to run Inkscape gives you a prompt
saying “Where is X11?”  Turns out that you need to first install
Xquartz, which is the Open Source X11 that Apple no longer includes on its machines. 
Yippee.  
&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
After downloading
that and rebooting, and trying to Inksape again, I was still prompted
for “Where is X11”.  Mwah?  You need to go to your Utilities
folder and start Xquartz and THEN start Inkscape.  Geez.  So much for
the “ease” of using Apple products.  On the other hand, the GIMP
version was already setup with Mountain Lion compatibility so I
didn&#39;t need to do much there other than copying the GIMP application
to my Applications folder.  Sweet.&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0in;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://adventuresinandroidland.blogspot.com/feeds/3587425227727937316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://adventuresinandroidland.blogspot.com/2012/11/libgdx-and-ios-deployment.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/3587425227727937316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/3587425227727937316'/><link rel='alternate' type='text/html' href='http://adventuresinandroidland.blogspot.com/2012/11/libgdx-and-ios-deployment.html' title='libgdx and iOS deployment quest - Part I'/><author><name>T. Scott</name><uri>http://www.blogger.com/profile/03609994920427459747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/-tsR_q26Bj3k/TalC2i02PpI/AAAAAAAAAE8/FWN4-y50miU/s220/xenu_avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6299303114456153505.post-2189464805411358380</id><published>2012-09-01T11:21:00.001-05:00</published><updated>2012-09-01T11:35:07.452-05:00</updated><title type='text'>Stupid AdMob tricks</title><content type='html'>I use AdMob exclusively for my applications.&amp;nbsp; There&#39;s no particular reason other than it is a lot easier to set things up than having to futz with three or four different ad company SDKs, and having a single location to track my voluminous income (heh) is just super-convenient.&lt;br /&gt;
&lt;br /&gt;
Today, I set things up so that all my apps will serve house ads for the duration of the (US) holiday weekend.&lt;br /&gt;
&lt;br /&gt;
What&#39;s an AdMob House Ad?&amp;nbsp; An AdMob house ad allows you to serve up *free* ads in your applications.&amp;nbsp; You can do things like specify how many impressions you want to serve, which applications will display which ads, etc. The ads are restricted to applications you define, but otherwise free you from having to pay AdMob for them to appear.&lt;br /&gt;
&lt;br /&gt;
At a high level, I&#39;ve got two ad configurations defined for every app.&amp;nbsp; One version serves the Google Play link and the other version serves the Amazon App Store link.&amp;nbsp; The ad that gets served is based on the device that ad is appearing on.&lt;br /&gt;
&lt;br /&gt;
Specifically, here&#39;s how I set things up:&lt;br /&gt;
&lt;br /&gt;
1) I created a house ad campaign called &quot;all house ads&quot;.&amp;nbsp; At this level in AdMob, you are able to define the start and end times.&amp;nbsp; I&#39;ve got things setup to run from today until midnight Monday (end of the Labor Day holiday).&amp;nbsp; That&#39;s a total of three days of house ad rotation.&lt;br /&gt;
&lt;br /&gt;
2) I created several ad groups under the &quot;all house ads&quot; campaign.&amp;nbsp; At this level in AdMob, you are able to define which apps the ad group will appear in and your impression goal.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
I defined separate ad groups for: &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.gushikustudios.db42lite&quot;&gt;DB42 Lite&lt;/a&gt;, &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.gushikustudios.db42&quot;&gt;DB42 Full Version&lt;/a&gt;, &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.gushikustudios.epyc&quot;&gt;Doodle Bug&lt;/a&gt;, &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.gushikustudios.drawccupations&quot;&gt;Drawccupations&lt;/a&gt;, &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.gushikustudios.matchcard&quot;&gt;MatchCard&lt;/a&gt;, &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.gushikustudios.pyromancerslab&quot;&gt;Pyromancer&#39;s Laboratory&lt;/a&gt;, and &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.gushikustudios.keepaway&quot;&gt;Sky Ninja&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Now, I could have defined a single group and placed all of these ads in that group.&amp;nbsp; I did not go this route because I wanted fine tuned control over which apps my ads appear in.  For example, I don&#39;t want the Sky Ninja ad to appear in the Sky Ninja 
app... The user is already playing Sky Ninja -- therefore I don&#39;t need to 
drive him or her to download that exact same app.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For each ad group in this section, I selected the impression goal of &quot;Fully Allocate&quot;.&amp;nbsp; This means, I want to completely turn my ad mediation over to my house ads.&amp;nbsp; In other words -- don&#39;t serve up any paid ads!&amp;nbsp; I&#39;m trying to drum up support in my apps for my other apps, so that&#39;s why I&#39;m bailing on the paid ads for this duration.&lt;br /&gt;
&lt;br /&gt;
I wasn&#39;t sure if the &quot;Fully Allocate&quot; configuration would limit the ad group to a single group or not.&amp;nbsp; Through experimentation, I see that the ads are rotating through all the ad groups I have defined for the campaign.&amp;nbsp; This is EXACTLY what I want.&lt;br /&gt;
&lt;br /&gt;
It is also at this level that you can define target demographics and devices.&amp;nbsp; I initially set things up to serve all demographics and devices EXCEPT the Amazon Kindle Fire.&amp;nbsp; Ads served to the Kindle Fire are served somewhat differently because I want to reference the Amazon App Store link for those.&amp;nbsp; Keep reading...&lt;br /&gt;
&lt;br /&gt;
3) For each ad in the group, I&#39;ve got the URL defined for the app and the image to display with that URL.&amp;nbsp; I initially created URLs that pointed to the Google Play Market URL.&amp;nbsp; For example, the DB42 Lite URL points to:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
market://details?id=com.gushikustudios.db42lite&lt;/blockquote&gt;
&lt;br /&gt;
4) After I set all of that up for the Google Play links, I copied every single Ad group, and added &quot;Amazon&quot; to the name (e.g. &quot;Sky Ninja Amazon&quot;).&amp;nbsp; Then, I went into each Amazon ad group and edited the URL to point to the Amazon App Store&#39;s URL.&amp;nbsp; For example, the DB42Lite URL changed from what I list above to:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
amzn://apps/android?asin=B006KU55UO&lt;/blockquote&gt;
&lt;br /&gt;
The &#39;asin&#39; value is listed on the Amazon App Store&#39;s page for the app.&lt;br /&gt;
&lt;br /&gt;
When you click on this app from the Kindle Fire, you open up the App Store view of your app instead of a the Amazon Retail Web Site.&amp;nbsp; This makes it easier for the user to install your app on a Kindle Fire for obvious reasons.&lt;br /&gt;
&lt;br /&gt;
I&#39;ll post the results of doing all this in a few days.&amp;nbsp; Hope this helps someone else out there! </content><link rel='replies' type='application/atom+xml' href='http://adventuresinandroidland.blogspot.com/feeds/2189464805411358380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://adventuresinandroidland.blogspot.com/2012/09/stupid-admob-tricks.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/2189464805411358380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/2189464805411358380'/><link rel='alternate' type='text/html' href='http://adventuresinandroidland.blogspot.com/2012/09/stupid-admob-tricks.html' title='Stupid AdMob tricks'/><author><name>T. Scott</name><uri>http://www.blogger.com/profile/03609994920427459747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/-tsR_q26Bj3k/TalC2i02PpI/AAAAAAAAAE8/FWN4-y50miU/s220/xenu_avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6299303114456153505.post-5878051751366104611</id><published>2012-08-26T14:06:00.003-05:00</published><updated>2012-08-26T14:06:34.779-05:00</updated><title type='text'>Ant, Javadoc, Libgdx, CreateProcess error=87, and YOU!</title><content type='html'>Gratuitously copied from the &lt;a href=&quot;http://western-skies.blogspot.com/2008/08/ant-javadoc-and-createprocess-error87.html&quot;&gt;Western Skies blog&lt;/a&gt; since I *just* got bit by this -- and apparently got bit by it before &#39;cuz Google showed that I had visited this link sometime in the past:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
I&#39;ve been developing an Ant build file for a large-ish base of existing 
code.  I&#39;ve been using my Mac as the primary devleopment platform, but 
the ultimate target (for the other developers) is Windows.  My task to 
build the javadocs runs fine on OS X, but the first time I rant it on 
Windows, I got the following:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;c:\demo\build.xml:180:
 Javadoc failed: java.io.IOException: Cannot run program &quot;c:\Program 
Files\Java\jdk1.6.0\bin\javadoc.exe&quot;: CreateProcess error=87, The 
parameter is incorrect&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;After about 10 minutes of Googling, I found a/the simple solution: add the &lt;span style=&quot;font-family: courier new;&quot;&gt;useexternalfile &lt;/span&gt;attribute to the &lt;span style=&quot;font-family: courier new;&quot;&gt;javadoc &lt;/span&gt;task in Ant. Voila , back in business, on the PC at least, and it didn&#39;t seem to break the build on the Mac.&lt;/blockquote&gt;
&lt;br /&gt;
&amp;nbsp;I got bit by the most recent version libgdx when trying to run &quot;ant&quot; in order to build the &quot;dist&quot;, which includes the API documentation that I was really aiming for.</content><link rel='replies' type='application/atom+xml' href='http://adventuresinandroidland.blogspot.com/feeds/5878051751366104611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://adventuresinandroidland.blogspot.com/2012/08/ant-javadoc-libgdx-createprocess.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/5878051751366104611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/5878051751366104611'/><link rel='alternate' type='text/html' href='http://adventuresinandroidland.blogspot.com/2012/08/ant-javadoc-libgdx-createprocess.html' title='Ant, Javadoc, Libgdx, CreateProcess error=87, and YOU!'/><author><name>T. Scott</name><uri>http://www.blogger.com/profile/03609994920427459747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/-tsR_q26Bj3k/TalC2i02PpI/AAAAAAAAAE8/FWN4-y50miU/s220/xenu_avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6299303114456153505.post-1435862398441891996</id><published>2012-08-20T18:47:00.000-05:00</published><updated>2012-08-20T18:47:27.813-05:00</updated><title type='text'>3D Math Primer for Graphics and Game Development, 2nd Edition</title><content type='html'>I&#39;ve picked up a copy of&amp;nbsp;&lt;a href=&quot;http://www.amazon.com/Math-Primer-Graphics-Development-Edition/dp/1568817231/ref=dp_ob_title_bk&quot;&gt;3D Math Primer on Graphics and Game Development&lt;/a&gt;&amp;nbsp;recently and have been slowly going through it. &amp;nbsp;It&#39;s been around 15 years since I took Linear Algebra, or had to do any real matrix or vector based math, so the brain cells are slowly being re-initialized. &amp;nbsp;Heh. &amp;nbsp;Hopefully, this turns into a series of posts to share as I relearn things cruising through the book.&lt;br /&gt;
&lt;br /&gt;
Here&#39;s what I&#39;ve covered so far.&lt;br /&gt;
&lt;br /&gt;
Chapter 1 deals with coordinate systems and concepts. &amp;nbsp;I was always fairly decent at trig so this went by really quick. &amp;nbsp;Chapter 2 gets into vectors and discusses the importance of the dot and cross products. &amp;nbsp;I remember learning and using these in school, but their application in game development terms wasn&#39;t obvious to me. &amp;nbsp;There are a couple of really good exercises that hit home the importance of these two operations.&lt;br /&gt;
&lt;br /&gt;
One of the exercises describes an NPC in a game at a point &lt;b&gt;p&lt;/b&gt;, that has a forward vector &lt;b&gt;v&lt;/b&gt;. &amp;nbsp;Given this, and a point &lt;b&gt;x&lt;/b&gt;, how can you use a dot product for determining whether or not the point &lt;b&gt;x &lt;/b&gt;is in front or behind the NPC?&lt;br /&gt;
&lt;br /&gt;
There are a couple of things to know about the dot product. &amp;nbsp;First, it gives you a scalar. &amp;nbsp;Big whoop. &amp;nbsp;How can this be used? &amp;nbsp;Well, the sign of the scalar gives you an indication of the relative direction / angle between one vector and another. &amp;nbsp;If the dot product is positive, then the angle between them is between 0 and 90 degrees. &amp;nbsp;If the dot product is 0, then the vectors are orthogonal (ie. at right angles). &amp;nbsp;If the dot product is &amp;lt; 0, then the angle between the vectors is greater than 90 degrees (and less than 180).&lt;br /&gt;
&lt;br /&gt;
So, given a NPC location of &lt;b&gt;p&lt;/b&gt;, we can calculate a vector &lt;b&gt;x-p &lt;/b&gt;that gives us a vector describing the relative position of point &lt;b&gt;x&lt;/b&gt;&amp;nbsp;from point &lt;b&gt;p&lt;/b&gt;. &amp;nbsp;If we know the facing of the character (vector &lt;b&gt;v&lt;/b&gt;&amp;nbsp;at point &lt;b&gt;p&lt;/b&gt;), then we can take the dot product between &lt;b&gt;v &lt;/b&gt;and &lt;b&gt;x-p&lt;/b&gt;&amp;nbsp;and &lt;i&gt;know&lt;/i&gt;&amp;nbsp;the relative positioning.&lt;br /&gt;
&lt;br /&gt;
Recall that the dot product yields a scalar, defined as:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;a&lt;/b&gt;&amp;nbsp;dot &lt;b&gt;&amp;nbsp;b&lt;/b&gt;&amp;nbsp;=&lt;br /&gt;
(ax*bx + ay*by + az*bz). &lt;br /&gt;
&lt;br /&gt;
Given this, we can determine if point &lt;b&gt;x&lt;/b&gt;&amp;nbsp;is in front-of or behind the NPC: &lt;br /&gt;
&lt;br /&gt;
If vx*(xx-px)+vy*(xy-py)+vz*(xz-pz) &amp;gt; 0, it&#39;s in front. &amp;nbsp;If it&#39;s &amp;lt; 0, is behind. &amp;nbsp;If it&#39;s == 0, then it&#39;s to the side of the NPC.&lt;br /&gt;
&lt;br /&gt;
Cool!&lt;br /&gt;
&lt;br /&gt;
Using the magnitudes of the related vectors and the relation: cos theta = &lt;b&gt;a&lt;/b&gt;&amp;nbsp;dot &lt;b&gt;b&lt;/b&gt;&amp;nbsp;/ (||&lt;b&gt;a&lt;/b&gt;|| * ||&lt;b&gt;b&lt;/b&gt;||), we can further determine the angle between the two vectors.&lt;br /&gt;
&lt;br /&gt;
Another cool exercise from the book details the practical application of the cross-product. &amp;nbsp;If the NPC above navigates from point &lt;b&gt;p &lt;/b&gt;to point &lt;b&gt;q&lt;/b&gt;&amp;nbsp;and then to point &lt;b&gt;r&lt;/b&gt;&amp;nbsp;in the x-z plane (using left hand orientation), how can we use a cross-product to determine if the NPC should turn clockwise or counter-clockwise at point &lt;b&gt;q&lt;/b&gt;&amp;nbsp;in order to reach &lt;b&gt;r&lt;/b&gt;? &lt;br /&gt;
&lt;br /&gt;
Recall that the cross-product yields a new vector, defined as:&lt;br /&gt;
&lt;b&gt;a &lt;/b&gt;x&lt;b&gt;&amp;nbsp;b&lt;/b&gt;&amp;nbsp;=&lt;br /&gt;
[ax ay az] x [bx by bz] =&lt;br /&gt;
[ay*bz-az*by -(ax*bz-az*bx) ax*by-bx*by]&lt;br /&gt;
&lt;br /&gt;
Here, it helps to know that the cross-product for a couple of vectors yields another vector that is orthogonal to the other two vectors. &amp;nbsp;This vector gives a magnitude that is proportional to the area of the parallelogram area formed by the vector sides. &amp;nbsp;We can look at the direction of the vector to clue us in to whether the orientation from one vector to another is clockwise or counter-clockwise. &amp;nbsp;If the angle from &lt;b&gt;a&lt;/b&gt;&amp;nbsp;to &lt;b&gt;b&lt;/b&gt;&amp;nbsp;is less than 180 degrees, the resulting vector will point up (left-hand rule orientation) on the orientation is considered clockwise. &amp;nbsp;If the angle from &lt;b&gt;a&lt;/b&gt;&amp;nbsp;to &lt;b&gt;b&lt;/b&gt;&amp;nbsp;is greater than 180 degrees (ie. &amp;nbsp;from &lt;b&gt;b&lt;/b&gt;&amp;nbsp;to &lt;b&gt;a&lt;/b&gt;&amp;nbsp;is less then 180 degrees), the orientation is considered counter-clockwise and the resulting vector will point down. &lt;br /&gt;
&lt;br /&gt;
In the NPC case above, it&#39;s pretty straightforward to calculate the cross-product. &amp;nbsp;Doing this results in a single vector that either points in the +y direction, or the -y direction. Using this info, we can easily determine which way to rotate the NPC at the point &lt;b&gt;q&lt;/b&gt;. &amp;nbsp;The NPC could actually rotate either way and still reach the same position. &amp;nbsp;The cross-product ends up giving you the shortest direction to rotate through.&lt;br /&gt;
&lt;br /&gt;
Cool x2!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://adventuresinandroidland.blogspot.com/feeds/1435862398441891996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://adventuresinandroidland.blogspot.com/2012/08/3d-math-primer-for-graphics-and-game.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/1435862398441891996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/1435862398441891996'/><link rel='alternate' type='text/html' href='http://adventuresinandroidland.blogspot.com/2012/08/3d-math-primer-for-graphics-and-game.html' title='3D Math Primer for Graphics and Game Development, 2nd Edition'/><author><name>T. Scott</name><uri>http://www.blogger.com/profile/03609994920427459747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/-tsR_q26Bj3k/TalC2i02PpI/AAAAAAAAAE8/FWN4-y50miU/s220/xenu_avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6299303114456153505.post-8349787922117978207</id><published>2012-08-20T17:13:00.001-05:00</published><updated>2012-08-20T17:13:40.857-05:00</updated><title type='text'>PDF Xchange Viewer Fu</title><content type='html'>I do a lot of PDF technical document reading where I&#39;m constantly flipping back and forth between &amp;nbsp;various document sections. &amp;nbsp;Although my favorite PDF viewer of choice, PDF XChange Viewer, rocks the house for annotating, searching, saving, etc., it sucks when it comes to intra-document navigation. &amp;nbsp;It&#39;s got bookmarks and capabilities to run multiple instances, but I haven&#39;t liked the navigation these implement. &amp;nbsp;I&#39;ve also tried using multiple copies of my documents and gotten that to work the way I liked (ie. tabbed document browsing), but having multiple copies seems like a real waste to me.&lt;br /&gt;
&lt;br /&gt;
Enter Chrome.&lt;br /&gt;
&lt;br /&gt;
Using Chrome tabs, you can easily and quickly open up multiple instances of a document by using the address bar to navigate to the local file. &amp;nbsp;From there, just right-click and select duplicate. You end up creating multiple instances of PDF XChange Viewer in this case, but the navigation is SOOOO much better than clicking on the Windows taskbar.&lt;br /&gt;
&lt;br /&gt;
You may have to disable the built-in PDF Viewer in Chrome to get PDF XChange Viewer working. &amp;nbsp;To do this, enter &quot;chrome://plugins&quot; and simply disable &quot;Chrome PDF Viewer&quot;.&lt;br /&gt;
&lt;br /&gt;
QED.&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://adventuresinandroidland.blogspot.com/feeds/8349787922117978207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://adventuresinandroidland.blogspot.com/2012/08/pdf-xchange-viewer-fu.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/8349787922117978207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/8349787922117978207'/><link rel='alternate' type='text/html' href='http://adventuresinandroidland.blogspot.com/2012/08/pdf-xchange-viewer-fu.html' title='PDF Xchange Viewer Fu'/><author><name>T. Scott</name><uri>http://www.blogger.com/profile/03609994920427459747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/-tsR_q26Bj3k/TalC2i02PpI/AAAAAAAAAE8/FWN4-y50miU/s220/xenu_avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6299303114456153505.post-3786720773669248892</id><published>2012-05-06T21:19:00.005-05:00</published><updated>2012-05-07T08:23:04.113-05:00</updated><title type='text'>SVN -&gt; Mercurial mirroring</title><content type='html'>I&#39;m continuing to use libgdx for my game development.&amp;nbsp; However, locally I&#39;m using Mercurial for software configuration while libgdx is currently stored up on GoogleCode using SVN.&amp;nbsp; Ugh.&amp;nbsp; How to stay in sync or otherwise mirror the SVN repo?&amp;nbsp; So far, I&#39;ve been maintaining things manually.&amp;nbsp; The approach I take for pulling in SVN updates is outlined on the Selenic site here:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://mercurial.selenic.com/wiki/SubversionToMercurialHowto&quot;&gt;http://mercurial.selenic.com/wiki/SubversionToMercurialHowto&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
This boils down to keeping a single directory that serves both as a SVN *and* Hg working directory.&amp;nbsp; From this directory, I do a clone per project to set things up.&amp;nbsp; For example, I have a clone of libgdx for my MatchCard game, another clone for Doodle Bug, another clone for Pyromancer&#39;s Laboratory, and yet another one for DB42 and DB42Lite.&lt;br /&gt;
&lt;br /&gt;
The nasty part of this business is that means I have to go to my local SVN repo, perform an SVN update, and then do an add/remove/commit on the Hg repo.&amp;nbsp; Since this is a manual operation, it doesn&#39;t happen all that often.&amp;nbsp; I&#39;m between games right now and wanted to more or less set things straight in terms of keeping in sync without having to rely on a manual process.&amp;nbsp; Here&#39;s the solution I came up with:&lt;br /&gt;
&lt;br /&gt;
1) I&#39;m sticking with the shared SVN / Hg working directory.&amp;nbsp; This is really straightforward and I have my brain completely wrapped around what&#39;s going on.&lt;br /&gt;
&lt;br /&gt;
2) I&#39;ve got cygwin installed on my Win7 x64 workstation to give me all the great tools that Unix developers know and love... grep, head, tail, bash scripting, etc.&lt;br /&gt;
&lt;br /&gt;
3) I&#39;ve got Jenkins installed on this same machine.&amp;nbsp; This does periodic job runs that query the state of the SVN repo, pull in new updates, and then add/remove/commit those changes to the Hg side of the shared directory.&amp;nbsp; The build trigger is simply &quot;Build Periodically&quot; that runs the following script:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
for ((COUNT=`svn log -r base:head | grep -E &quot;^r[0-9].*&quot; | wc -l`; COUNT &amp;gt; 1; COUNT-- ))&lt;br /&gt;
do&lt;br /&gt;
&amp;nbsp;&amp;nbsp; GETREV=`svn log -r base:head -l 2 | grep -E &quot;^r[0-9].*&quot; | tail -n1`&lt;br /&gt;
&amp;nbsp;&amp;nbsp; TOKENS=( $GETREV )&lt;br /&gt;
&amp;nbsp;&amp;nbsp; REV=${TOKENS[0]}&lt;br /&gt;
&amp;nbsp;&amp;nbsp; AUTHOR=${TOKENS[2]}&lt;br /&gt;
&amp;nbsp;&amp;nbsp; COMMENT=`svn log -r $REV | tail -n +4 | head -n-1`&lt;br /&gt;
&amp;nbsp;&amp;nbsp; CHECKINCOMMENT=$(echo -e &quot;$COMMENT\nSVN $REV&quot;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; svn update -r $REV&lt;br /&gt;
&amp;nbsp;&amp;nbsp; hg addremove&lt;br /&gt;
&amp;nbsp;&amp;nbsp; hg ci -u &quot;$AUTHOR&quot; -m &quot;$CHECKINCOMMENT&quot;&lt;br /&gt;
done&lt;/blockquote&gt;
What this script does is read the number of changes between the local base and the GoogleCode head.&amp;nbsp; If it is &amp;gt; 1 (ie. there are new changes), it iteratively pulls each SVN changeset and then commits those to the Hg repo using SVN revision, author, and comment info pulled from SVN&#39;s log command.&amp;nbsp; This took a while to get going -- my bash scripting skills are extremely rusty.&lt;br /&gt;
&lt;br /&gt;
The one thing I&#39;m lacking at this point is an &quot;hg push&quot; up to a default repo out on the Intertubes.&amp;nbsp; I have it in mind to share the repo on Assembla, but I currently don&#39;t have the libgdx&#39;s team blessing to do this (yet) and I also have a support request into the Assembla team to see if they have any server side tools that might accomplish the same thing I&#39;m doing locally.&amp;nbsp; This whole process is highly reliant on my build server not dying.&amp;nbsp; If I could push those operations out to some other server, that&#39;d be better in the long run.&amp;nbsp; For now, though, it works &lt;br /&gt;
&lt;br /&gt;
Hope this helps someone trying to accomplish something similar.</content><link rel='replies' type='application/atom+xml' href='http://adventuresinandroidland.blogspot.com/feeds/3786720773669248892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://adventuresinandroidland.blogspot.com/2012/05/svn-mercurial-mirroring.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/3786720773669248892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/3786720773669248892'/><link rel='alternate' type='text/html' href='http://adventuresinandroidland.blogspot.com/2012/05/svn-mercurial-mirroring.html' title='SVN -&gt; Mercurial mirroring'/><author><name>T. Scott</name><uri>http://www.blogger.com/profile/03609994920427459747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/-tsR_q26Bj3k/TalC2i02PpI/AAAAAAAAAE8/FWN4-y50miU/s220/xenu_avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6299303114456153505.post-1434388862210329878</id><published>2011-12-09T13:05:00.000-06:00</published><updated>2011-12-09T13:05:38.076-06:00</updated><title type='text'>Andronavi post</title><content type='html'>I think this explains the high number of Japanese folks playing the game: &lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://andronavi.com/2011/12/144583&quot;&gt;http://andronavi.com/2011/12/144583&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Google Chrome butchers it in translation I&#39;m sure.&amp;nbsp; I can&#39;t tell if the reviewer liked it or not.</content><link rel='replies' type='application/atom+xml' href='http://adventuresinandroidland.blogspot.com/feeds/1434388862210329878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/12/andronavi-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/1434388862210329878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/1434388862210329878'/><link rel='alternate' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/12/andronavi-post.html' title='Andronavi post'/><author><name>T. Scott</name><uri>http://www.blogger.com/profile/03609994920427459747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/-tsR_q26Bj3k/TalC2i02PpI/AAAAAAAAAE8/FWN4-y50miU/s220/xenu_avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6299303114456153505.post-7707602972365378405</id><published>2011-12-06T12:30:00.000-06:00</published><updated>2011-12-06T12:30:48.152-06:00</updated><title type='text'>Current standings</title><content type='html'>Here are the current standings of DB42 in the various markets.&amp;nbsp; China has got some huge growth going on.&amp;nbsp; Cool stuff.&lt;br /&gt;
&lt;br /&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;     &lt;td style=&quot;background-color: maroon; border: 1px solid rgb(0, 0, 0);&quot;&gt;Market Name&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;background-color: maroon; border: 1px solid rgb(0, 0, 0);&quot;&gt;Upload Date&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;background-color: maroon; border: 1px solid rgb(0, 0, 0);&quot;&gt;Publish Date&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;background-color: maroon; border: 1px solid rgb(0, 0, 0);&quot;&gt;Downloads&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;background-color: maroon; border: 1px solid rgb(0, 0, 0);&quot;&gt;Current Rating (# reviews)&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;background-color: maroon; border: 1px solid rgb(0, 0, 0);&quot;&gt;Notes&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;    &lt;/tr&gt;
&lt;tr&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;Android Market&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;11/27/2011&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;11/27/2011&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;813 (324 active)&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;5/5 (2)&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;    &lt;/tr&gt;
&lt;tr&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;SlideMe&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;12/4/2011&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;12/4/2011&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;287&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;none yet&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;    &lt;/tr&gt;
&lt;tr&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;AppChina&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;12/4/2011&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;12/5/2011&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;507&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;none yet&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;    &lt;/tr&gt;
&lt;tr&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;Mobango&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;12/4/2011&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;12/6/2011&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;0&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;4/5 (1)&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;There&#39;s one review, but the download count is currently 0.&amp;nbsp; Curious.&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;    &lt;/tr&gt;
&lt;tr&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;Amazon App Store&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;12/4/2011&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;Still Waiting&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;     &lt;td style=&quot;border: 1px solid rgb(0, 0, 0);&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/td&gt;    &lt;/tr&gt;
&lt;/tbody&gt;  &lt;/table&gt;</content><link rel='replies' type='application/atom+xml' href='http://adventuresinandroidland.blogspot.com/feeds/7707602972365378405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/12/current-standings.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/7707602972365378405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/7707602972365378405'/><link rel='alternate' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/12/current-standings.html' title='Current standings'/><author><name>T. Scott</name><uri>http://www.blogger.com/profile/03609994920427459747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/-tsR_q26Bj3k/TalC2i02PpI/AAAAAAAAAE8/FWN4-y50miU/s220/xenu_avatar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6299303114456153505.post-6944264576847953303</id><published>2011-12-04T13:04:00.000-06:00</published><updated>2011-12-04T13:04:18.516-06:00</updated><title type='text'>More alternatives</title><content type='html'>Uploaded DB42 to Mobango and Amazon.&amp;nbsp; I said i wasn&#39;t going to upload it to Amazon... but since I&#39;m doing the lite version I don&#39;t think it counts. ;)&lt;br /&gt;
&lt;br /&gt;
I understand the wait to get something published on Amazon is on the order of a couple weeks.&amp;nbsp; We&#39;ll see if it is up there by mid-December.&lt;br /&gt;
&lt;br /&gt;
Mobango requires a review before an app is published so I&#39;m waiting on that.&amp;nbsp; On AppChina, my app has entered the &#39;audit&#39; state, whatever that means.&amp;nbsp; Hope it is accepted!</content><link rel='replies' type='application/atom+xml' href='http://adventuresinandroidland.blogspot.com/feeds/6944264576847953303/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/12/more-alternatives.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/6944264576847953303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/6944264576847953303'/><link rel='alternate' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/12/more-alternatives.html' title='More alternatives'/><author><name>T. Scott</name><uri>http://www.blogger.com/profile/03609994920427459747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/-tsR_q26Bj3k/TalC2i02PpI/AAAAAAAAAE8/FWN4-y50miU/s220/xenu_avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6299303114456153505.post-582088156711518531</id><published>2011-12-03T18:37:00.001-06:00</published><updated>2011-12-04T07:02:23.730-06:00</updated><title type='text'>Alternative Android Markets</title><content type='html'>Taking a tip from Neil Rajah and his blog (&lt;a href=&quot;http://www.ziggysgames.com/&quot;&gt;Ziggy&#39;s Games&lt;/a&gt;), I&#39;ve gone ahead and added DB42 to a couple of new markets: AppChina and SlideMe.&amp;nbsp; I registered the game on AppChina about an hour ago and am still waiting for it to be approved.&amp;nbsp; *HOPEFULLY* Google translate didn&#39;t totally slaughter the simple descriptions I put in.&amp;nbsp; I figure the simpler they were, the less likely the translation would be something weird for a Chinese person to understand.&amp;nbsp; On the flip side, I&#39;ve fired off an e-mail to a former co-worker of mine that knows Chinese.&amp;nbsp; Hopefully he can help me round things out.&lt;br /&gt;
&lt;br /&gt;
I registered the app about 5 minutes ago on SlideMe.&amp;nbsp; It also requires a pre-approval process, but I just got an indication as I was typing up this blog post that it has been published.&amp;nbsp; We&#39;ll see how things go!!!</content><link rel='replies' type='application/atom+xml' href='http://adventuresinandroidland.blogspot.com/feeds/582088156711518531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/12/alternative-android-markets.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/582088156711518531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/582088156711518531'/><link rel='alternate' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/12/alternative-android-markets.html' title='Alternative Android Markets'/><author><name>T. Scott</name><uri>http://www.blogger.com/profile/03609994920427459747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/-tsR_q26Bj3k/TalC2i02PpI/AAAAAAAAAE8/FWN4-y50miU/s220/xenu_avatar.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6299303114456153505.post-544350267914439535</id><published>2011-12-03T18:04:00.000-06:00</published><updated>2011-12-03T18:04:24.014-06:00</updated><title type='text'>For Great Justice</title><content type='html'>DB42 is listed on a Japanese site.&amp;nbsp; English -&amp;gt; Japanese -&amp;gt; English makes for some weird reading.&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
Here&#39;s the Japanese -&amp;gt; English translation:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;&lt;span&gt;DB42 is  a platform puzzle game placed in the path of the robot is great! I  droid - 42 Dust Bin specified, DB42 As .... Or just &quot;Deeby&quot;, service  mark spam bots humble friend and fellow electricity.&lt;/span&gt; &lt;span&gt;&lt;span class=&quot;google-src-text&quot; style=&quot;direction: ltr; text-align: left;&quot;&gt;あなたの大きなものの運命にあるし、最後に、あなたのやる気を証明するあなたの監督の認可が知っている ！&lt;/span&gt; The fate of the big things in your last, you know your approval of the director to prove your motivation?&lt;/span&gt; &lt;span&gt;&lt;span class=&quot;google-src-text&quot; style=&quot;direction: ltr; text-align: left;&quot;&gt;あなたの方法 Cynobotic 軍の高度なロボットの訓練の場を作る。&lt;/span&gt; Create opportunities for advanced training of military robots Cynobotic your way.&lt;/span&gt; &lt;span&gt;&lt;span class=&quot;google-src-text&quot; style=&quot;direction: ltr; text-align: left;&quot;&gt;これらのあなたのウィットと知恵を最大限にテストされます ！&lt;/span&gt; The wit and wisdom are tested to maximize those of you!&lt;/span&gt; &lt;span&gt;&lt;span class=&quot;google-src-text&quot; style=&quot;direction: ltr; text-align: left;&quot;&gt;ジャンプ、実行、スイング、格闘し、テレポート、トップへの道 ！&lt;/span&gt; Jump, run, swing, wrestling, teleport way to the top!&lt;/span&gt; &lt;span&gt;&lt;span class=&quot;google-src-text&quot; style=&quot;direction: ltr; text-align: left;&quot;&gt;ゆっくりと、ゲームのコンポーネントを紹介、入門レベルを探るロープを学ぶ。&lt;/span&gt; Slowly introduce the components of the game, learn the ropes explore the introductory level.&lt;/span&gt; &lt;span&gt;&lt;span class=&quot;google-src-text&quot; style=&quot;direction: ltr; text-align: left;&quot;&gt;そこからは、ブラスト オフに多くのレベルの楽しさと脳のからかいの狂気!道に沿ってあなたの機能を強化するアップグレードを選択します。&lt;/span&gt;  From there, the madness of brain teasing fun and many levels of  blasting off the enhancements to select the upgrade you along the way.&lt;/span&gt; &lt;span&gt;&lt;span class=&quot;google-src-text&quot; style=&quot;direction: ltr; text-align: left;&quot;&gt;ようなものを見つける:-、迷惑バディ。&lt;/span&gt; Find something like: - Buddy annoying.&lt;/span&gt; &lt;span&gt;&lt;span class=&quot;google-src-text&quot; style=&quot;direction: ltr; text-align: left;&quot;&gt;これは、オブジェクトへの引くため短い範囲トラクター ビームです。&lt;/span&gt; This is a tractor beam to pull a short range to the object.&lt;/span&gt; &lt;span&gt;&lt;span class=&quot;google-src-text&quot; style=&quot;direction: ltr; text-align: left;&quot;&gt;非常に便利なだけである事を得るため… つ..到達 ！&lt;/span&gt; To obtain a very useful ... it is only one arrival ..!&lt;/span&gt; &lt;span&gt;&lt;span class=&quot;google-src-text&quot; style=&quot;direction: ltr; text-align: left;&quot;&gt;-、REPUGNICATOR。&lt;/span&gt; -, REPUGNICATOR.&lt;/span&gt; &lt;span&gt;&lt;span class=&quot;google-src-text&quot; style=&quot;direction: ltr; text-align: left;&quot;&gt;これは、リモート スイッチを押しのようなことをすることができます repulsor レイです.フープを撮影します。&lt;/span&gt; This is the repulsor rays that can be like pressing the remote switch. To shoot hoops.&lt;/span&gt; &lt;span&gt;&lt;span class=&quot;google-src-text&quot; style=&quot;direction: ltr; text-align: left;&quot;&gt;はい。&lt;/span&gt; Yes.&lt;/span&gt; &lt;span&gt;&lt;span class=&quot;google-src-text&quot; style=&quot;direction: ltr; text-align: left;&quot;&gt;真剣に ！&lt;/span&gt; Seriously!&lt;/span&gt; &lt;span&gt;&lt;span class=&quot;google-src-text&quot; style=&quot;direction: ltr; text-align: left;&quot;&gt;-無限現実間質性表面 (アイリス)。&lt;/span&gt; - Infinite Reality stromal surface (iris).&lt;/span&gt; &lt;span&gt;&lt;span class=&quot;google-src-text&quot; style=&quot;direction: ltr; text-align: left;&quot;&gt;テレポートあなたアイリス強化の程度を使用します。&lt;/span&gt; Iris uses a degree of strengthening your report.&lt;/span&gt; &lt;span&gt;&lt;span class=&quot;google-src-text&quot; style=&quot;direction: ltr; text-align: left;&quot;&gt;スペースを折り畳みしないので、簡単にされています ！&lt;/span&gt; Space does not collapse, has been easier!&lt;/span&gt; &lt;span&gt;&lt;span class=&quot;google-src-text&quot; style=&quot;direction: ltr; text-align: left;&quot;&gt;環境レベルとしては、水の危険性、重力のフィールド、およびオブジェクト フィールド サプレッサーのようなものが発生します。&lt;/span&gt; As the environmental level, the risk of water, gravity field, like the object occurs, and the suppressor field.&lt;/span&gt; &lt;span&gt;&lt;span class=&quot;google-src-text&quot; style=&quot;direction: ltr; text-align: left;&quot;&gt;DB42 はカジュアルなプラットフォーム\/パズル、パスにロボットの偉大さに置くゲーム!消化しやすいバージョンには 20 のレベルが含まれています。&lt;/span&gt;  DB42 is a platform \ / casual puzzle game placed in the path of the  robot is great! Is easily digestible version includes 20 levels.&lt;/span&gt; &lt;span&gt;&lt;span class=&quot;google-src-text&quot; style=&quot;direction: ltr; text-align: left;&quot;&gt;フルバージョン （近刊） 広告を削除し、100 のレベルにする方法の詳細が含まれています ！&lt;/span&gt; Full version (in press) to remove the ads, include details of how to level 100!&lt;/span&gt; &lt;span&gt;&lt;span class=&quot;google-src-text&quot; style=&quot;direction: ltr; text-align: left;&quot;&gt;アクセス許可の説明: インターネットとネットワークの状態: 広告 ＆ バグ報告のサービスを提供します。&lt;/span&gt; Description of access: Internet and Network Status: Provides the services of bug reports and advertising.&lt;/span&gt; &lt;br /&gt;
&lt;span&gt;&lt;span class=&quot;google-src-text&quot; style=&quot;direction: ltr; text-align: left;&quot;&gt;ハードウェアの振動: 触覚 feedbackBug レポート ＆ フィードバック： ごメール gushikustudios@gmail.com には、または私達のフォーラム、web サイトを参照してください ！&lt;/span&gt;  Vibration Hardware: feedbackBug report and tactile feedback:  gushikustudios@gmail.com Please e-mail, or our forums, please see the  web site!&lt;/span&gt; &lt;span&gt;&lt;span class=&quot;google-src-text&quot; style=&quot;direction: ltr; text-align: left;&quot;&gt;[タグ: ロボット、ドロイド、テレポート、ポータル、格闘、トラクター ビーム、レパルスベイ線]&lt;/span&gt; [Tags: robots, droids, teleport, portals, wrestling, tractor beam, Repulse Bay Line]&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;
Wrestling?&amp;nbsp; I don&#39;t remember that!&amp;nbsp; Here&#39;s the original English copy.&amp;nbsp; Funny stuff!&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;You are a lowly Mark I service droid - Dust Bin Designation 42, aka DB42.... or just &quot;Deeby&quot; to your electro-FRIENDS and fellow junk bots. You KNOW you are destined for greater things and have finally won the approval of your overseer to prove your mettle!&lt;br /&gt;
&lt;br /&gt;
Make your way through the Cynobotic Army&#39;s Advanced Robotic Training grounds. These will test your wits and resourcefulness to the UTMOST! Jump, run, swing, GRAPPLE and TELEPORT your way to the top!! Learn the ropes as you explore the introductory levels that slowly introduce you to the components of the game. From there, you BLAST OFF into many more levels of fun and brain-teasing craziness!!! &lt;br /&gt;
&lt;br /&gt;
Along the way you will pick up UPGRADES that enhance your capabilities. Find things like:&lt;br /&gt;
&lt;br /&gt;
- The JUNK BUDDY. This is a short range tractor beam for pulling objects towards you. Very useful for obtaining things that are just... out.. of... REACH!&lt;br /&gt;
&lt;br /&gt;
- The REPUGNICATOR. This is a repulsor ray that allows you to push remote switches and do things like... SHOOT HOOPS. Yes. Seriously!!&lt;br /&gt;
&lt;br /&gt;
- The Infinite Reality Interstitial Surface (IRIS). Use your IRIS enhancements to TELEPORT around a level. Folding space has NEVER been so EASY!&lt;br /&gt;
&lt;br /&gt;
As you level environments, you&#39;ll encounter things like water HAZARDS, ANTI-GRAVITY fields, and object field SUPPRESSORS. &lt;br /&gt;
&lt;br /&gt;
DB42 is a CASUAL PLATFORM / PUZZLE GAME that puts you on the path to robotic GREATNESS!&lt;br /&gt;
&lt;br /&gt;
The lite version contains 20 levels.&amp;nbsp; The full version (forthcoming) removes ads and contains 100 levels with more on the way!&lt;br /&gt;
&lt;br /&gt;
PERMISSIONS EXPLAINED:&lt;br /&gt;
&lt;br /&gt;
Internet and Network State: for serving ads &amp;amp; bug reporting&lt;br /&gt;
Hardware vibrate: for haptic feedback&lt;br /&gt;
&lt;br /&gt;
Bug reports &amp;amp; feedback: please send an email to gushikustudios@gmail.com, or visit our Forums on the web site!&lt;br /&gt;
&lt;br /&gt;
[ tags: robot, droid, teleport, portal, grapple, tractor beam, repulse ray ]&lt;/blockquote&gt;</content><link rel='replies' type='application/atom+xml' href='http://adventuresinandroidland.blogspot.com/feeds/544350267914439535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/12/for-great-justice.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/544350267914439535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/544350267914439535'/><link rel='alternate' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/12/for-great-justice.html' title='For Great Justice'/><author><name>T. Scott</name><uri>http://www.blogger.com/profile/03609994920427459747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/-tsR_q26Bj3k/TalC2i02PpI/AAAAAAAAAE8/FWN4-y50miU/s220/xenu_avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6299303114456153505.post-1774723308691881956</id><published>2011-12-03T11:13:00.001-06:00</published><updated>2011-12-03T11:14:43.064-06:00</updated><title type='text'>DB42 Lite version released</title><content type='html'>I released the lite version of my game on 11/27/2011 (&lt;a href=&quot;https://market.android.com/details?id=com.gushikustudios.db42lite&quot;&gt;DB42 Lite on the Android Market&lt;/a&gt;).&amp;nbsp; So, we&#39;re not quite a week out here.&lt;br /&gt;
&lt;br /&gt;
Here are the current stats:&lt;br /&gt;
&lt;br /&gt;
60% of the installations are located in Japan&lt;br /&gt;
12% of the installations are located in the US&lt;br /&gt;
&lt;br /&gt;
All apps in my category have the following stats:&lt;br /&gt;
&lt;br /&gt;
42% of installations are located in the US&lt;br /&gt;
5% of installations are located in Japan&lt;br /&gt;
&lt;br /&gt;
Quite a contrast there!&amp;nbsp; Hmmm.&amp;nbsp; I guess &quot;robot&quot; based games are more popular in Japan?&amp;nbsp; Stay tuned....</content><link rel='replies' type='application/atom+xml' href='http://adventuresinandroidland.blogspot.com/feeds/1774723308691881956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/12/db42-lite-version-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/1774723308691881956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/1774723308691881956'/><link rel='alternate' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/12/db42-lite-version-released.html' title='DB42 Lite version released'/><author><name>T. Scott</name><uri>http://www.blogger.com/profile/03609994920427459747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/-tsR_q26Bj3k/TalC2i02PpI/AAAAAAAAAE8/FWN4-y50miU/s220/xenu_avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6299303114456153505.post-5882842192694215654</id><published>2011-11-25T10:16:00.000-06:00</published><updated>2011-11-25T10:16:06.492-06:00</updated><title type='text'>Ouch!  The pains of a new installation</title><content type='html'>If you read my previous post, you&#39;ll discover I&#39;m not a fan of Dell.&amp;nbsp; Given the poor customer support from Dell, I switched companies opted for an ASUS G53S laptop.&amp;nbsp; This has been working nicely so far.&amp;nbsp; The intent has been to get a portable machine that satiates my gaming needs as well as works for dev efforts... I bring my laptop to work and work on personal stuff over the lunch hour.&lt;br /&gt;
&lt;br /&gt;
Well, starting yesterday I began working on getting the laptop loaded up with my project and the necessary tools to build my game, DB42.&amp;nbsp; Oi!&amp;nbsp; What pain!&amp;nbsp; I&#39;ve finally got things working and thought I&#39;d post my experiences here for future reference and in the event it might help someone else out.&lt;br /&gt;
&lt;br /&gt;
A bit of background first.&amp;nbsp; I&#39;m using Eclipse and the Android SDK.&amp;nbsp; I&#39;ve forked the libgdx project into my own distribution with a couple of tweaks here and there.&amp;nbsp; I also don&#39;t have to worry completely about relying on a specific nightly build since I&#39;ve got a snapshot of things.&amp;nbsp; This means that I also have the support tools for *that* installed -- the Android NDK, MinGW for compiling, Cygwin &amp;amp; ant for building. &lt;br /&gt;
&lt;br /&gt;
So, the first thing I did was install the latest and greatest Eclipse 3.7.1 (codenamed Indigo).&amp;nbsp; This went off fine.&amp;nbsp; Next up was TortoiseHG 2.2 so I could pull my repo from the hosting site I&#39;m using.&amp;nbsp; First problem encountered.&amp;nbsp; After installing this, I noticed that the icon overlays were missing on the root directory folders.&amp;nbsp; WTF. Even a reboot did not correct this.&amp;nbsp; The sub-directories seemed to be ok, but there was no indication on the root as to &quot;no change&quot; or &quot;modifications&quot;.&amp;nbsp; So, I downgraded to 2.1.4.&amp;nbsp; This cleared up that problem.&lt;br /&gt;
&lt;br /&gt;
Next up was the installation of Android SDK r15.&amp;nbsp; Downloading as a snap.&amp;nbsp; Installing the ADT was pretty simple as well (done from within Eclipse).&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
After getting all of that going (which took a while -- installing the various Android components results in a pretty big download), I ran into a snag.&amp;nbsp; I first cloned my repo to my hard drive.&amp;nbsp; Then, I tried to import the various components.&amp;nbsp; Instead of giving me a source folder and sub-packages, Eclipse showed everything as a package.&amp;nbsp; For example, instead of the hierarchy of &quot;src&quot; with &quot;com.gushikustudios.db42lite&quot; as a package, I saw the package &quot;src.com.gushikustudios.db42lite&quot;.&amp;nbsp; I don&#39;t know what was up with that, but it hosed the build.&amp;nbsp; To correct that, all you have to do is right-click on the project &amp;gt; New &amp;gt; Source Folder &amp;gt; src.&amp;nbsp; For whatever reason, that corrected the layout.&lt;br /&gt;
&lt;br /&gt;
Next up were errors with the project.&amp;nbsp; I have no clue why, but my project settings were missing.&amp;nbsp; I had to right-click on the project &amp;gt; properties &amp;gt; Java Build Path.&amp;nbsp; Here I had to do several things: Add Library &amp;gt; JRE System Lib (which was missing for whatever reason.)&amp;nbsp; Project references were missing.&amp;nbsp; Recall that I&#39;ve got my own build of libgdx, so I reference the project instead of&amp;nbsp; things like gdx.jar.&amp;nbsp; My lib settings were also missing, so I had to reference a lib that I have copied in my libs dir.&lt;br /&gt;
&lt;br /&gt;
Ugh.&lt;br /&gt;
&lt;br /&gt;
After correcting all of that, I tried to build my Android project and get an .apk file.&amp;nbsp; Nothing.&amp;nbsp; No apk file or anything produced in the bin/ sub-directory.&amp;nbsp; It turns out that this behavior is the new default for the latest ADT.&amp;nbsp; To &#39;fix&#39; this, in Eclipse go to Window &amp;gt; Preferences &amp;gt; Android &amp;gt; Build &amp;gt; deselect the &#39;Skip packaging&#39; check box.&amp;nbsp; I also changed build output from &#39;silent&#39; to normal.&amp;nbsp; That fixed that problem and I was able to produce an .apk file.&lt;br /&gt;
&lt;br /&gt;
Next up was the desktop build of gdx.&amp;nbsp; I failed to realize that the resulting gdx.dll that I created referenced other dlls that I didn&#39;t have installed on my new laptop.&amp;nbsp; Oh no, of course when you try to execute, the JVM doesn&#39;t give you any sort of error that is helpful in any way.&amp;nbsp; I kept getting &quot;UnsatisfiedLinkError&quot; / &quot;Can&#39;t find dependent libraries&quot; errors.&amp;nbsp; Great -- which dependent libraries can&#39;t you find?&amp;nbsp; I mean, throw me a bone here.&amp;nbsp; After poking around in the gdx.dll, it turned out that there were dynamic references to some build dlls: libstdc++-6.dll &amp;amp; libgcc_s_dw2-1.dll.&amp;nbsp; Oops.&amp;nbsp; Of course, I didn&#39;t discover this until after a couple of hours troubleshooting.&lt;br /&gt;
&lt;br /&gt;
All I had to do was install MinGW and reboot and all was fine.&amp;nbsp; Very frustrating, but things are finally starting to work.</content><link rel='replies' type='application/atom+xml' href='http://adventuresinandroidland.blogspot.com/feeds/5882842192694215654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/11/ouch-pains-of-new-installation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/5882842192694215654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/5882842192694215654'/><link rel='alternate' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/11/ouch-pains-of-new-installation.html' title='Ouch!  The pains of a new installation'/><author><name>T. Scott</name><uri>http://www.blogger.com/profile/03609994920427459747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/-tsR_q26Bj3k/TalC2i02PpI/AAAAAAAAAE8/FWN4-y50miU/s220/xenu_avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6299303114456153505.post-2104775054823902662</id><published>2011-11-14T18:24:00.000-06:00</published><updated>2011-11-14T18:24:16.452-06:00</updated><title type='text'>Will NEVER buy another Dell or recommend their products</title><content type='html'>I just wasted about an hour and a half talking to Dell tech support about my Dell XPS M1730.&amp;nbsp; I easily paid over $3000 for this beast 3 years ago... Top of the line.&amp;nbsp; etc. etc. etc.&amp;nbsp; My problems with this thing first started up when I installed Win7 on it a couple of years ago.&amp;nbsp; For whatever reason, the video drivers never quite seemed right with the hardware and although I have 2x8800M video cards installed, I had to disable one due to incompatibilities.&amp;nbsp; Whatever.&lt;br /&gt;
&lt;br /&gt;
Then, about 7 or 8 months ago, the battery quit holding a charge.&amp;nbsp; Which, I understand, but instead of dying off quietly, I would getting annoying nags about it, so I just pulled the battery completely.&amp;nbsp; Last week the Power Supply quit being recognized.&amp;nbsp; Huh?&amp;nbsp; So, what does the software do?&amp;nbsp; Derate of course.&amp;nbsp; I purchased a new power supply.&amp;nbsp; That didn&#39;t fix it.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
I&#39;m stuck with a machine that is about as crippled as you can get.&amp;nbsp; The derating brings my programming builds to a crawl.&amp;nbsp; Oh, and I&#39;m only 149 days out of the extended three year warranty I purchased.&amp;nbsp; The support people were sympathetic and polite, which is great, but how does that help me?&amp;nbsp; It doesn&#39;t.Their solution was to upgrade the BIOS.&amp;nbsp; Oh, but wait, you can&#39;t run the reflash program unless you have a recognized power supply and battery.&amp;nbsp; Oops.&amp;nbsp; There goes that idea.&lt;br /&gt;
&lt;br /&gt;
I figured my only option was to get a new motherboard.&amp;nbsp; Tech support gave me the out-of-warranty repairs number, who then redirected me to somebody that claimed I shouldn&#39;t have been directed to.&amp;nbsp; Argh!&amp;nbsp; They said my best bet was to skip a motherboard replacement altogether and instead buy a new computer.&amp;nbsp; Ummm.&amp;nbsp; Excuse me?&amp;nbsp; I have no desire to purchase another Dell.&amp;nbsp; I recommend everyone avoid them at all costs.&amp;nbsp; I was considering to &#39;upgrade&#39; to an Alienware machine -- but they share the Dell taint so I guess I need to look elsewhere.&lt;br /&gt;
&lt;br /&gt;
If you are considering buying a Dell, think again.&lt;br /&gt;
&lt;br /&gt;
A disappointed, FORMER Dell customer.</content><link rel='replies' type='application/atom+xml' href='http://adventuresinandroidland.blogspot.com/feeds/2104775054823902662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/11/will-never-buy-another-dell-or.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/2104775054823902662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/2104775054823902662'/><link rel='alternate' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/11/will-never-buy-another-dell-or.html' title='Will NEVER buy another Dell or recommend their products'/><author><name>T. Scott</name><uri>http://www.blogger.com/profile/03609994920427459747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/-tsR_q26Bj3k/TalC2i02PpI/AAAAAAAAAE8/FWN4-y50miU/s220/xenu_avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6299303114456153505.post-7384289376313598235</id><published>2011-10-27T21:52:00.000-05:00</published><updated>2011-10-27T21:52:32.579-05:00</updated><title type='text'>Repulser, pass #1</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-tP6DTMq53gU/TqoYETwxZkI/AAAAAAAAAGg/HVmoEaLXWI4/s1600/Repulser.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;203&quot; src=&quot;http://3.bp.blogspot.com/-tP6DTMq53gU/TqoYETwxZkI/AAAAAAAAAGg/HVmoEaLXWI4/s320/Repulser.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
I modded the libgdx particle emitter class to allow the programmer to have old particles track a specific angle.&amp;nbsp; I did this so that I could get the effect you see above.&amp;nbsp; It&#39;s a repulse ray.&amp;nbsp; I need to polish it up a bit -- the player&#39;s tracer line appears when it shouldn&#39;t (this is a screenshot of the first, proof-of-concept pass).&amp;nbsp; But, it looks functional and I like how it emanates outward.&amp;nbsp; I was going to try to animate this action with multiple images, but using particles gives a waaaaay better effect.&amp;nbsp; Things should be fixed up tomorrow.</content><link rel='replies' type='application/atom+xml' href='http://adventuresinandroidland.blogspot.com/feeds/7384289376313598235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/10/repulser-pass-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/7384289376313598235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/7384289376313598235'/><link rel='alternate' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/10/repulser-pass-1.html' title='Repulser, pass #1'/><author><name>T. Scott</name><uri>http://www.blogger.com/profile/03609994920427459747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/-tsR_q26Bj3k/TalC2i02PpI/AAAAAAAAAE8/FWN4-y50miU/s220/xenu_avatar.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-tP6DTMq53gU/TqoYETwxZkI/AAAAAAAAAGg/HVmoEaLXWI4/s72-c/Repulser.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6299303114456153505.post-7271865666864953920</id><published>2011-10-19T16:46:00.002-05:00</published><updated>2011-10-19T16:46:48.242-05:00</updated><title type='text'>*DING*</title><content type='html'>Slide rule Android app - 10k user Achievement Unlocked.&lt;br /&gt;
&lt;br /&gt;
Checked the developer console today and saw this:&lt;br /&gt;
&lt;br /&gt;
&quot;&lt;span&gt;10012&lt;/span&gt; total installs (users)&quot;&lt;br /&gt;
&lt;br /&gt;
Cool!&amp;nbsp; Broke the 10k barrier.</content><link rel='replies' type='application/atom+xml' href='http://adventuresinandroidland.blogspot.com/feeds/7271865666864953920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/10/ding.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/7271865666864953920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/7271865666864953920'/><link rel='alternate' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/10/ding.html' title='*DING*'/><author><name>T. Scott</name><uri>http://www.blogger.com/profile/03609994920427459747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/-tsR_q26Bj3k/TalC2i02PpI/AAAAAAAAAE8/FWN4-y50miU/s220/xenu_avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6299303114456153505.post-396374361244405115</id><published>2011-10-09T08:06:00.000-05:00</published><updated>2011-10-09T08:06:02.551-05:00</updated><title type='text'>Training Level 07 is done</title><content type='html'>Finally.&amp;nbsp; Done.&amp;nbsp; With training level 07.&amp;nbsp; I wanted to create a new pendulum object for this one and had a bit of trouble initially getting it to work the way that I wanted to.&amp;nbsp; After getting a tip from a Box2D guru, I was able to get things working.&amp;nbsp; The problem had to do with me creating an axle that had no fixture.&amp;nbsp; When I did this, the pendulum rod quit swinging.&amp;nbsp; Double plus ungood.&amp;nbsp; You need to have a fixture in place or the fixtureless body constrains rotation.&lt;br /&gt;
&lt;br /&gt;
So, yeah, WOOT!&amp;nbsp; Here&#39;s a screenshot.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-dvUXfLlibzc/TpGcMZPkB6I/AAAAAAAAAGc/3DF7m1uwSRs/s1600/tl07.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;203&quot; src=&quot;http://1.bp.blogspot.com/-dvUXfLlibzc/TpGcMZPkB6I/AAAAAAAAAGc/3DF7m1uwSRs/s320/tl07.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adventuresinandroidland.blogspot.com/feeds/396374361244405115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/10/training-level-07-is-done.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/396374361244405115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/396374361244405115'/><link rel='alternate' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/10/training-level-07-is-done.html' title='Training Level 07 is done'/><author><name>T. Scott</name><uri>http://www.blogger.com/profile/03609994920427459747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/-tsR_q26Bj3k/TalC2i02PpI/AAAAAAAAAE8/FWN4-y50miU/s220/xenu_avatar.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-dvUXfLlibzc/TpGcMZPkB6I/AAAAAAAAAGc/3DF7m1uwSRs/s72-c/tl07.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6299303114456153505.post-3443126786836635089</id><published>2011-10-08T06:58:00.001-05:00</published><updated>2011-10-08T06:59:36.953-05:00</updated><title type='text'>Bobbing for crates</title><content type='html'>I wasn&#39;t happy that I had this fancy dancy new water texture but no physics behind it to make things (like crates) float.&amp;nbsp; I went out and discovered that the Box2DFlash port by &quot;BoristheBrave&quot; had already implemented this.&amp;nbsp; I ported that over to the libgdx library... and was able to do it by adding shape extensions so I didn&#39;t need any updates to the underlying libgdx JNI code which was cool.&amp;nbsp; After realizing that Box2DFlash&#39;s coordinate y-axis was inverted from my environment&#39;s y-axis AND fixing a couple of bugs I introduced, it&#39;s now working flawlessly.&amp;nbsp; Here&#39;s a screen shot of a couple of crates floating:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-mZJwNRCG10g/TpA6TRnUl5I/AAAAAAAAAGY/kPBTEaxIRbk/s1600/bobbing.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;203&quot; src=&quot;http://1.bp.blogspot.com/-mZJwNRCG10g/TpA6TRnUl5I/AAAAAAAAAGY/kPBTEaxIRbk/s320/bobbing.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
One other thing that I did last night was to integrate ACRA.&amp;nbsp; This is Application Crash Reporting for Android.&amp;nbsp; If you give your application Internet permission, it will send crashes off to Google docs for analysis.&amp;nbsp; This will give you the trace you need that the standard &#39;Force Close&#39; window absolutely does not provide.&lt;br /&gt;
&lt;br /&gt;
The best thing about this is that the overall impact on the app is minimal.&amp;nbsp; You add a new class and override the onCreate() method in that class, set up a Google docs form, and you are ready to go.&amp;nbsp; I was a bit confused at first because I wasn&#39;t sure how to integrate it with libgdx, but it really boils down to just adding the class as part of the Android project &amp;amp; including the acra .JAR file.&amp;nbsp; QED!</content><link rel='replies' type='application/atom+xml' href='http://adventuresinandroidland.blogspot.com/feeds/3443126786836635089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/10/bobbing-for-crates.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/3443126786836635089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/3443126786836635089'/><link rel='alternate' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/10/bobbing-for-crates.html' title='Bobbing for crates'/><author><name>T. Scott</name><uri>http://www.blogger.com/profile/03609994920427459747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/-tsR_q26Bj3k/TalC2i02PpI/AAAAAAAAAE8/FWN4-y50miU/s220/xenu_avatar.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-mZJwNRCG10g/TpA6TRnUl5I/AAAAAAAAAGY/kPBTEaxIRbk/s72-c/bobbing.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6299303114456153505.post-4888187227149575904</id><published>2011-10-03T21:10:00.000-05:00</published><updated>2011-10-03T21:10:53.109-05:00</updated><title type='text'>Training Level 06 is in the bag</title><content type='html'>Added a new water texture to short out the main character&#39;s circuits.&amp;nbsp; Take a peek below.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-YviBkK8A-pk/ToprIZzhzoI/AAAAAAAAAGU/wRxxrDrblRc/s1600/TrainingLevel06.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;203&quot; src=&quot;http://3.bp.blogspot.com/-YviBkK8A-pk/ToprIZzhzoI/AAAAAAAAAGU/wRxxrDrblRc/s320/TrainingLevel06.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adventuresinandroidland.blogspot.com/feeds/4888187227149575904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/10/training-level-06-is-in-bag.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/4888187227149575904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/4888187227149575904'/><link rel='alternate' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/10/training-level-06-is-in-bag.html' title='Training Level 06 is in the bag'/><author><name>T. Scott</name><uri>http://www.blogger.com/profile/03609994920427459747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/-tsR_q26Bj3k/TalC2i02PpI/AAAAAAAAAE8/FWN4-y50miU/s220/xenu_avatar.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-YviBkK8A-pk/ToprIZzhzoI/AAAAAAAAAGU/wRxxrDrblRc/s72-c/TrainingLevel06.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6299303114456153505.post-4323154658403771725</id><published>2011-10-02T07:19:00.001-05:00</published><updated>2011-10-02T07:20:22.065-05:00</updated><title type='text'>Evolution</title><content type='html'>It&#39;s been a while since I&#39;ve posted on here.&amp;nbsp; Why is that?&amp;nbsp; I&#39;ve been working pretty damn hard on my game!&amp;nbsp; That&#39;s why!&lt;br /&gt;
&lt;br /&gt;
Below are some screenshots of the current build.&amp;nbsp; I&#39;m currently looking for an artist to give the game that extra polish.&amp;nbsp; I&#39;ve been able to find one on indiegamer and have a offer extended to him that I&#39;m waiting on for acceptance.&amp;nbsp; We&#39;ll see how it goes!&amp;nbsp; Very exciting stuff.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-KhnDatijvVE/TohWRVbJyAI/AAAAAAAAAGI/L--JkbTcGyY/s1600/DB42_sample.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;203&quot; src=&quot;http://1.bp.blogspot.com/-KhnDatijvVE/TohWRVbJyAI/AAAAAAAAAGI/L--JkbTcGyY/s320/DB42_sample.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-iUo7zrMy7iM/TohW_2wGpSI/AAAAAAAAAGQ/K1lyIc3wN90/s1600/DB42_sample3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;203&quot; src=&quot;http://1.bp.blogspot.com/-iUo7zrMy7iM/TohW_2wGpSI/AAAAAAAAAGQ/K1lyIc3wN90/s320/DB42_sample3.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-l4VASMyaAC0/TohWkRiJBFI/AAAAAAAAAGM/Ymx6lCagxRE/s1600/DB42_sample2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;203&quot; src=&quot;http://1.bp.blogspot.com/-l4VASMyaAC0/TohWkRiJBFI/AAAAAAAAAGM/Ymx6lCagxRE/s320/DB42_sample2.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://adventuresinandroidland.blogspot.com/feeds/4323154658403771725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/10/evolution.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/4323154658403771725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/4323154658403771725'/><link rel='alternate' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/10/evolution.html' title='Evolution'/><author><name>T. Scott</name><uri>http://www.blogger.com/profile/03609994920427459747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/-tsR_q26Bj3k/TalC2i02PpI/AAAAAAAAAE8/FWN4-y50miU/s220/xenu_avatar.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-KhnDatijvVE/TohWRVbJyAI/AAAAAAAAAGI/L--JkbTcGyY/s72-c/DB42_sample.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6299303114456153505.post-5555008992004722554</id><published>2011-07-25T16:35:00.000-05:00</published><updated>2011-07-25T16:35:57.942-05:00</updated><title type='text'>Rendering results... WAHOO!</title><content type='html'>Wow!&amp;nbsp; I can&#39;t believe how easy rendering is and the HUGE improvement I had versus the Box2D renderer.&amp;nbsp; I had it in my mind that it would be overly complicated, but it&#39;s that&#39;s not the case at all.&amp;nbsp; The results are so good that my conveyor belt actually WORKS on my phone.&amp;nbsp; That&#39;s great because I&#39;ve got a couple of cool ideas for some levels using this construct.&lt;br /&gt;
&lt;br /&gt;
My (simplistic) design, as mentioned in the previous post, is working great.&amp;nbsp; I created a new renderer class that is passed the the Box2D world instance.&amp;nbsp; From here, I get the list of bodies that are in the world.&amp;nbsp; I thought that I would have to iterate over all my fixtures in order to get things to appear.&amp;nbsp; That&#39;s not really the case.&amp;nbsp; Although your object may be comprised of several polygons (especially in the event that you want to a concave type object), your actual object is a single entity.&amp;nbsp; If you have a texture that &#39;fits over&#39; that entity, then you are all set.&amp;nbsp; Much easier than trying to iterate over the fixture list to define individual elements!&lt;br /&gt;
&lt;br /&gt;
I added some info to my user data class -- object texture, size, origin, and color.&amp;nbsp; The renderer uses these to scale textures appropriately.&amp;nbsp; When I get the real textures drawn up, it will use those instead.&amp;nbsp; I wanted to implement scaling because some of my objects don&#39;t have a predefined size at compile time (platforms have variable length, gears have variable radius, etc.)&amp;nbsp; Other objects, on the other hand, will have static sizes so handling those should have less of an impact on CPU time when I define the &#39;real&#39; textures.&lt;br /&gt;
&lt;br /&gt;
I added a grand total of 2 textures for my own debugging - one shape for circles and one for squares.&amp;nbsp; I also added a simple line so I can see rotation.&amp;nbsp; See the screenshot below for an example:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-z_j0gYZMcRc/Ti3eS6KupQI/AAAAAAAAAGE/ZPvTqPJdVgc/s1600/rendered.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;203&quot; src=&quot;http://4.bp.blogspot.com/-z_j0gYZMcRc/Ti3eS6KupQI/AAAAAAAAAGE/ZPvTqPJdVgc/s320/rendered.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Observations:&lt;br /&gt;
&lt;br /&gt;
1) I had defined some objects with rotation and instead of rotating the object, I rotated the fixture.&amp;nbsp; This resulted in rendering images that were out of whack with the body (a vertical platform, for example, rendered a texture horizontally).&amp;nbsp; Bad!&amp;nbsp; This was easily corrected by setting the shape&#39;s rotation to 0 and the body&#39;s .angle parameter to the desired angle.&amp;nbsp; I love quick fixes like that.&lt;br /&gt;
&lt;br /&gt;
2) I need to have ordered rendering. I have some instances where objects overlap.&amp;nbsp; Sometimes the player&#39;s arm/gun is rendered before the body and sometimes it is rendered after.&amp;nbsp; You either see the gun peaking out when it is rotated or you see it &#39;correctly&#39; on top of the player.&amp;nbsp; I need to correct this.&amp;nbsp; Since I&#39;m iterating over the entire world of objects, I probably will skip this special case and have the player object render itself separately... it knows to draw the player body and then the arm next.&amp;nbsp; Skipping should be a snap because my user data includes object type info.&lt;br /&gt;
&lt;br /&gt;
3) My fps on my phone on the conveyor belt map was on the order of 14 fps using the debug renderer.&amp;nbsp; Using my renderer, my fps shot up to close to the max -- 50-60 fps.&lt;br /&gt;
&lt;br /&gt;
4) The screenshot above shows a capture of my game running on the desktop.&amp;nbsp; The fps says 4774.&amp;nbsp; With the debug renderer, I was getting 1/4 of that... say around 1400 fps or so.&amp;nbsp; Notably slower than what I am getting right now.&amp;nbsp; Most of the operational time was spent rendering joints (40%+).&lt;br /&gt;
&lt;br /&gt;
5) This doesn&#39;t obsolete my usage of the debug renderer.&amp;nbsp; I can always run that AFTER I do my rendering to &#39;overlay&#39; what the physics engine is thinking it should be displaying.&amp;nbsp; That&#39;s a pretty neat trick.&lt;br /&gt;
&lt;br /&gt;
That&#39;s all for now. All in all, I&#39;m pretty happy I got this working.&amp;nbsp; It was a big disappointment yesterday to see that the conveyor belt killed things!</content><link rel='replies' type='application/atom+xml' href='http://adventuresinandroidland.blogspot.com/feeds/5555008992004722554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/07/rendering-results-wahoo.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/5555008992004722554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6299303114456153505/posts/default/5555008992004722554'/><link rel='alternate' type='text/html' href='http://adventuresinandroidland.blogspot.com/2011/07/rendering-results-wahoo.html' title='Rendering results... WAHOO!'/><author><name>T. Scott</name><uri>http://www.blogger.com/profile/03609994920427459747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='31' src='http://4.bp.blogspot.com/-tsR_q26Bj3k/TalC2i02PpI/AAAAAAAAAE8/FWN4-y50miU/s220/xenu_avatar.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-z_j0gYZMcRc/Ti3eS6KupQI/AAAAAAAAAGE/ZPvTqPJdVgc/s72-c/rendered.png" height="72" width="72"/><thr:total>0</thr:total></entry></feed>