Jump to content

Code not working as expected


Langerz82
 Share

Recommended Posts

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

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

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...