有一段时间我一直在反对这个。我无法弄清楚为什么该节点不会从我的链表中删除。我有一个链接列表,用于存储我浏览并渲染每个图像的图像。问题是它们仍在被渲染而不是被移除。我的代码有问题吗?对于 javascript 中的所有其他类型的链接列表,我的代码似乎相同。
编辑添加完整代码,因为它可能有用:
var object_action_holder = function () {
this.skill_id = 0;
this.skill_type = 0;
this.image_src = 0;
this.x_pos = 0;
this.y_pos = 0;
this.turn_off = 0;
this._head = null;
};
object_action_holder.prototype = {
add: function ( skill_id , skill_type , image_src , x_pos , y_pos ) {
var node = {
skill_id:skill_id,
skill_type:skill_type,
image_src:image_src,
x_pos:x_pos,
y_pos:y_pos,
next:null
},
current;
if (this._head === null) {
this._head = node;
} else {
current = this._head;
while (current.next) {
current = current.next;
}
current.next = node;
}
this.skill_id = skill_id;
this.skill_type = skill_type;
this.image_src = image_src;
this.x_pos = x_pos;
this.y_pos = y_pos;
},
remove_node: function ( skill_id ) {
var current = this._head, previous;
if (skill_id != null && current != null ) {
while ( current.skill_id != skill_id ) {
previous = current;
current = current.next;
}
if ( current.skill_id == skill_id )
console.log('found the skill_id');
if (current != null) {
if ( current.next != null ) {
previous.next = current.next;
return current;
}else {
previous = null;
current = null;
return current;
}
}
}
return null;
},
get_action_holder: function () {
var current = this._head;
var object_array = [];
var i = 0;
while (current != null) {
object_array[i] = current;
i++;
current = current.next;
}
return object_array;
},
}
渲染
var action_image = main.action_holder.get_action_holder();
for(var i = 0; i < action_image.length; i++) {
main.game_handle.drawImage ( action_image[i].image_src , ( action_image[i].x_pos * 16 ) + main.player_x - ( main.game_x_pos * 16 ) , ( action_image[i].y_pos * 16 ) + main.player_y - ( main.game_y_pos * 16 ) );
if ( action_image[i].turn_off == true )
delete main.action_holder.remove_node(action_image[i].skill_id);
}