0

it is the first time for me to explore jQuery and gameQuery for building games using JavaScript, so am asking about sth that might look very naive, but really i cant get it.

i am developing a game like Space Invader, the detection for collision between player missile and enemies not working.

This is my code:

the definition for my Enemy class

function Enemy(node){
    this.node = $(node);
    this.pts_value = 0;
    return true;
}

this is the code i use to add ten enemy sprite next to each other. the enemies move together to the left and the right

$.each(new Array(10), function(index, value) {
    $("#enemy_group").addSprite("enemy2_"+index,{animation: enemies[2],
         posx: index * 55, posy: 0, width: 48, height: 48})
    $("#enemy2_"+index).addClass("enemy");
    $("#enemy2_"+index)[0].enemy = new Enemy($("#enemy2_"+index));
    $("#enemy2_"+index)[0].pts_value = 150;
});

so when i need to move the enemies, i move the enemies together, i move the group that includes all the sprites "#enemy_group"

    if(ENEMY_TO_RIGHT){
        var enemiesNewPos = (parseInt($("#enemy_group").css("left"))) + ENEMY_SPEED;
        if(enemiesNewPos < PLAYGROUND_WIDTH - 550){
            $("#enemy_group").css("left", ""+enemiesNewPos+"px");
        } else {
            ENEMY_TO_RIGHT = false;
        }
    } else {
        var enemiesNewPos = (parseInt($("#enemy_group").css("left"))) - ENEMY_SPEED;
        if(enemiesNewPos > 0){
            $("#enemy_group").css("left", ""+enemiesNewPos+"px");
        } else {
            ENEMY_TO_RIGHT = true;
        }
    }

finally for collision detection, i want to remove the enemy sprite that the players missile has hit, each missile sprite has an added class names ".playerMissiles"

    $(".playerMissiles").each(function(){
        var posy = parseInt($(this).css("top"));

        if(posy < 0){
            $(this).remove();
            return;
        }

        $(this).css("top", ""+(posy - MISSILE_SPEED)+"px");
        //Test for collisions
        var collided = $(this).collision(".enemy, .group");
        if(collided.length > 0){
            //An enemy has been hit!
            collided.each(function(){
                $(this).setAnimation(enemies[0], function(node){$(node).remove();});
            })

        }
    });

i was following the documentation tutorial on the gameQuery website.

any help appreciated, thanks,

Samer Makary
  • 1,815
  • 2
  • 22
  • 25

2 Answers2

2

I can't see any problem with your code. I can only give you a few pointers:

  • Did you create "enemy_group" with the addGroup function?
  • Is "enemy_group" nested in something special like a custom div ? for the collision detection to work you need a chain of parent composed only of sprites and groups (and tiles map)
  • Is "enemy_group" nested in a sprite, if so it's a bad idea because you will need to add the selector for this sprite in your methode call and this sprite will be included in the colliding element list.
  • The same goes for the ".playerMissiles"

Just to be sure what version of gameQuery and jQuery do you use? The last version from gitHub is unstable and I wouldn't recomend using it, user 0.5.1 instead.

Selim Arsever
  • 320
  • 1
  • 6
  • Indeed, yeah the code was correct it was matter of versions. I was using gameQuery rev 0.5.4 and jQuery 1.4.2 which were not compatible together i needed to replace the jQuery with a more recent version like 1.4.4 and it worked quite well – Samer Makary Jul 05 '11 at 07:57
1

You could use jquery collision plugin, so you avoid doid the logic by yourself.

Hope this helps. Cheers

Edgar Villegas Alvarado
  • 18,204
  • 2
  • 42
  • 61