Icultlive  Icultlive
Icultlive Icultlive

Reputation: 143

how to completely remove

please help to remove the new Bullet. jsfiddle

after the object it moves across the screen from the bottom up. coordinate with y <= 5px method works helper.deleteElement (), but the object is still there exists (see the console - console.log ('move') ;)

I need to to be removed completely

js:

Bullet = function(bulletId){ 
    var self = this;

    self.id = bulletId; 
    self.x = 100;   
    self.y = 500;   

    self.move = function(){ 
        console.log('move');

        var offsetY = -10,
            newY = self.y + offsetY;

        if(newY <= 5){
            helper.deleteElement(self.id);

            if(observerable.removeListener(this, "makeMoveBullet", "move")){
                console.log('dont worked!');
            }
        }   

        self.y = newY;

        self.render(self.x, newY);      

        return;
    };      

    self.render = function(x, y){       
        $('#' +self.id).css({
            'left': (self.x = x || self.x) + 'px',
            'top': (self.y = y || self.y) + 'px'
        }).appendTo('#wrap');   

        return;
    };

    self.init = function(playerX, playerY){
        $('<div class="bullet" id="' + self.id + '"  />').appendTo('#wrap');

        self.x = playerX + 31;
        self.y = playerY - 9;

        self.render(self.x, self.y);

        return;
    };
}; 


// ------------------------------------------------------------------------------------ observer
var observerable = {
    listeners: {},

    addListener: function (object, evt, callback) {       
        if (!this.listeners.hasOwnProperty(evt)) {           
            this.listeners[evt] = [];    
        }        

        this.listeners[evt].push(object[callback]);       
    },

    removeListener: function (object, evt, callback) {       
        if (this.listeners.hasOwnProperty(evt)) {      
            var i, length;     
                    
            for (i = 0, length = this.listeners[evt].length; i < length; i += 1) {               
                if (this.listeners[evt][i] === object[callback]) {                   
                    this.listeners[evt].splice(i, 1);        
                }      
            }    
        }  
    },
        
    publisher: function (evt, args) {       
        if (this.listeners.hasOwnProperty(evt)){                       
            var i, length;       
                                      
            for (i = 0, length = this.listeners[evt].length; i < length; i += 1){                
                this.listeners[evt][i](args);      
            }            
        }                            
    }
}; 

// ------------------------------------------------------------------------------------ helper
function Helper(){
    this.deleteElement = function(id){
        $('#' + id).remove();

        return;
    };  
};

// ------------------------------------------------------------------------------------ init
var helper = new Helper();


bullet = new Bullet('bullet_0'); 

bullet.init(500, 500);


observerable.addListener(bullet, "makeMoveBullet", "move"); 

setInterval(function(){
    observerable.publisher("makeMoveBullet");
}, 100);

Upvotes: 0

Views: 105

Answers (3)

coldrunMateusz
coldrunMateusz

Reputation: 1

removeListener: function (object, evt, callback) {
    if (this.listeners.hasOwnProperty(evt)) {
        var i, length;

        for (i = 0, length = this.listeners[evt].length; i < length; i += 1) {
            if (this.listeners[evt][i] === object[callback]) {
                this.listeners[evt].splice(i, 1);
            }
        }
    }
}

object[callback] is always undefined so this.listeners[evt].splice(i, 1); cannot be executed;

Upvotes: 0

Alex Barroso
Alex Barroso

Reputation: 859

setInterval returns an interval identifier. Clear the interval using clearInterval function when you don't want more executions of the interval.

var int = setInterval(...);
...
clearInterval(int);

Upvotes: 0

Spencer Wieczorek
Spencer Wieczorek

Reputation: 21575

JavaScript uses a Garbage Collector to remove unused variables. I would say to do something like this:

delete this.x; delete this.y ; ... ; delete this;

When you want to remove the object (also remove it from any other external data structures). Remove all it's properties then the object itself. Then the GC should remove it.

Upvotes: 1

Related Questions