Динамическая загрузка

07 февраля 2017 11:18
Есть несколько моделей, нужно по нажатию кнопки загружать модель и выгружать предыдущую.
(также имеется одна модель которую не нужно выгружать)
if(_current_model == null){
		_current_model = m_data.load(_file_names[this.id], load_cb);		
	}else{
		m_data.unload(_current_model);
		_current_model = m_data.load(_file_names[this.id], load_cb, stageload_cb, true);
	}


но в процессе могут произойти ошибки (модель загрузилась несколько раз )
можно ли как то выгружать все модели кроме одного определенного?
08 февраля 2017 11:38
Добрый день.

Сцены выгружаются по своему идентификатору, выгрузить все, кроме одной, можно из приложения, запоминая id загруженных сцен.

Я как-то делал подобное приложение, могу дать вам пару советов. На время загрузки модели лучше блокировать интерфейсную кнопку загрузки, чтобы нельзя было загрузить несколько одинаковым моделей. И разблокировать её по завершению загрузки. В таком случае не будет лишней путанницы с идентификаторами.

Вообще, если у вас есть простой пример приложения, можете скинуть, я могу посмотреть более детально
Разработчик Blend4Web
08 февраля 2017 11:43
Файл проекта
08 февраля 2017 12:25
Слегка модифицировал функцию смены сцены:
function button_index() {
    var interface_is_active = true;
    var scenes_load_cb = function(data_id, success) {
        interface_is_active = true;
    }
    if(_file_loaded == true && interface_is_active){
        _file_loaded = false;
        interface_is_active = false;
        if(_current_model == null){
            _current_model = m_data.load(_file_names[this.id], scenes_load_cb, stageload_cb, true);     
        }else{
            m_data.unload(_current_model);
            _current_model = m_data.load(_file_names[this.id], scenes_load_cb, stageload_cb, true);
        }
        var description_text = document.getElementById("description_text");
        description_text.textContent = _btn_description[this.id]
        _file_loaded = true;
    }
}

Добавил блокировку интерфейса до завершения загруки сцены
Разработчик Blend4Web
08 февраля 2017 13:05
Попробывал ваш метод, не получилось. :)
При быстром двойном нажатии он навсегда сохраняет модель.
08 февраля 2017 14:16
Извиняюсь, не обратил внимание, что вы уже используете переменную-состояние загруженной модели.
function button_index() {
    var file_loaded = true;
    var scenes_load_cb = function(data_id, success) {
        file_loaded = true;
    }
    if(file_loaded){
        file_loaded = false;
        if(_current_model == null){
            _current_model = m_data.load(_file_names[this.id], scenes_load_cb, stageload_cb, true);     
        }else{
            m_data.unload(_current_model);
            _current_model = m_data.load(_file_names[this.id], scenes_load_cb, stageload_cb, true);
        }
        var description_text = document.getElementById("description_text");
        description_text.textContent = _btn_description[this.id]
    }
}


Проверил на двойной быстрый клик - работает, дайте знать если будет что-то не так
Разработчик Blend4Web
08 февраля 2017 20:08
Вот рабочий код, может кому пригодится :)
Переписал ваш код немного (file_loaded должен быть за функцией)
Спасибо большое)

var _file_loaded = true;
function button_index() {
	var loaded_cb = function(data_id, success){
		_file_loaded = true;
	}
	if(_file_loaded){
		_file_loaded = false;
		if(_current_model == null){
			_current_model = m_data.load(_file_names[this.id], loaded_cb, null, true);		
		}else{
			m_data.unload(_current_model);
			_current_model = m_data.load(_file_names[this.id], loaded_cb, null, true);
		}
	}
}
 
Пожалуйста, зарегистрируйтесь или войдите под своей учетной записью , чтобы оставлять сообщения.