Langerz82 Posted July 21, 2015 Share Posted July 21, 2015 I cant find the exact error as it's throwing:TypeError: sprite is undefined CarSmashEm2.htm:471:0// This mini-game is a derivative from the following examples.// http://phaser.io/examples/v2/p2-physics/accelerate-to-object// http://phaser.io/examples/v2/p2-physics/impact-events// Author: [email protected]// Date Created: 07/07/2015// TODO - When the AI health is low is running away to corners of screen.var game = new Phaser.Game(800, 600, Phaser.AUTO, 'phaser-example', { preload: preload, create: create, update: update, render: render});function preload() { game.load.atlas('generic', 'assets/virtualjoystick/skins/generic-joystick.png', 'assets/virtualjoystick/skins/generic-joystick.json'); game.load.image('background', 'assets/pics/roadBackground.png'); game.load.image('car', 'assets/sprites/car.png'); game.load.image('carEnemy', 'assets/sprites/carGreen.png'); game.load.image('medkit', 'assets/sprites/medkit.gif'); game.load.image('bullet', 'assets/misc/bullet0.png'); game.load.spritesheet('carExplode', 'assets/sprites/boom32wh12.png', 32, 32, 12);}var stick;var pad;var player;var cursors;var groupBullets;var groupCollect;var groupOpponents;var GameState = 0; // Playing.var opponentCount = 6; // Number of enemies.if (getUrlVars()["opponentCount"]) opponentCount = getUrlVars()["opponentCount"];var opponentsLeft = opponentCount;var allCars = []; // Used to keep track of targeting.// Speed Details.var playerRotationSpeed = 30;var playerThrust = 200;var opponentThrust = 100;var playerReverse = 100;var carMaxSpeed = 100;var opponentMaxSpeed = 100;var aiChaseCheckInterval = 5000;var spawnMedikitInterval = 10000;//var bulletInterval=250;var healthPackValue = 0.5;var bulletDamage = 0.05;var aiChaseCheck;var collectSpawnCheck;//var bulletTimeCheck;var bulletTime = 0var bulletCount = 20;// CREATE FUNCTION.function create() { game.world.setBounds(0, 0, 800, 600); // Set the background. game.stage.backgroundColor = '#aaaaaa'; var pic = game.add.tileSprite(0, 0, 800, 600, 'background'); pic.fixedToCamera = true; //pic.anchor.set(0.5); // Start World Physics game.physics.startSystem(Phaser.Physics.P2JS); game.physics.p2.setImpactEvents(true); game.physics.p2.restitution = 0.6; // Create Physic Groups var playerClGroup = game.physics.p2.createCollisionGroup(); var opponentClGroup = game.physics.p2.createCollisionGroup(); var collectClGroup = game.physics.p2.createCollisionGroup(); var bulletClGroup = game.physics.p2.createCollisionGroup(); game.physics.p2.updateBoundsCollisionGroup(); // Group Collect groupCollect = game.add.group(); groupCollect.enableBody = true; groupCollect.physicsBodyType = Phaser.Physics.P2JS; // Group Opponents groupOpponents = game.add.group(); groupOpponents.enableBody = true; groupOpponents.physicsBodyType = Phaser.Physics.P2JS; for (var i = 0; i < opponentCount; i++) { var enemy = groupenemys.create(game.world.randomX, game.world.randomY, 'carEnemy'); enemy.body.setCircle(16); enemy.body.setCollisionGroup(enemyClGroup); // enemy.body.collides([enemyClGroup, playerClGroup], enemyHitCar, this ); //enemy.body.collides(collectClGroup, carHitCollect, this ); //enemy.body.collides(bulletClGroup); enemy.body.damping = 0.6; allCars.push(enemy); enemy.smashTarget = null; // No Player. enemy.isIndex = i; enemy.health = 1.0; enemy.maxhealth = 1.0; } for (var i = 0; i < opponentCount; i++) { var medkit = groupCollect.create(game.world.randomX, game.world.randomY, 'medkit'); medkit.body.setRectangle(54, 40); medkit.body.setCollisionGroup(collectClGroup); //medkit.body.collides(opponentClGroup, playerClGroup); medkit.name = 'medkit' + i; medkit.exists = false; medkit.visible = false; } // Create our player sprite player = game.add.sprite(game.width / 2, game.height / 2 + -100, 'car'); player.anchor.set(0.5); game.camera.follow(player); game.physics.p2.enable(player, false); player.body.setCircle(16); player.body.setCollisionGroup(playerClGroup); //player.body.collides(opponentClGroup, playerHitEnemy, this); //player.body.collides(collectClGroup, carHitCollect, this ); allCars.push(player); player.health = 1.0; player.maxhealth = 1.0; cursors = game.input.keyboard.createCursorKeys(); game.input.keyboard.addKeyCapture([Phaser.Keyboard.SPACEBAR]); // AI Check Timer aiChaseCheck = game.time.now; collectSpawnCheck = game.time.now; //bulletTimeCheck = game.time.now; // Bullets groupBullets = game.add.group(); groupBullets.enableBody = true; groupBullets.physicsBodyType = Phaser.Physics.P2JS; groupBullets.setAll('anchor.x', 0.5); groupBullets.setAll('anchor.y', 0.5); for (var i = 0; i < bulletCount; i++) { var b = groupBullets.create(0, 0, 'bullet'); b.name = 'bullet' + i; b.exists = false; b.visible = false; b.checkWorldBounds = true; b.events.onOutOfBounds.add(resetBullet, this); b.body.setCircle(12); b.lifespan = 1000; b.body.setCollisionGroup(bulletClGroup); //b.body.collides(opponentClGroup, bulletHitEnemy, this); }}function enemyHitCar(enemy, car) { // Deal the damage to the sprite. DealDamage(car.sprite, enemy);}function playerHitEnemy(player, enemy) { car.sprite.smashTarget = enemy.sprite;}function carHitCollect(car, collect) { // Do Medkit stuff //if (collect.name.indexOf("medkit") == 0) //{ if (car.sprite.health < healthPackValue) { car.sprite.health += healthPackValue; } else car.sprite.health = car.sprite.maxhealth; //} collect.sprite.kill();}function bulletHitEnemy(bullet, enemy) { bullet.kill(); enemy.sprite.health -= bulletDamage;}// Called if the bullet goes out of the screenfunction resetBullet(bullet) { bullet.kill();}function DealDamage(sprite, body1) { sprite.health -= ((Math.abs(body1.velocity.x) + Math.abs(body1.velocity.y)) / 1000);}function opponentGetHealth(opponent) { var medkit = groupCollect.getFirstAlive(); if (medkit && medkit.visible == true) { accelerateToObject(opponent, medkit, opponentThrust); return true; } return false;}// UPDATE FUNCTION.function update() { if (GameState != 0) return; // For each opponent. groupOpponents.forEachAlive(function(opponent) { healthTint(opponent); // Check if Enemies Dead. if (opponent.health <= 0.0) { createExplosion(opponent); if (killOffEnemy(opponent)) return; } // Find a suitable target and pursue. if (opponent.smashTarget == null || opponent.smashTarget.alive == false) { OpponentGetTarget(opponent); } if (opponent.smashTarget != null && opponent.smashTarget.alive == true) { if (opponent.health > 0.5) { accelerateToObject(opponent, opponent.smashTarget, opponentThrust); } else if (opponent.health > 0.2 || allCars.length <= 3) { if (!opponentGetHealth(opponent)) { accelerateToObject(opponent, opponent.smashTarget, opponentThrust); } } else { if (!opponentGetHealth(opponent)) { runAwayFromObject(opponent, opponent.smashTarget, opponentThrust); } } constrainVelocity(opponent, opponentMaxSpeed); } }, this); healthTint(player); // Check if Player is dead. if (player.health <= 0.0) { createExplosion(player); player.kill(); GameState = 1; return; } // Player Controls. if (cursors.left.isDown /*|| stick.isLeft*/ ) { player.body.rotateLeft(playerRotationSpeed); } else if (cursors.right.isDown /*|| stick.isRight*/ ) { player.body.rotateRight(playerRotationSpeed); } else { player.body.setZeroRotation(); } if (cursors.up.isDown /*|| stick.isUp*/ ) { player.body.thrust(playerThrust); } else if (cursors.down.isDown /*|| stick.isDown*/ ) { player.body.reverse(playerReverse); } else { player.body.damping = 0.6; } constrainVelocity(player, carMaxSpeed); if (game.input.keyboard.isDown(Phaser.Keyboard.SPACEBAR)) { fireBullet(); } // AI Timer if (game.time.now - aiChaseCheck > Math.floor(aiChaseCheckInterval / opponentCount)) { if (allCars.length >= 2) // Avoid changing targets as unneeded when 2 or less. { randomOpponentGetTarget(); aiChaseCheck = game.time.now; } } // Medkit Timer if (game.time.now - collectSpawnCheck > spawnMedikitInterval) { spawnMedkit(); }}var bulletSpeed = 20000;var bulletLifeSpan = 2000;var bulletTime = 0;function fireBullet() { if (game.time.now > bulletTime) { var bullet = groupBullets.getFirstExists(false); //var bullet = groupBullets.getAt(bulletCount); if (bullet) { //alert(bullet.name); bullet.lifespan = bulletLifeSpan; bullet.reset(player.body.x, player.body.y); bullet.body.rotation = player.body.rotation; bullet.body.force.x = Math.cos(player.body.rotation - Math.PI / 2) * bulletSpeed; // accelerateToObject bullet.body.force.y = Math.sin(player.body.rotation - Math.PI / 2) * bulletSpeed; bulletTime = game.time.now + 50; //bulletCount++; } }}function spawnMedkit() { if (groupCollect.getFirstExists(false)) { var medkit = groupCollect.getFirstAlive(); if (medkit) { medkit.visible = true; medkit.exists = true; } }}function createExplosion(sprite) { var explosion = game.add.sprite(sprite.x, sprite.y, 'carExplode'); explosion.anchor.setTo(0.5, 0.5); explosion.animations.add('explode', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 12, true, true); explosion.play('explode', 12, false, true);}function killOffEnemy(opponent) { // Clean up memory and kill off. allCars.splice(opponent.isIndex, 1); opponent.kill(); // Check if won. if (--opponentsLeft == 0) { GameState = 2; return true; } return false;}function OpponentGetTarget(opponent) { if (allCars.length == 1) return null; var destIndex = Math.floor(Math.random() * allCars.length); while (opponent == allCars[destIndex]) { destIndex = Math.floor(Math.random() * allCars.length); } opponent.smashTarget = allCars[destIndex];}function randomOpponentGetTarget() { var opponentIndex = Math.floor(Math.random() * allCars.length) // Add 1 because player is pushed. OpponentGetTarget(allCars[opponentIndex]);}// http://phaser.io/examples/v2/p2-physics/accelerate-to-objectfunction accelerateToObject(obj1, obj2, speed) { if (typeof speed === 'undefined') { speed = 60; } var angle = Math.atan2(obj2.y - obj1.y, obj2.x - obj1.x); obj1.body.rotation = angle + game.math.degToRad(90); // correct angle of angry opponents (depends on the sprite used) obj1.body.force.x = Math.cos(angle) * speed; // accelerateToObject obj1.body.force.y = Math.sin(angle) * speed;};function runAwayFromObject(obj1, obj2, speed) { if (typeof speed === 'undefined') { speed = 60; } var angle = Math.atan2(obj2.y - obj1.y, obj2.x - obj1.x); obj1.body.rotation = angle + game.math.degToRad(-90); // correct angle of angry opponents (depends on the sprite used) obj1.body.force.x = -(Math.cos(angle) * speed); // accelerateToObject obj1.body.force.y = -(Math.sin(angle) * speed);};// constrainVelocity(sprite, maxVelocity) { var body = sprite.body var angle, currVelocitySqr, vx, vy; vx = body.data.velocity[0]; vy = body.data.velocity[1]; currVelocitySqr = vx * vx + vy * vy; if (currVelocitySqr > maxVelocity * maxVelocity) { angle = Math.atan2(vy, vx); vx = Math.cos(angle) * maxVelocity; vy = Math.sin(angle) * maxVelocity; body.data.velocity[0] = vx; body.data.velocity[1] = vy; console.log('limited speed to: ' + maxVelocity); }}function healthTint(sprite) { if (sprite.health < 0.1) sprite.tint = 0x333333; else if (sprite.health < 0.2) sprite.tint = 0x555555; else if (sprite.health < 0.3) sprite.tint = 0x666666; else if (sprite.health < 0.4) sprite.tint = 0x777777; else if (sprite.health < 0.5) sprite.tint = 0x888888; else if (sprite.health < 0.6) sprite.tint = 0x999999; else if (sprite.health < 0.7) sprite.tint = 0xAAAAAA; else if (sprite.health < 0.8) sprite.tint = 0xBBBBBB; else if (sprite.health < 0.9) sprite.tint = 0xCCCCCC;}function render() { switch (GameState) { case 0: // Playing game.debug.text('Collide with the Smash Em Derby! GO!', 16, 16); break; case 1: // Game Over. game.debug.text('GAME OVER, Better luck next time!', 16, 16); break; case 2: // Game Win. game.debug.text('CONGRATULATIONS YOU WINNNN!11!!11!', 16, 16); break; }} Link to comment Share on other sites More sharing options...
Langerz82 Posted July 21, 2015 Author Share Posted July 21, 2015 Fixed it a couple of lingering errors. If you want the following demo at:http://langerzgames.hostoi.com/CarSmashEm3.htm it's fireBullet() function is very useful for working out which direction to shoot gor P2JS.// Fire bullet from the player. (P2JS)function fireBullet() { if (game.time.now > bulletTime) { var bullet = groupBullets.getFirstExists(false); if (bullet) { bullet.lifespan = bulletLifeSpan; bullet.reset(player.body.x, player.body.y); bullet.body.rotation = player.body.rotation; bullet.body.force.x = Math.cos(player.body.rotation - Math.PI / 2) * bulletSpeed + player.body.force.x; // accelerateToObject bullet.body.force.y = Math.sin(player.body.rotation - Math.PI / 2) * bulletSpeed + player.body.force.y; bulletTime = game.time.now + bulletInterval; } }} Link to comment Share on other sites More sharing options...
Recommended Posts