2012-02-14 2 views
0

Ситуация/ПроблемаДобавление детей к холсту, давая мне лаг

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

Когда количество элементов управления низкое, все работает отлично. Элемент управления добавляется, и после этого запускается раскадровка, которая изменяет непрозрачность от 0 до 1 в 0,5 сек. Однако, когда есть более чем 30/40 элементов управления, программа «отстает», а первые .2 сек раскадровки «пропущены».

Элемент управления изображением с текстовым полем под ним.

Прежде чем элемент управления будет добавлен к холсту, он должен быть сделан.

Вопрос

Как я могу изменить свою программу, поэтому элементы управления получить правильно добавлены и раскадровка играли без не отставать не Mather, сколько элементов управления Мне нужно добавить?

Возможно, что-то с операцией ASync, которая создает элемент управления?

Любые идеи приветствуются, но, пожалуйста, присылайте идею, дайте небольшой пример.

Связывание MVVM не является вариантом.

Update

метод, чтобы получить новый элемент

 var control = new ElementControl(item); 
     x = (x < 0) ? (GetWidth() * (i % GetCount())) : x; 
     y = (y < 0) ? (GetHeight() * (i/GetCount())) : y; 
     control.SetValue(Canvas.LeftProperty, x); 
     control.SetValue(Canvas.TopProperty, y); 
     control.SetValue(Canvas.ZIndexProperty, gbl.zIndex++); 
     control.Drag_Completed += Element_Dropped; 
     control.Drag_Started += Element_Dragging; 
     control.DoubleClick += DoubleClick; 
     return control; 

поясню это только. Элемент управления возвратом добавляется к холсту с помощью «Canvasname.Children.Add»

В создании элемента управления элементы управления перемещением, перетаскиванием и перемещением добавляются в элемент управления.

Update 2

Раскадровка по контролю

<Storyboard x:Name="FadeIn"> 
    <DoubleAnimationUsingKeyFrames Storyboard.TargetName="Control" 
            Storyboard.TargetProperty="Opacity"> 
     <EasingDoubleKeyFrame KeyTime="0:0:0" 
           Value="0" /> 
     <EasingDoubleKeyFrame KeyTime="0:0:1" 
           Value="1" /> 
    </DoubleAnimationUsingKeyFrames> 
</Storyboard> 

Раскадровка спускового в MainPage.xaml.cs

MainCanvas.Children.Where(m => m.GetType() == typeof(ElementControl)).ToList().ForEach(m => (m as ElementControl).FadeIn.Begin()); 

ответ

0

Создание элемента управления в другом потоке просто заставит вас плакать. Он выдает ошибку каждый раз, когда что-либо в пользовательском интерфейсе создается или иным образом затрагивается другим потоком. Создание элемента управления не должно занимать слишком много времени, поэтому я сомневаюсь, что проблема заключается в создании. Вы должны иметь возможность настроить анимацию на объект, который запускается после указанной задержки и запускается автоматически. Проблема также может быть просто неотъемлемой медлительностью плагина браузера, когда одновременно создается анимация 30 или 40 объектов.

Возможно, вам удастся опубликовать код, который поможет нам увидеть, что вы что-то упустили.

+0

Обновлено мое сообщение с небольшим кодом, которым я могу поделиться. –

+0

похоже, что создание управления не ваша проблема, потому что этот код должен работать быстрее, чем вы можете мигать. У меня такое ощущение, что сложность анимации замедляет ваш плагин. Как начать анимацию? –

+0

второе обновление опубликовано. Заметьте, я сделал это длятся на секунду, поэтому раскадровка фактически показана. Я предпочитаю его на .2 или .3, где он показан, но не досадно долгое время, поскольку управление не может использоваться во время раскадровки. Однако в текущих настройках, установив его на .2, он просто выскочит без какого-либо затухания (если имеется более 25-30 элементов управления). –

Смежные вопросы