Переоценка условия в jscript - PullRequest
2 голосов
/ 09 декабря 2011

Итак, у меня есть маленький датчик в моей «сцене», и когда он блокируется, я хочу, чтобы моя программа ждала 4 секунды, а если датчик все еще заблокирован, я хочу, чтобы он предупредил пользователя.

Скрипт работает нормально, если датчик остается заблокированным.

Однако, если вы заблокируете датчик менее чем на 4 секунды, а затем удалите деталь из датчика (что должно привести к отсутствию предупреждения, так как датчик больше не блокируется), предупреждение все равно будет запущено, даже если условиебольше не правда.

Может ли кто-нибудь из друзей увидеть, что я здесь делаю неправильно?

Функция OnBlocked() запускается, когда датчик заблокирован, а функция OnCleared() - когда датчикочищается

Функция OnisBlockedUpdated() запускается при обновлении свойства isBlocked.

function OnBlocked( sender : Demo3D.Visuals.PhysicsObject, load : Demo3D.Visuals.Visual )
{
    sender.isBlocked = true;
    sender.PropertiesUpdated();
}

function OnCleared( sender : Demo3D.Visuals.PhysicsObject, load : Demo3D.Visuals.Visual )
{
    sender.isBlocked = false;
    sender.PropertiesUpdated();
}

function OnisBlockedUpdated( sender : Demo3D.Visuals.BoxVisual, value : System.Boolean, oldValue )
{
    var blockingObj : Demo3D.Visuals.BoxVisual = sender.BlockingLoad;

    if (value)
    {   
        print("isBlocked");
        wait(4);
        sender.PropertiesUpdated();
        if(value)
        {
            alert("The object '" + blockingObj + "' is too tall for this bay.");
        }
        else
        {
            return;
        }
    }
    if(!value)
    {
        print("cleared");
        return;
    }   
}

1 Ответ

2 голосов
/ 09 декабря 2011

, если вы заблокируете датчик менее чем на 4 секунды, а затем удалите деталь из датчика (что должно привести к отсутствию предупреждения, так как датчик больше не блокируется), предупреждение все еще работает, даже если условие недлиннее true

Функция все еще работает, пока вы выполняете wait(), а параметр value будет передан в виде побочного значения, а не побочного, поэтому это не такбудет меняться в середине тела функции.

Если вы хотите оценить это значение после завершения ожидания, вам нужно будет получить значение current ,вместо значения, переданного в функцию.

Попробуйте:

if (value)
{   
    print("isBlocked");
    wait(4);
    sender.PropertiesUpdated();
    if(sender.isBlocked) // *** This is the line I changed
    {
        // ...

Хотя я не уверен, будет ли sender тем же объектом, что и в OnBlocked илиOnCleared функция, так как это другой тип.Возможно, вам придется найти какой-нибудь способ получить ссылку на этот же sender : Demo3D.Visuals.PhysicsObject объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...