Ready to watch this entire course?
Become a member and get unlimited access to the entire skills library of over 4,900 courses, including more Developer and personalized recommendations.Start Your Free Trial Now
- View Offline
- Designing for mobile platforms
- Creating and optimizing game graphics
- Adding random movement and interactivity
- Moving players based on the accelerometer
- Using gestures
- Detecting collisions
- Implementing audio
- Adding scoring and levels
- Implementing a high score screen
- Publishing an app on both Mac and Windows
- Uploading to the Android Market
Skill Level Intermediate
Essential to almost any game is going to be collision detection, so determining when items hit each other or if they go off the screen--some sort of detection to see where items are at and then giving a result there. In this case, I need to determine when these UFOs hit the bottom, when they hit my player, and then also when my lasers hit the UFOs, otherwise known as tempEnemy. So those are the different sort of collision detections that I need to do.
All right, and what I am going to do is I am going to go ahead and just have some trace statements anytime some thing gets hit. You can see I already have some laser hits the top, so that's a sort of collision detection that's currently going on. So let's just go into my Actions panel, and as I scroll down, let's jump into my player, the movePlayer. We can see that. And in moveLaser, you can see this trace("laser hits top").
Well, I really don't need this. In fact, that's probably going to get in the way, so I'm just going to delete it. I already know it works; everything is fine. Let's scroll down a little further. We can see makeEnemies, then moveEnemies, and there is already a little bit of detection going on in here because I check to see when the tempEnemy is sort of on the sides and it sort of moves them back into the playable area. Well, I need to check to see if the tempEnemy hits the bottom as well.
So if the tempEnemy is sort of beyond the stage, so if its y-position is greater than the stages stageHeight, just like that, closing parentheses, two curly braces, and anything within these curly braces will go ahead and execute. Here's where I can put a trace statement. It says enemy scores. So the enemy hits the bottom, then the enemy scores, and that's what this statement does. So I check for the bottom. But I also need to check to see when the enemy hits the player, and that's going to be determined basically by performing a Hit Test Object.
So right down here in the Mobile Game folder, in my Code Snippets panel, Hit Test Object is what I want to add, so I'll double-click on that, and it adds this if statement. So if the tempEnemy hits the player, then do whatever you need to in here. So I'm going to just take this, and I'm going to cut it and move it back up to where I was, which was right in here. Now, I could add it right at about line 207, like that, but really, I want to condense this code a little better.
In fact, what I can do is within this if statement right here, I can add two pipes, two of these bars. Again, this basically means "or." So if the tempEnemy hits the bottom or the tempEnemy hits the player, and I'll just click and drag that with it selected, I can drag that on in there. If the tempEnemy hits the player, then also give the enemy a score as well. So that's basically combining two if statements. And in fact, I can just remove this if statement, including those comments. Great! That is actually going to work out just fine.
In fact, let's go ahead and do a test movie. Click Play. So it is sort of printing out in the Output panel, STATE_PLAY_GAME and it's kind of hard to see, but I actually can go ahead and close that SWF file and check out my Output panel and see where that's at. In fact, what I am going to do is I am just going to go ahead and click and drag this Output panel over here to the Library panel. Now, I can scroll through this much easier.
You can see it says enemy scores. So I did actually implement that correctly. Everything looks good, but the enemy is scoring plenty, and quite frankly, I need to score as the player. So that's the next step, but it gets a little more tricky because I need to determine when a laser hits the enemy, and both of these are basically an array of items. So I need to determine when one item in an array hits another item in another array, and I am going to do this by adding a code snippet and adding Array Item Collisions.
So it gets a little more advanced, but the concepts are still there, as you'll see. So I've double-clicked on that. We can see we have this function called testCollisions, and it does check for the collisions between items in an enemy's array and a laser's array, and again those are already created. It is just with this function, it actually checks for them. So in here, in this function, it creates two variables called tempEnemy and tempLaser, and right in here, if I hit Tab, I basically loop through the enemies array, and every item in that enemy's array becomes tempEnemy.
So it checks for all those items in there, and now they are known as tempEnemy, and it says hey! Loop through that and with these lasers, right in here, loop through the laser's array like that, and for every item in the laser's array, it is now known as tempLaser. So these are like the temporary names of each one of those. And then from there, I can determine when the tempEnemy hits the tempLaser. So I need to check for all the items in the enemy's array and all the items in the laser's array to determine when the enemy hits the laser, and sure enough, here's the trace statement, Laser hit tempEnemy.
And lastly, we have this break statement, which just stops this whole loop from happening. So these two words match up. Just go ahead and stop this for loop. So that's how you loop through two arrays, and then you check to see when one item hits another item. Last thing I need to do is just move this up. So I'll select all this code, and I'll cut it and move it on up. Under moveEnemies, again where I have that hitTestObject, about line 210, I can paste that in.
All right, so that's in the right location. testCollisions is in the right location. I will copy this name because I need to make sure this function gets called, and I want this to get called with everything else during the playGame function. So as you're moving those lasers, just go ahead and test for those collisions as well. All right, so there it is. Everything seems to be in place. Let's just do a test movie, and again we're just going to see some things happened in the Output panel.
So I'll click Play. We can see STATE_PLAY_GAME, and as I start hitting those tempEnemies, the laser hits them, then you see those trace statements. Let me go ahead and close that and take a look at the Output panel. You can see the enemy scores plenty as they hit the bottom, but you can see right up in here, Laser hit tempEnemy. So it is all actually working. I performed a couple different hit tests, not only with the position of items as the UFOs come down when they collide with the player, as well as when the laser collides with the UFO, which happened to be in arrays.
So the next step is to go ahead and add some explosions when these items collide.