Copy link to clipboard
Copied
I was wondering if anyone knows where to adjust the script and add a player being hit by the enemy causing player death and ending game. Player =AAGun Enemy= Airplane.
package {
import flash.display.*;
import flash.events.*;
import flash.utils.Timer;
import flash.text.TextField;
public class AirRaid extends MovieClip {
private var aagun:AAGun;
private var airplanes:Array;
private var bullets:Array;
public var leftArrow, rightArrow:Boolean;
private var nextPlane:Timer;
private var shotsLeft:int;
private var shotsHit:int;
public function startAirRaid() {
// init score
shotsLeft = 10000;
shotsHit = 0;
showGameScore();
// create gun
aagun = new AAGun();
addChild(aagun);
// create object arrays
airplanes = new Array();
bullets = new Array();
// listen for keyboard
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownFunction);
stage.addEventListener(KeyboardEvent.KEY_UP,keyUpFunction);
// look for collisions
addEventListener(Event.ENTER_FRAME,checkForHits);
// start planes flying
setNextPlane();
}
public function setNextPlane() {
nextPlane = new Timer(1000+Math.random()*1000,1);
nextPlane.addEventListener(TimerEvent.TIMER_COMPLETE,newPlane);
nextPlane.start();
}
public function newPlane(event:TimerEvent) {
// random side, speed and altitude
if (Math.random() > .5) {
var side:String = "down";
} else {
side = "down";
}
var longitude:Number = Math.random()*50+20;
var speed:Number = Math.random()*300+300;
// create plane
var p:Airplane = new Airplane(side,speed,longitude);
addChild(p);
airplanes.push(p);
// set time for next plane
setNextPlane();
}
// check for collisions
public function checkForHits(event:Event) {
for(var bulletNum:int=bullets.length-1;bulletNum>=0;bulletNum--){
for (var airplaneNum:int=airplanes.length-1;airplaneNum>=0;airplaneNum--) {
if (bullets[bulletNum].hitTestObject(airplanes[airplaneNum])) {
airplanes[airplaneNum].planeHit();
bullets[bulletNum].deleteBullet();
shotsHit++;
showGameScore();
break;
}
}
}
if ((shotsLeft == 0) && (bullets.length == 0)) {
endGame();
}
}
// key pressed
public function keyDownFunction(event:KeyboardEvent) {
if (event.keyCode == 37) {
leftArrow = true;
} else if (event.keyCode == 39) {
rightArrow = true;
} else if (event.keyCode == 32) {
fireBullet();
}
}
// key lifted
public function keyUpFunction(event:KeyboardEvent) {
if (event.keyCode == 37) {
leftArrow = false;
} else if (event.keyCode == 39) {
rightArrow = false;
}
}
// new bullet created
public function fireBullet() {
if (shotsLeft <= 0) return;
var b:Bullet = new Bullet(aagun.x,aagun.y,-300);
addChild(b);
bullets.push(b);
shotsLeft--;
showGameScore();
}
public function showGameScore() {
showScore.text = String("Score: "+shotsHit);
showShots.text = String("Shots Left: "+shotsLeft);
}
// take a plane from the array
public function removePlane(plane:Airplane) {
for(var i in airplanes) {
if (airplanes == plane) {
airplanes.splice(i,1);
break;
}
}
}
// take a bullet from the array
public function removeBullet(bullet:Bullet) {
for(var i in bullets) {
if (bullets == bullet) {
bullets.splice(i,1);
break;
}
}
}
// game is over, clear movie clips
public function endGame() {
// remove planes
for(var i:int=airplanes.length-1;i>=0;i--) {
airplanes.deletePlane();
}
airplanes = null;
aagun.deleteGun();
aagun = null;
stage.removeEventListener(KeyboardEvent.KEY_DOWN,keyDownFunction);
stage.removeEventListener(KeyboardEvent.KEY_UP,keyUpFunction);
removeEventListener(Event.ENTER_FRAME,checkForHits);
nextPlane.stop();
nextPlane = null;
gotoAndStop("gameover");
}
}
}
Hi, James!
Update checkForHits() with the lines from 18 - 25 like this:
...public function checkForHits(event: Event)
{
for (var bulletNum: int = bullets.length - 1; bulletNum >= 0; bulletNum--)
{
for (var airplaneNum: int = airplanes.length - 1; airplaneNum >= 0; airplaneNum--)
{
if (bullets[bulletNum].hitTestObject(airplanes[airplaneNum]))
{
airplanes[airplaneNum].planeHit();
bullets[bulletNum].deleteBullet();
sho
Copy link to clipboard
Copied
looks like this is where you're detecting a bullet vs plane:
if (bullets[bulletNum].hitTestObject(airplanes[airplaneNum])) {
airplanes[airplaneNum].planeHit();
bullets[bulletNum].deleteBullet();
shotsHit++;
showGameScore();
break;
}
Copy link to clipboard
Copied
Yeah but I was going for something more like if the enemy plane was to collide into the players AAGun and it caused the player death and ended the game.
Copy link to clipboard
Copied
so just identify AAGun with a unique ID and
make a condition with it.
Copy link to clipboard
Copied
I thought I fixed it but it came up with some new errors
package {
import flash.display.*;
import flash.events.*;
import flash.utils.Timer;
import flash.text.TextField;
import flash.utils.getTimer;
public class AirRaid extends MovieClip {
private var aagun:AAGun;
private var airplanes:Array;
private var bullets:Array;
public var leftArrow, rightArrow:Boolean;
private var nextPlane:Timer;
private var shotsLeft:int;
private var shotsHit:int;
public function startAirRaid() {
// init score
shotsLeft = 10000;
shotsHit = 0;
showGameScore();
// create gun
aagun = new AAGun();
addChild(aagun);
// create object arrays
airplanes = new Array();
bullets = new Array();
// listen for keyboard
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownFunction);
stage.addEventListener(KeyboardEvent.KEY_UP,keyUpFunction);
// look for collisions
addEventListener(Event.ENTER_FRAME,checkForHits);
// start planes flying
setNextPlane();
}
public function setNextPlane() {
nextPlane = new Timer(1000+Math.random()*1000,1);
nextPlane.addEventListener(TimerEvent.TIMER_COMPLETE,newPlane);
nextPlane.start();
}
public function newPlane(event:TimerEvent) {
// random side, speed and altitude
if (Math.random() > .5) {
var side:String = "down";
} else {
side = "down";
}
var longitude:Number = Math.random()*50+20;
var speed:Number = Math.random()*300+300;
// create plane
var p:Airplane = new Airplane(side,speed,longitude);
addChild(p);
airplanes.push(p);
// set time for next plane
setNextPlane();
}
// check for collisions
public function checkCollisions() {
for (var airplaneNum:int=airplanes.length-1;airplaneNum>=0;airplanenum--) {
for (var aagunNum: int= aagun.length-1; aagunNum>=0 ; aagunNum--) {
if (airplanes[airplaneNum].hitTestObject(aagun[aagunNum])) {
endGame();
}
}
}
public function checkForHits(event:Event) {
for(var bulletNum:int=bullets.length-1;bulletNum>=0;bulletNum--){
for (var airplaneNum:int=airplanes.length-1;airplaneNum>=0;airplaneNum--) {
if (bullets[bulletNum].hitTestObject(airplanes[airplaneNum])) {
airplanes[airplaneNum].planeHit();
bullets[bulletNum].deleteBullet();
shotsHit++;
showGameScore();
break;
}
}
}
if ((shotsLeft == 0) && (bullets.length == 0)) {
endGame();
}
}
// key pressed
public function keyDownFunction(event:KeyboardEvent) {
if (event.keyCode == 37) {
leftArrow = true;
} else if (event.keyCode == 39) {
rightArrow = true;
} else if (event.keyCode == 32) {
fireBullet();
}
}
// key lifted
public function keyUpFunction(event:KeyboardEvent) {
if (event.keyCode == 37) {
leftArrow = false;
} else if (event.keyCode == 39) {
rightArrow = false;
}
}
// new bullet created
public function fireBullet() {
if (shotsLeft <= 0) return;
var b:Bullet = new Bullet(aagun.x,aagun.y,-300);
addChild(b);
bullets.push(b);
shotsLeft--;
showGameScore();
}
public function showGameScore() {
showScore.text = String("Score: "+shotsHit);
showShots.text = String("Shots Left: "+shotsLeft);
}
// take a plane from the array
public function removePlane(plane:Airplane) {
for(var i in airplanes) {
if (airplanes == plane) {
airplanes.splice(i,1);
break;
}
}
}
// take a bullet from the array
public function removeBullet(bullet:Bullet) {
for(var i in bullets) {
if (bullets == bullet) {
bullets.splice(i,1);
break;
}
}
}
// game is over, clear movie clips
public function endGame() {
// remove planes
for(var i:int=airplanes.length-1;i>=0;i--) {
airplanes.deletePlane();
}
airplanes = null;
aagun.deleteGun();
aagun = null;
stage.removeEventListener(KeyboardEvent.KEY_DOWN,keyDownFunction);
stage.removeEventListener(KeyboardEvent.KEY_UP,keyUpFunction);
removeEventListener(Event.ENTER_FRAME,checkForHits);
nextPlane.stop();
nextPlane = null;
gotoAndStop("gameover");
}
}
}
Copy link to clipboard
Copied
Hi, James!
Update checkForHits() with the lines from 18 - 25 like this:
public function checkForHits(event: Event)
{
for (var bulletNum: int = bullets.length - 1; bulletNum >= 0; bulletNum--)
{
for (var airplaneNum: int = airplanes.length - 1; airplaneNum >= 0; airplaneNum--)
{
if (bullets[bulletNum].hitTestObject(airplanes[airplaneNum]))
{
airplanes[airplaneNum].planeHit();
bullets[bulletNum].deleteBullet();
shotsHit++;
showGameScore();
break;
}
}
}
for (airplaneNum = airplanes.length - 1; airplaneNum >= 0; airplaneNum--)
{
if (aagun.hitTestObject(airplanes[airplaneNum]))
{
endGame();
break;
}
}
if ((shotsLeft == 0) && (bullets.length == 0))
{
endGame();
}
}
I hope it helps!
Copy link to clipboard
Copied
Thank you! Was close to solving it myself but this really helped tidy it up!
Copy link to clipboard
Copied
does the aagun have an instance name?
if yes, use it. if no, assign one.