<?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-1930106743203302082</id><updated>2026-07-05T01:37:34.346-07:00</updated><category term="Tutorials"/><category term="Developer Outreach"/><title type='text'>Vidya Game Dev</title><subtitle type='html'>&lt;a href=&quot;http://vidyagamedev.blogspot.com/&quot;&gt;Too many indie devs, not enough games.&lt;/a&gt;</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://vidyagamedev.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1930106743203302082/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://vidyagamedev.blogspot.com/'/><author><name>Darkkal</name><uri>http://www.blogger.com/profile/17122013759877241303</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1930106743203302082.post-289712544340505480</id><published>2011-10-04T21:19:00.000-07:00</published><updated>2011-10-04T21:21:17.341-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Developer Outreach"/><category scheme="http://www.blogger.com/atom/ns#" term="Tutorials"/><title type='text'>Collision Detection and Response in Platformers</title><content type='html'>Working on my platformer, I came across the inevitable problem of &lt;b&gt;collision detecting.&lt;/b&gt; This sucks so hard because lately I&#39;ve been just winging it with basic theorems and such. I came along the &lt;b&gt;Separation Axes Theorem&lt;/b&gt; which checks the collision between two convex polygons, which is exactly what I needed. The makers of N, metanet, have provided a sophisticated tutorial on how to accomplish such a task with the &lt;b&gt;SAT&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe height=&quot;500&quot; src=&quot;http://www.metanetsoftware.com/technique/tutorialA.html&quot; width=&quot;100%&quot;&gt;&amp;amp;amp;lt;p&amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;br /&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;   &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;Your browser does not support iframes.&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;lt;/p&amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;lt;/p&amp;amp;amp;gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
source: &lt;a href=&quot;http://www.metanetsoftware.com/technique/tutorialA.html&quot;&gt;http://www.metanetsoftware.com/technique/tutorialA.html&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://vidyagamedev.blogspot.com/feeds/289712544340505480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vidyagamedev.blogspot.com/2011/10/collision-detection-and-response-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1930106743203302082/posts/default/289712544340505480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1930106743203302082/posts/default/289712544340505480'/><link rel='alternate' type='text/html' href='http://vidyagamedev.blogspot.com/2011/10/collision-detection-and-response-in.html' title='Collision Detection and Response in Platformers'/><author><name>Darkkal</name><uri>http://www.blogger.com/profile/17122013759877241303</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1930106743203302082.post-2596373614139801021</id><published>2011-04-30T01:59:00.000-07:00</published><updated>2011-04-30T01:59:35.787-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Developer Outreach"/><title type='text'>Project Management: Using Redmine</title><content type='html'>You are an average indie developer. You come across a few friends who wish to join you on your quest to becoming a successful game developer. Days, months, maybe even a year or two pass by, and you are relying on skype chat and google docs to develop a video game. Sure, it may get you what you need for a small game, but what happens when you want to expand your project? Tread uncharted territory? Take on bigger challenges that require bug testing, version control, team management, and other important additives?&lt;br /&gt;
&lt;br /&gt;
Welcome to Redmine, a flexible project management web application. Below are some of the features of Redmine:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Multiple projects support&lt;/li&gt;
&lt;li&gt;Flexible role based access control&lt;/li&gt;
&lt;li&gt;Flexible issue tracking system&lt;/li&gt;
&lt;li&gt;Gantt chart and calendar&lt;/li&gt;
&lt;li&gt;News, documents &amp;amp; files management&lt;/li&gt;
&lt;li&gt;Feeds &amp;amp; email notifications&lt;/li&gt;
&lt;li&gt;Per project wiki&lt;/li&gt;
&lt;li&gt;Per project forums&lt;/li&gt;
&lt;li&gt;Time tracking&lt;/li&gt;
&lt;li&gt;Custom fields for issues, time-entries, projects and users&lt;/li&gt;
&lt;li&gt;SCM integration (SVN, CVS, Git, Mercurial, Bazaar and Darcs)&lt;/li&gt;
&lt;li&gt;Issue creation via email&lt;/li&gt;
&lt;li&gt;Multiple LDAP authentication support&lt;/li&gt;
&lt;li&gt;User self-registration support&lt;/li&gt;
&lt;li&gt;Multilingual support&lt;/li&gt;
&lt;li&gt;Multiple databases support&lt;/li&gt;
&lt;/ul&gt;If you head over to &lt;a href=&quot;http://redmine.org/&quot;&gt;the Redmine main website&lt;/a&gt;, you can check out all sorts of stuff, including &lt;a href=&quot;http://demo.redmine.org/&quot;&gt;demos&lt;/a&gt; of users using Redmine.&lt;br /&gt;
&lt;br /&gt;
The game development company I&#39;m working for is currently using this webapp, and boy is it useful. Managing a team of 30 can be hard work, and with a webapp like Redmine, a large group of people can stay organized.</content><link rel='replies' type='application/atom+xml' href='http://vidyagamedev.blogspot.com/feeds/2596373614139801021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vidyagamedev.blogspot.com/2011/04/project-management-using-redmine.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1930106743203302082/posts/default/2596373614139801021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1930106743203302082/posts/default/2596373614139801021'/><link rel='alternate' type='text/html' href='http://vidyagamedev.blogspot.com/2011/04/project-management-using-redmine.html' title='Project Management: Using Redmine'/><author><name>Darkkal</name><uri>http://www.blogger.com/profile/17122013759877241303</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1930106743203302082.post-1783667187122770502</id><published>2011-04-05T23:25:00.000-07:00</published><updated>2011-04-05T23:57:54.048-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Developer Outreach"/><title type='text'>&quot;Streets of Rage&quot; Remade by Indie Dev</title><content type='html'>&lt;span id=&quot;goog_1899150720&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_1899150721&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://bombergames.net/promotional.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;241&quot; src=&quot;http://bombergames.net/promotional.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Promotional pic from the website itself&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&amp;nbsp;I was just heading to bed when I discovered the release of an AMAZING remake of streets of rage! The developer, &lt;i&gt;BomberGames Soft&lt;b&gt;, &lt;/b&gt;&lt;/i&gt;took on an outstanding 8 year project. My god, everything about playing this remake made my spine shiver, my nerd senses tingle, my fingers eager, and my heart so warm it was like my first kiss.&lt;br /&gt;
&lt;br /&gt;
Here are some screenshots:&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-nAHQyvVDJms/TZwGSXgLTNI/AAAAAAAAAAk/htYMHihpdeY/s1600/a.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;313&quot; src=&quot;http://2.bp.blogspot.com/-nAHQyvVDJms/TZwGSXgLTNI/AAAAAAAAAAk/htYMHihpdeY/s400/a.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;A brand spankin new character screen&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-U0xBp0cMvo8/TZwGSxCOgwI/AAAAAAAAAAs/CmwacjJOOFw/s1600/Untitled.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;315&quot; src=&quot;http://2.bp.blogspot.com/-U0xBp0cMvo8/TZwGSxCOgwI/AAAAAAAAAAs/CmwacjJOOFw/s400/Untitled.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;A route map!!! This guy thought of everything!&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-wGaYnYpjP5c/TZwGSpRu7wI/AAAAAAAAAAo/jrFgOsXRE7s/s1600/c.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;313&quot; src=&quot;http://3.bp.blogspot.com/-wGaYnYpjP5c/TZwGSpRu7wI/AAAAAAAAAAo/jrFgOsXRE7s/s400/c.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;And oh my god the detail!!! &lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;span id=&quot;goog_1899150692&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_1899150693&quot;&gt;&lt;/span&gt;And for comparison:&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://wiimedia.ign.com/wii/image/article/792/792475/streets-of-rage-2-virtual-console-20070529045545990_640w.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;311&quot; src=&quot;http://wiimedia.ign.com/wii/image/article/792/792475/streets-of-rage-2-virtual-console-20070529045545990_640w.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;SNES character select screen&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://www.gamesdbase.com/Media/SYSTEM/Arcade/Snap/big/Streets_of_Rage_II_-_1993_-_Sega.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; src=&quot;http://www.gamesdbase.com/Media/SYSTEM/Arcade/Snap/big/Streets_of_Rage_II_-_1993_-_Sega.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;SNES stage one&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;i&gt;Streets of Rage Remake is a project created from scratch, it does not use reverse engineering nor a single line of code from the original games. It’s all based on visual interpretation, comparing how things work in the original games and trying to mimic it for Streets of Rage Remake.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Some of its functions:&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;* Animation timing, animation positioning, control response, X/Y/Z positions and physical movement for all characters are accurate to the original games.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;* 64 modules of ..&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.bombergames.net/sorr_project/&quot;&gt;Click here for more info and download links...&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://vidyagamedev.blogspot.com/feeds/1783667187122770502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vidyagamedev.blogspot.com/2011/04/streets-of-rage-remade-by-indie-dev.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1930106743203302082/posts/default/1783667187122770502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1930106743203302082/posts/default/1783667187122770502'/><link rel='alternate' type='text/html' href='http://vidyagamedev.blogspot.com/2011/04/streets-of-rage-remade-by-indie-dev.html' title='&quot;Streets of Rage&quot; Remade by Indie Dev'/><author><name>Darkkal</name><uri>http://www.blogger.com/profile/17122013759877241303</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-nAHQyvVDJms/TZwGSXgLTNI/AAAAAAAAAAk/htYMHihpdeY/s72-c/a.png" height="72" width="72"/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1930106743203302082.post-7281616955998413684</id><published>2011-03-30T22:14:00.000-07:00</published><updated>2011-03-30T22:18:56.780-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Developer Outreach"/><title type='text'>Hawken Development</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;320&#39; height=&#39;266&#39; src=&#39;https://www.youtube.com/embed/udEAEARD-Fo?feature=player_embedded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;&lt;/div&gt;This is what the devs over at &lt;a href=&quot;http://www.hawkengame.com/blog/&quot;&gt;http://www.hawkengame.com/blog/&lt;/a&gt; are working on.&lt;br /&gt;
&lt;br /&gt;
OH&lt;br /&gt;
MY&lt;br /&gt;
GOD&lt;br /&gt;
&lt;br /&gt;
This game emulates reality so well, I almost got motion sickness from watching the video. It makes me tear up seeing how far graphics have advanced. I MEAN COME ON, DYNAMIC SHADING ON THE HUD WHICH BY THE WAY IS EMBEDDED INTO THE MECH, A++ GAME ALREADY.&lt;br /&gt;
&lt;br /&gt;
The only thing that could make this game better would be destructible environment; other than that, this game is insane! I would give everything to work at their studio to work on Hawken.</content><link rel='replies' type='application/atom+xml' href='http://vidyagamedev.blogspot.com/feeds/7281616955998413684/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vidyagamedev.blogspot.com/2011/03/hawken-development.html#comment-form' title='18 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1930106743203302082/posts/default/7281616955998413684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1930106743203302082/posts/default/7281616955998413684'/><link rel='alternate' type='text/html' href='http://vidyagamedev.blogspot.com/2011/03/hawken-development.html' title='Hawken Development'/><author><name>Darkkal</name><uri>http://www.blogger.com/profile/17122013759877241303</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>18</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1930106743203302082.post-3251874710488341856</id><published>2011-03-30T19:41:00.000-07:00</published><updated>2011-03-30T20:22:28.512-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Tutorials"/><title type='text'>Collection of Websites for Gamemaking in general</title><content type='html'>I have here a list of websites that may be use to some game makers out there&lt;br /&gt;
&lt;br /&gt;
This is a list that is &lt;strong&gt;un-organized&lt;/strong&gt; and may not be of use to you, but is good to check out.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;text-shadow: red 1px 1px 1px;&quot;&gt;Francesco&#39;s knick-knacks&lt;/span&gt;&lt;br /&gt;
&lt;a class=&quot;bbc_link new_win&quot; href=&quot;http://itaprogaming.free.fr/index.php?x=p&amp;amp;pag=50&quot; target=&quot;_blank&quot;&gt;http://itaprogaming.free.fr/index.php?x=p&amp;amp;pag=50&lt;/a&gt;&lt;br /&gt;
desc: This website hosts a Gameboy Advanced SDK. Its cool to check out, i made pong and ended up working on my GBA emu.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;text-shadow: red 1px 1px 1px;&quot;&gt;Aaron Stebner&#39;s Weblog&lt;/span&gt;&lt;br /&gt;
&lt;a class=&quot;bbc_link new_win&quot; href=&quot;http://blogs.msdn.com/b/astebner/&quot; target=&quot;_blank&quot;&gt;http://blogs.msdn.com/b/astebner/&lt;/a&gt;&lt;br /&gt;
desc: This blog by Aaron Stebner contains valuable information about how to do great things in XNA from the mind of a developer.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;text-shadow: red 1px 1px 1px;&quot;&gt;Blijbol&lt;/span&gt;&lt;br /&gt;
&lt;a class=&quot;bbc_link new_win&quot; href=&quot;http://www.blijbol.nl/en&quot; target=&quot;_blank&quot;&gt;http://www.blijbol.nl/en&lt;/a&gt;&lt;br /&gt;
desc:  A pretty good Game Maker developer, he has some useful plugins,  some-what useful programs, and some games to look at for reference.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;text-shadow: red 1px 1px 1px;&quot;&gt;Blue Rose Games&lt;/span&gt;&lt;br /&gt;
&lt;a class=&quot;bbc_link new_win&quot; href=&quot;http://www.bluerosegames.com/brg/default.aspx&quot; target=&quot;_blank&quot;&gt;http://www.bluerosegames.com/brg/default.aspx&lt;/a&gt;&lt;br /&gt;
desc:  Blue Rose Games has a great beginner tutorial for XNA on 2D and 3D game  programming, as well as Silverlight for those interested in MSN games.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;text-shadow: red 1px 1px 1px;&quot;&gt;Catlin&#39;s XNA Blog&lt;/span&gt;&lt;br /&gt;
&lt;a class=&quot;bbc_link new_win&quot; href=&quot;http://www.catalinzima.com/&quot; target=&quot;_blank&quot;&gt;http://www.catalinzima.com/&lt;/a&gt;&lt;br /&gt;
desc:  This XNA developer may be average, but has created some interesting  blogs about certain techniques in XNA from a beginner&#39;s perspective.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;text-shadow: red 1px 1px 1px;&quot;&gt;Metal Slug Sprites&lt;/span&gt;&lt;br /&gt;
&lt;a class=&quot;bbc_link new_win&quot; href=&quot;http://www.metalslugsprites.net/&quot; target=&quot;_blank&quot;&gt;http://www.metalslugsprites.net/&lt;/a&gt;&lt;br /&gt;
desc:  A sprite site I used when making a Metal Slug remake for Game Maker.  Contains most of the sprites seen in-game in .GIF form, as well as some  sprite sheets.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;text-shadow: red 1px 1px 1px;&quot;&gt;RB Whitaker&#39;s Wiki&lt;/span&gt;&lt;br /&gt;
&lt;a class=&quot;bbc_link new_win&quot; href=&quot;http://rbwhitaker.wikidot.com/xna-tutorials&quot; target=&quot;_blank&quot;&gt;http://rbwhitaker.wikidot.com/xna-tutorials&lt;/a&gt;&lt;br /&gt;
desc:  This is by far my favorite collection of XNA Tutorials; those that make  sense the most, and have taught me the basic fundamentals the best.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;text-shadow: red 1px 1px 1px;&quot;&gt;Riemers XNA Tutorial&lt;/span&gt;&lt;br /&gt;
&lt;a class=&quot;bbc_link new_win&quot; href=&quot;http://www.riemers.net/index.php&quot; target=&quot;_blank&quot;&gt;http://www.riemers.net/index.php&lt;/a&gt;&lt;br /&gt;
desc: If you have ever asked: &lt;blockquote class=&quot;bbc_standard_quote&quot;&gt;&lt;i&gt;&quot;How do you program terrain generation like in Worms or Minecraft&quot;&lt;/i&gt;&lt;/blockquote&gt;this may answer your question. These are also great beginner tutorials on 2D and 3D game programming in XNA.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;text-shadow: red 1px 1px 1px;&quot;&gt;Safari Books Online&lt;/span&gt;&lt;br /&gt;
&lt;a class=&quot;bbc_link new_win&quot; href=&quot;http://my.safaribooksonline.com/&quot; target=&quot;_blank&quot;&gt;http://my.safaribooksonline.com/&lt;/a&gt;&lt;br /&gt;
desc:  This website has thousands of e-books available for online view  (preview). Ive seen many programming e-books available on this website  such as the Mastering Unreal Technology (&lt;a class=&quot;bbc_link new_win&quot; href=&quot;http://my.safaribooksonline.com/9780768689006&quot; target=&quot;_blank&quot;&gt;http://my.safaribooksonline.com/9780768689006&lt;/a&gt;) series.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;text-shadow: red 1px 1px 1px;&quot;&gt;Sprite Database&lt;/span&gt;&lt;br /&gt;
&lt;a class=&quot;bbc_link new_win&quot; href=&quot;http://sdb.drshnaps.com/index.php&quot; target=&quot;_blank&quot;&gt;http://sdb.drshnaps.com/index.php&lt;/a&gt;&lt;br /&gt;
desc: This is an incredible sprite database. I am currently using it for a metroid remake (no, it&#39;s not going so well).&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;text-shadow: red 1px 1px 1px;&quot;&gt;The Video Game Name Generator&lt;/span&gt;&lt;br /&gt;
&lt;a class=&quot;bbc_link new_win&quot; href=&quot;http://norefuge.net/vgng/vgng.html&quot; target=&quot;_blank&quot;&gt;http://norefuge.net/vgng/vgng.html&lt;/a&gt;&lt;br /&gt;
desc: Obligatory video game name generator.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;text-shadow: red 1px 1px 1px;&quot;&gt;Tile Studio&lt;/span&gt;&lt;br /&gt;
&lt;a class=&quot;bbc_link new_win&quot; href=&quot;http://tilestudio.sourceforge.net/&quot; target=&quot;_blank&quot;&gt;http://tilestudio.sourceforge.net/&lt;/a&gt;&lt;br /&gt;
desc:  Never used it, but my artist says it is a great tool for creating tile  sheets for platformer games. Could also be possibly used in 2D RPG  games.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;text-shadow: red 1px 1px 1px;&quot;&gt;Unreal Development Kit (UDK)&lt;/span&gt;&lt;br /&gt;
&lt;a class=&quot;bbc_link new_win&quot; href=&quot;http://udk.com/&quot; target=&quot;_blank&quot;&gt;http://udk.com/&lt;/a&gt;&lt;br /&gt;
desc:  The Unreal Development Kit (UDK) is an outstanding developer&#39;s kit to  allow the developers to get past quite a few walls of development, and  can also bring 3D games to life. A very tough tool, but mastering it may  be the true start of your indie career. [/viraladvertisement]&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;text-shadow: red 1px 1px 1px;&quot;&gt;XNA Resources&lt;/span&gt;&lt;br /&gt;
&lt;a class=&quot;bbc_link new_win&quot; href=&quot;http://www.xnaresources.com/&quot; target=&quot;_blank&quot;&gt;http://www.xnaresources.com/&lt;/a&gt;&lt;br /&gt;
desc: Yet another website dedicated to starters on XNA.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;text-shadow: red 1px 1px 1px;&quot;&gt;XNA Tutorial&lt;/span&gt;&lt;br /&gt;
&lt;a class=&quot;bbc_link new_win&quot; href=&quot;http://www.xnatutorial.com/&quot; target=&quot;_blank&quot;&gt;http://www.xnatutorial.com/&lt;/a&gt;&lt;br /&gt;
desc: Yet another BLOG dedicated to starters on XNA.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;text-shadow: red 1px 1px 1px;&quot;&gt;XNAWiki&lt;/span&gt;&lt;br /&gt;
&lt;a class=&quot;bbc_link new_win&quot; href=&quot;http://www.xnawiki.com/index.php?title=Main_Page&quot; target=&quot;_blank&quot;&gt;http://www.xnawiki.com/index.php?title=Main_Page&lt;/a&gt;&lt;br /&gt;
desc:  This is an extremely crucial wiki for those XNA developers. It can be  used as a resource guide when programming any game in XNA.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;text-shadow: red 1px 1px 1px;&quot;&gt;raven67854&#39;s Youtube UDK tutorials&lt;/span&gt;&lt;br /&gt;
&lt;a class=&quot;bbc_link new_win&quot; href=&quot;http://www.youtube.com/user/raven67854#p/c/0C836EF4FD8D91B8/0/OcJ3J2Yf_Wg&quot; target=&quot;_blank&quot;&gt;http://www.youtube.com/user/raven67854#p/c/0C836EF4FD8D91B8/0/OcJ3J2Yf_Wg&lt;/a&gt;&lt;br /&gt;
desc:  Most guides on the UDK can be confusing and troublesome to the common  beginner. This youtube series can be argued as a godsend to those  struggling to learn the UDK.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;text-shadow: red 1px 1px 1px;&quot;&gt;FlatRedBall&lt;/span&gt;&lt;br /&gt;
&lt;a class=&quot;bbc_link new_win&quot; href=&quot;http://www.flatredball.com/frb/blog/&quot; target=&quot;_blank&quot;&gt;http://www.flatredball.com/frb/blog/&lt;/a&gt;&lt;br /&gt;
desc: FlatRedBall is a great 2D engine used in XNA, and can simplify the process of many 2D games.</content><link rel='replies' type='application/atom+xml' href='http://vidyagamedev.blogspot.com/feeds/3251874710488341856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vidyagamedev.blogspot.com/2011/03/collection-of-websites-for-gamemaking.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1930106743203302082/posts/default/3251874710488341856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1930106743203302082/posts/default/3251874710488341856'/><link rel='alternate' type='text/html' href='http://vidyagamedev.blogspot.com/2011/03/collection-of-websites-for-gamemaking.html' title='Collection of Websites for Gamemaking in general'/><author><name>Darkkal</name><uri>http://www.blogger.com/profile/17122013759877241303</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1930106743203302082.post-2739072364868913931</id><published>2011-03-30T15:06:00.000-07:00</published><updated>2012-04-30T19:56:09.308-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Tutorials"/><title type='text'>Setting up a 2D Game Camera in XNA</title><content type='html'>&lt;span style=&quot;font-size: small;&quot;&gt;I actually took some of the code from a few websites, but this shit was incredibly hard to find, so i put together what worked for me for you guys :3c&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;The Camera2D class&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;-----------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;using Microsoft.Xna.Framework;&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;using Microsoft.Xna.Framework.Graphics;&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class Camera2d&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected float _zoom; // Camera Zoom&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Matrix _transform; // Matrix Transform&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Vector2 _pos; // Camera Position&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected float _rotation; // Camera Rotation&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Camera2d()&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _zoom = 1.0f;&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _rotation = 0.0f;&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _pos = Vector2.Zero;&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Sets and gets zoom&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public float Zoom&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return _zoom; }&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set { _zoom = value; if (_zoom &amp;lt; 0.1f) _zoom = 0.1f; } // Negative zoom will flip image&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public float Rotation&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return _rotation; }&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set { _rotation = value; }&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Auxiliary function to move the camera&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Move(Vector2 amount)&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _pos += amount;&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Get set position&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Vector2 Pos&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return _pos; }&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set { _pos = value; }&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Matrix get_transformation(GraphicsDevice graphicsDevice)&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _transform =&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Thanks to o KB o for this solution&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Matrix.CreateTranslation(new Vector3(-_pos.X, -_pos.Y, 0)) *&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Matrix.CreateRotationZ(Rotation) *&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Matrix.CreateScale(new Vector3(Zoom, Zoom, 0)) *&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Matrix.CreateTranslation(new Vector3(/*Application Window Width*/ * 0.5f, &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;/*Application Window Height*/&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt; * 0.5f, 0));&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return _transform;&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;-----------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;Then you implement it as follows&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;-----------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;Camera2d camera = new Camera2d();&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;camera.Pos = //some vector2 that represents a position&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;camera.zoom = //some float that represents a zoom. anything &amp;gt; 1 will be &quot;zoomed in&quot; and anything &amp;lt; 1 will be &quot;zoomed out&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;-----------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;Then when you go to call the spritebatch.Begin function, you use the following overload&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;-----------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;spriteBatch.Begin(&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SpriteSortMode.Immediate,&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BlendState.AlphaBlend,&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; null,&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; null,&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; null,&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; null,&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; camera.get_transformation(this.GraphicsDevice));&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;-----------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;that should be it :D&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;NOTE:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;Some things like the mouse position from Mouse.GetState() is not relative to the camera, so you have to add some logic like &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;-----------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;mouseLoc = new Vector2(curMouse.X, curMouse.Y) + (camera.Pos - new Vector2(ScreenWidth / 2, ScreenHeight / 2));&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;-----------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: small;&quot;&gt;to get the mouse position relative to the camera.&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://vidyagamedev.blogspot.com/feeds/2739072364868913931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vidyagamedev.blogspot.com/2011/03/setting-up-2d-game-camera-in-xna.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1930106743203302082/posts/default/2739072364868913931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1930106743203302082/posts/default/2739072364868913931'/><link rel='alternate' type='text/html' href='http://vidyagamedev.blogspot.com/2011/03/setting-up-2d-game-camera-in-xna.html' title='Setting up a 2D Game Camera in XNA'/><author><name>Darkkal</name><uri>http://www.blogger.com/profile/17122013759877241303</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1930106743203302082.post-6737010071999083399</id><published>2011-03-27T16:16:00.000-07:00</published><updated>2011-03-30T20:22:28.513-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Tutorials"/><title type='text'>Optimizing your Game Code: Using Pools</title><content type='html'>Using pools is a standard technique in game programming. If you ever played a Real-Time Strategy game (RTS) like Starcraft, Halo Wars, Age of Empires, etc.. then you have experienced an &quot;object pool&quot;.&lt;br /&gt;
&lt;br /&gt;
In Starcraft, you construct a base, manage an economy, and train military units to tear down the other opponent until either all their buildings are gone, or until they leave. Each unit you train has a designated &quot;food usage&quot;, meaning that you may create a unit until you run out of &quot;supply&quot;, or your food count is lower than the required food usage. To manage this, you create supply buildings (or in zerg&#39;s case, Overlords) to increase your supply. However, you may only have a maximum of 200 food. This is called an object pool.&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://upload.wikimedia.org/wikipedia/en/2/2f/Zerg_colony_%28StarCraft%29.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; src=&quot;http://upload.wikimedia.org/wikipedia/en/2/2f/Zerg_colony_%28StarCraft%29.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;In Starcraft, you may use a maximum of 200 food. When a unit dies, it no longer uses that food.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
You can think of the object pool as an array. You have this array of 10 circles as such:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;Circle[] circles = new Circle[10];&lt;/div&gt;&lt;br /&gt;
Now, say you want to use 3 spots in the array to create 3 circles, so you would type:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;for(int x&amp;nbsp; = 0; x &amp;lt; 3; x++)&lt;/div&gt;&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; circles[x] = new Circle(3.4f); // 3.4f would be the &quot;radius&quot; in this case&lt;/div&gt;&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;}&lt;/div&gt;&lt;br /&gt;
Now say you wanted more than three, you would simply designate which &quot;empty circle&quot; you want to use to contruct a new one.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;circle[6] = new circle(4.2f);&lt;/div&gt;&lt;br /&gt;
But what if you want to &quot;destroy&quot; one of these circles? Well, when using pools, you don&#39;t actually &quot;destroy&quot; an object. You simply just change its properties to make it what you call empty.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;circle[3].radius = 0;&lt;/div&gt;&lt;br /&gt;
Or you can create a boolean variable &quot;IsActive&quot; to let the program know if it is active or not.&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;circle[3].IsActive = false;&lt;/div&gt;&lt;br /&gt;
When you have a property like this, you can make a constantly running function that runs through all the objects (circles, in this case), check if it is active, if not, do not use (in video game design, you can tell the engine not to render the &quot;circles&quot; that are inactive)&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;void CheckCircles()&lt;/div&gt;&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(int x = 0; x &amp;lt; circles.length; x++&lt;/div&gt;&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/div&gt;&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(circles[x].IsActive)&lt;/div&gt;&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; circles[x].Draw(); //If the circle IS active, then the engine will draw it on the screen&lt;/div&gt;&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/div&gt;&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;}&lt;/div&gt;&lt;br /&gt;
The reason why &quot;pooling&quot; is standard practice is because it is an efficient way to handle multiple objects. Why would you want your game to constantly create hundreds, even thousands of objects, and then just get rid of the memory? Why not just re-use those objects? If you have any questions about pooling, please post in the comments.</content><link rel='replies' type='application/atom+xml' href='http://vidyagamedev.blogspot.com/feeds/6737010071999083399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vidyagamedev.blogspot.com/2011/03/optimizing-your-game-code-using-pools.html#comment-form' title='54 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1930106743203302082/posts/default/6737010071999083399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1930106743203302082/posts/default/6737010071999083399'/><link rel='alternate' type='text/html' href='http://vidyagamedev.blogspot.com/2011/03/optimizing-your-game-code-using-pools.html' title='Optimizing your Game Code: Using Pools'/><author><name>Darkkal</name><uri>http://www.blogger.com/profile/17122013759877241303</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>54</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1930106743203302082.post-2387097537438490028</id><published>2011-03-06T16:56:00.000-08:00</published><updated>2011-03-30T20:22:28.513-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Tutorials"/><title type='text'>Automatically increment revision with each build in Microsoft Visual Studio 2005+</title><content type='html'>This works in MVS 2005, 2008, 2010, so far what i&#39;ve tested.&lt;br /&gt;
&lt;br /&gt;
In your project, go into the AssemblyInfo.cs of the project you want to edit, located under:&lt;br /&gt;
&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;PROJECT NAME -&amp;gt; Properties -&amp;gt; Assemblyinfo.cs&lt;/div&gt;&lt;br /&gt;
and change the line:&lt;br /&gt;
&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;[assembly: AssemblyVersion(&quot;1.0.0.0&quot;)]&amp;nbsp;&lt;/div&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;to &lt;i&gt;&amp;nbsp;&lt;/i&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;[assembly: AssemblyVersion(&quot;1.0.*&quot;)] &lt;/div&gt;&lt;br /&gt;
This will give you a more accurate version number, based on the amount of changes and the amount of builds.&lt;br /&gt;
&lt;br /&gt;
In my earlier post, you can see some made up number i used for my project build in the top left. This is the result after changing the assembly info:&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;https://lh6.googleusercontent.com/-c4U0aXfL2Ek/TXQtT2_SW2I/AAAAAAAAAAM/nlQXiCD1h6s/s1600/Untitled.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;187&quot; src=&quot;https://lh6.googleusercontent.com/-c4U0aXfL2Ek/TXQtT2_SW2I/AAAAAAAAAAM/nlQXiCD1h6s/s320/Untitled.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vidyagamedev.blogspot.com/feeds/2387097537438490028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://vidyagamedev.blogspot.com/2011/03/automatically-increment-revision-with.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1930106743203302082/posts/default/2387097537438490028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1930106743203302082/posts/default/2387097537438490028'/><link rel='alternate' type='text/html' href='http://vidyagamedev.blogspot.com/2011/03/automatically-increment-revision-with.html' title='Automatically increment revision with each build in Microsoft Visual Studio 2005+'/><author><name>Darkkal</name><uri>http://www.blogger.com/profile/17122013759877241303</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh6.googleusercontent.com/-c4U0aXfL2Ek/TXQtT2_SW2I/AAAAAAAAAAM/nlQXiCD1h6s/s72-c/Untitled.png" height="72" width="72"/><thr:total>1</thr:total></entry></feed>