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

<channel>
	<title>ClickPopMedia &#187; Collision Detection</title>
	<atom:link href="http://www.clickpopmedia.com/tag/collision-detection/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.clickpopmedia.com</link>
	<description>ClickPopMedia is a great little design and illustration firm.</description>
	<lastBuildDate>Thu, 03 Dec 2009 17:28:23 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Collision Detection and Game Design</title>
		<link>http://www.clickpopmedia.com/2008/07/07/collision-detection-and-game-design/</link>
		<comments>http://www.clickpopmedia.com/2008/07/07/collision-detection-and-game-design/#comments</comments>
		<pubDate>Mon, 07 Jul 2008 23:58:21 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Paul]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Asteroids]]></category>
		<category><![CDATA[Collision Detection]]></category>
		<category><![CDATA[Game Development]]></category>

		<guid isPermaLink="false">http://www.clickpopmedia.com/?p=353</guid>
		<description><![CDATA[

This is the second step in my series of tutorial, the first being Easy Keyboard Controls and Game Design. In this tutorial I will be building on what we already have, adding asteroids and the ability to crash into them.
I&#8217;ve made a few minor changes to the original code and graphics since the last tutorial, [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="550" height="400" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.clickpopmedia.com/wp-content/uploads/2008/07/asteroids.swf" /><embed type="application/x-shockwave-flash" width="550" height="400" src="http://www.clickpopmedia.com/wp-content/uploads/2008/07/asteroids.swf"></embed></object></p>
<p style="text-align: left;">
This is the second step in my series of tutorial, the first being <a href="http://www.clickpopmedia.com/2008/06/25/easy-keyboard-controls-and-game-design/">Easy Keyboard Controls and Game Design</a>. In this tutorial I will be building on what we already have, adding asteroids and the ability to crash into them.<br />
<span id="more-353"></span>I&#8217;ve made a few minor changes to the original code and graphics since the last tutorial, but nothing big.</p>
<p>So I create a MovieClip with 3 frames and a different asteroid shape on each frame (you could have more or less if you wanted).  I give the asteroids their own class since each is going to have to move independently.</p>
<div class="dean_ch" style="white-space: wrap;"><span class="kw3">public</span> <span class="kw3">static</span> const LARGE:<span class="kw3">String</span> = <span class="st0">&quot;large&quot;</span>;<br />
<span class="kw3">public</span> <span class="kw3">static</span> const MEDIUM:<span class="kw3">String</span> = <span class="st0">&quot;medium&quot;</span>;<br />
<span class="kw3">public</span> <span class="kw3">static</span> const SMALL:<span class="kw3">String</span> = <span class="st0">&quot;small&quot;</span>;</p>
<p><span class="kw3">public</span> <span class="kw2">var</span> speedX:<span class="kw3">Number</span>;<br />
<span class="kw3">public</span> <span class="kw2">var</span> speedY:<span class="kw3">Number</span>;<br />
<span class="kw3">public</span> <span class="kw2">var</span> <span class="kw3">size</span>:<span class="kw3">String</span>;<br />
&#8230;<br />
<span class="kw3">public</span> <span class="kw2">function</span> Move<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">this</span>.<span class="me1">x</span> += speedX;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">this</span>.<span class="me1">y</span> += speedY;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">this</span>.<span class="me1">x</span> &gt; <span class="nu0">550</span> + <span class="kw3">this</span>.<span class="kw3">width</span>/<span class="nu0">2</span><span class="br0">&#41;</span> <span class="kw3">this</span>.<span class="me1">x</span> = -<span class="kw3">this</span>.<span class="kw3">width</span>/<span class="nu0">2</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">this</span>.<span class="me1">x</span> &lt; -<span class="kw3">this</span>.<span class="kw3">width</span>/<span class="nu0">2</span><span class="br0">&#41;</span> <span class="kw3">this</span>.<span class="me1">x</span> = <span class="nu0">550</span> + <span class="kw3">this</span>.<span class="kw3">width</span>/<span class="nu0">2</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">this</span>.<span class="me1">y</span> &gt; <span class="nu0">400</span> + <span class="kw3">this</span>.<span class="kw3">height</span>/<span class="nu0">2</span><span class="br0">&#41;</span> <span class="kw3">this</span>.<span class="me1">y</span> = -<span class="kw3">this</span>.<span class="kw3">height</span>/<span class="nu0">2</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">this</span>.<span class="me1">y</span> &lt; -<span class="kw3">this</span>.<span class="kw3">height</span>/<span class="nu0">2</span><span class="br0">&#41;</span> <span class="kw3">this</span>.<span class="me1">y</span> = <span class="nu0">400</span> + <span class="kw3">this</span>.<span class="kw3">height</span>/<span class="nu0">2</span>;<br />
<span class="br0">&#125;</span></div>
<p>What I&#8217;ve done here is give my Asteroid class X and Y speed properties that work with the <strong>Move()</strong> method for motion.  I intend to call the <strong>Move()</strong> method for each asteroid in the <strong>MainLoop()</strong> function.</p>
<p>On creation (in the constructor) I want to know if this asteroid is actually a piece of a larger asteroid or not.  If it is I&#8217;m going to be passing it the base asteroid that this one is breaking off of to use it&#8217;s X:Y coordinates and speed, plus to know what size to make the new asteroid.</p>
<p>Now back to the <strong>Main</strong> class (in the <a href="http://www.clickpopmedia.com/2008/06/25/easy-keyboard-controls-and-game-design/">last tutorial</a> I called this the <strong>Asteroids</strong> class but changed it to <strong>Main</strong> since I wanted an <strong>Asteroid</strong> class).</p>
<p>We need to keep track of our asteroids.  To do that we will use an <strong>Array</strong>.  We will add this to the <strong>Main</strong> constructor:</p>
<div class="dean_ch" style="white-space: wrap;"><span class="kw3">public</span> <span class="kw2">function</span> Main<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; dCount = <span class="nu0">0</span>;<br />
&#8230;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="me1">refresh_tf</span>.<span class="me1">addEventListener</span><span class="br0">&#40;</span>MouseEvent.<span class="me1">MOUSE_UP</span>, resetGame<span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; asteroids = <span class="kw2">new</span> <span class="kw3">Array</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span><span class="kw2">var</span> i:<span class="kw3">int</span> = <span class="nu0">0</span>; i&lt;<span class="nu0">6</span>; i++<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; asteroids.<span class="kw3">push</span><span class="br0">&#40;</span><span class="kw2">new</span> Asteroid<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">stage</span>.<span class="me1">addChild</span><span class="br0">&#40;</span>asteroids<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
<p>This is just adding 6 asteroids to the stage and giving a click event to a reset button I decided to add.<br />
<strong>dCount</strong> stands for Death Count with an obvious purpose.</p>
<p>The <strong>resetGame()</strong> function is just resetting all the properties to the default.  I still have to make sure to remove all the asteroids before adding all new ones, but that&#8217;s it.</p>
<p>I moved the contents of the <strong>MainLoop()</strong> from the <a href="http://www.clickpopmedia.com/2008/06/25/easy-keyboard-controls-and-game-design/">previous tutorial</a> into a function called <strong>shipControl()</strong> which is now being called from the new <strong>MainLoop()</strong>;</p>
<p>Our revised <strong>MainLoop()</strong> method is as follows:</p>
<div class="dean_ch" style="white-space: wrap;">protected <span class="kw2">function</span> MainLoop<span class="br0">&#40;</span><span class="kw3">e</span>:TimerEvent<span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span><span class="kw2">var</span> i <span class="kw1">in</span> asteroids<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; asteroids<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">Move</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>dead<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; deathTime&#8211;;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>deathTime &lt;=<span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dead = <span class="kw2">false</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; invincibleTime = <span class="nu0">150</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; invincible = <span class="kw2">true</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addChild<span class="br0">&#40;</span>ship_mc<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; shipControl<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>!invincible<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; collisionCheck<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">e</span>.<span class="me1">currentTarget</span>.<span class="me1">currentCount</span>%<span class="nu0">10</span> == <span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ship_mc.<span class="kw3">visible</span> = <span class="br0">&#40;</span>ship_mc.<span class="kw3">visible</span><span class="br0">&#41;</span>? <span class="kw2">false</span>: <span class="kw2">true</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; invincibleTime&#8211;;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>invincibleTime &lt;= <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ship_mc.<span class="kw3">visible</span> = <span class="kw2">true</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; invincible = <span class="kw2">false</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
<p>These nested <strong>if..else</strong> statements are here to handle death and resurrection (RIGHT ON!).</p>
<p>So we have our asteroids flying about the screen, but we have yet to make them destroy your ship.  You should notice above the call for to a method call <strong>collisionCheck()</strong>;<br />
Here is that function now:</p>
<div class="dean_ch" style="white-space: wrap;">protected <span class="kw2">function</span> collisionCheck<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> p1:Point = <span class="kw2">new</span> Point<span class="br0">&#40;</span>ship_mc.<span class="me1">p1</span>.<span class="me1">x</span>, ship_mc.<span class="me1">p1</span>.<span class="me1">y</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; p1 = ship_mc.<span class="kw3">localToGlobal</span><span class="br0">&#40;</span>p1<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> p2:Point = <span class="kw2">new</span> Point<span class="br0">&#40;</span>ship_mc.<span class="me1">p2</span>.<span class="me1">x</span>, ship_mc.<span class="me1">p2</span>.<span class="me1">y</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; p2 = ship_mc.<span class="kw3">localToGlobal</span><span class="br0">&#40;</span>p2<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> p3:Point = <span class="kw2">new</span> Point<span class="br0">&#40;</span>ship_mc.<span class="me1">p3</span>.<span class="me1">x</span>, ship_mc.<span class="me1">p3</span>.<span class="me1">y</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; p3 = ship_mc.<span class="kw3">localToGlobal</span><span class="br0">&#40;</span>p3<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> p4:Point = <span class="kw2">new</span> Point<span class="br0">&#40;</span>ship_mc.<span class="me1">p4</span>.<span class="me1">x</span>, ship_mc.<span class="me1">p4</span>.<span class="me1">y</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; p4 = ship_mc.<span class="kw3">localToGlobal</span><span class="br0">&#40;</span>p4<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> p5:Point = <span class="kw2">new</span> Point<span class="br0">&#40;</span>ship_mc.<span class="me1">p5</span>.<span class="me1">x</span>, ship_mc.<span class="me1">p5</span>.<span class="me1">y</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; p5 = ship_mc.<span class="kw3">localToGlobal</span><span class="br0">&#40;</span>p5<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span><span class="kw2">var</span> i <span class="kw1">in</span> asteroids<span class="br0">&#41;</span><span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="br0">&#40;</span>asteroids<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">hitTestPoint</span><span class="br0">&#40;</span>p1.<span class="me1">x</span>, p1.<span class="me1">y</span>, <span class="kw2">true</span><span class="br0">&#41;</span> ||<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; asteroids<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">hitTestPoint</span><span class="br0">&#40;</span>p2.<span class="me1">x</span>, p2.<span class="me1">y</span>, <span class="kw2">true</span><span class="br0">&#41;</span> ||<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; asteroids<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">hitTestPoint</span><span class="br0">&#40;</span>p3.<span class="me1">x</span>, p3.<span class="me1">y</span>, <span class="kw2">true</span><span class="br0">&#41;</span> ||<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; asteroids<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">hitTestPoint</span><span class="br0">&#40;</span>p4.<span class="me1">x</span>, p4.<span class="me1">y</span>, <span class="kw2">true</span><span class="br0">&#41;</span> ||<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; asteroids<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">hitTestPoint</span><span class="br0">&#40;</span>p5.<span class="me1">x</span>, p5.<span class="me1">y</span>, <span class="kw2">true</span><span class="br0">&#41;</span><span class="br0">&#41;</span> &amp;amp;&amp;amp; !dead<span class="br0">&#41;</span> <span class="br0">&#123;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; destroyShip<span class="br0">&#40;</span><span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; remove<span class="br0">&#40;</span>i<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
<p>Each asteroid does a <strong>hitTest</strong> with each point on my <strong>ship_mc</strong>.  It&#8217;s important that I&#8217;m using <strong>hitTestPoint()</strong> here because it is capable of checking based on the actual shape of the movie clip.  A regular <strong>hitTest</strong> between two <strong>MovieClips</strong> will only check to see if the bounding boxes are overlapping&#8230;  in our case that could still be quite 20 pixels or more away from an actual collision.  This is exactly what makes realistic 2D physics so difficult in ActionScript.</p>
<p>Anyways, the Hit Test may be a little buggy in some cases, but <strong>hitTestPoint</strong> works pretty well for us here.  After we detect a hit of course we have to destroy the ship and asteroid and set the death timer.  the <strong>destroyShip()</strong> function is trivial enough, but I would like to take a quick look at a line from the remove() method:</p>
<div class="dean_ch" style="white-space: wrap;"><span class="kw3">stage</span>.<span class="me1">addChild</span><span class="br0">&#40;</span>asteroids<span class="br0">&#91;</span>asteroids.<span class="kw3">push</span><span class="br0">&#40;</span><span class="kw2">new</span> Asteroid<span class="br0">&#40;</span>asteroids<span class="br0">&#91;</span>num<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="nu0">-1</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
<p>I really just need to explain how this slightly complicated jumble works.  Reading this from the inner most parenthases out;</p>
<p>We are creating a new Asteroid object (passing it our parent asteroid that has just been destroyed).<br />
<strong>new Asteroid(asteroids[num])</strong></p>
<p>We add that Asteroid object to the end of our asteroids Array which is returning the new length of the Array.<br />
<strong>asteroids.push(&#8230;)</strong></p>
<p>We then use that new length (minus 1) to add our newest asteroid to the stage.<br />
<strong>stage.addChild(asteroids[...-1]);</strong></p>
<p>Eh, see now?  Collision detection is easy!  I think my next installment might be a little more interesting when I add levels, lives, and a scoring system.</p>
<p>&#8230;  No bullets you ask?  Well that&#8217;s just an extension of what I&#8217;ve already written here right?  The only extra thing you have to remember is that the bullets have a limited lifespan.</p>
<p>If you are still confused and can&#8217;t do it on your own (if you want to <em>learn</em> you really aught to at least try) then you can always check out the finished source when it&#8217;s released.</p>
<p>The source code for the example in this tutorial can be found here: <a href="http://www.clickpopmedia.com/wp-content/uploads/2008/07/asteroidsv2source.rar">Asteroids &#8211; V2 Source</a></p>
<p><a href="http://www.clickpopmedia.com/2008/06/25/easy-keyboard-controls-and-game-design/">&lt; Lesson 1: Easy Keyboard Controls and Game Design</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.clickpopmedia.com/2008/07/07/collision-detection-and-game-design/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

