public void update(GameTime gameTime)
    {
        if (_registerInfosInit.Count > 0)
        {
            for (int i = 0; i < _registerInfosInit.Count;)
            {
                RegisterInfo info = _registerInfosInit[i];
                info.startTime = gameTime.TotalGameTime.TotalSeconds + info.delay;

                _registerInfosInit.RemoveAt(i);
                _registerInfos.Add(info);
            }
        }

        if (_registerInfos.Count > 0)
        {
            for (int i = 0; i < _registerInfos.Count;)
            {
                RegisterInfo info = _registerInfos[i];
                if (gameTime.TotalGameTime.TotalSeconds >= info.startTime)
                {
                    _register(info, gameTime);

                    _registerInfos.RemoveAt(i);
                    continue;
                }

                ++i;
            }
        }

        if (_keys.Count > 0)
        {
            for (int i = 0; i < _keys.Count;)
            {
                object obj = _keys[i];

                TransSet trans = _registry[obj];
                if (!trans.update(gameTime))
                {
                    _keys.RemoveAt(i);

                    if (_registry.ContainsKey(obj))
                    {
                        _registry.Remove(obj);
                    }

                    continue;
                }

                if (_registry.ContainsKey(obj))
                {
                }

                ++i;
            }
        }

        //_components.update(game, gameTime);
    }
    void _register(RegisterInfo info, GameTime gameTime)
    {
        object obj = info.obj;


        TransSet trans;

        if (!_registry.ContainsKey(obj))
        {
            trans = new TransSet()
            {
                obj = obj
            };
            _registry[obj] = trans;

            if (!_keys.Contains(obj))
            {
                _keys.Add(obj);
            }
        }

        trans = _registry[obj];
        trans.updateProperties(gameTime, info.properties, info.time, info.transition);

        if (info.callback != null)
        {
            trans.callbacks.Add(info.callback);
        }
    }