Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Перемещение объекта / 16 сообщений из 16, страница 1 из 1
26.01.2014, 11:54
    #38538104
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение объекта
У моего у любимого дядьки проблема со зрением. Он где-то вычитал, что его можно поправить тренажером и попросил этот тренажер написать.
Смысл тренажера: что-то бегает по экрану, а он глазами за этим следит.

Я только взялся за это дело.
Тут главное заставить объект двигаться, а все остальное - мелочи.

Для начала решил попробовать двигать прямоугольник хотя бы по прямой.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
 public partial class MainWindow : Window
    {
        System.Timers.Timer timer = new System.Timers.Timer(1000);

        public MainWindow()
        {
            InitializeComponent();
            timer.Elapsed += timer_Elapsed;
        }

        void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            Thickness th = Purpose.Margin;
            th.Left += 10;
            th.Right += 10;
            Purpose.Margin = th;
        }

        
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            
            timer.Start();
        }
    }



Вроде все правильно. Кнопка запускает таймер, по таймеру меняются координаты.


Однако в строке
Код: c#
1.
Purpose.Margin = th;



Возникает следующее:

C#Исключение типа "System.InvalidOperationException" возникло в WindowsBase.dll, но не было обработано в коде пользователя

Дополнительные сведения: Вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта является другой поток.

Если код
Код: c#
1.
2.
3.
4.
Thickness th = Purpose.Margin;
th.Left += 10;
th.Right += 10;
Purpose.Margin = th;


запихать под кнопку, то все успешно двигается

1. Как это побороть?
2. Если нельзя побороть, то что использовать?
Использовать я думаю можно:
а) Прямое рисование
б) Удаление и создание объектов.

Может быть есть варианты получше?
...
Рейтинг: 0 / 0
26.01.2014, 12:08
    #38538118
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение объекта
Cat2,

Код: c#
1.
2.
3.
4.
5.
6.
7.
this.Dispatcher.Invoke((Action)(() =>
    {
        Thickness th = Purpose.Margin;
	th.Left += 10;
	th.Right += 10;
	Purpose.Margin = th;
    }));



Насчет варианта получше есть смысл посмотреть в сторону родной WPF анимации.
...
Рейтинг: 0 / 0
26.01.2014, 12:20
    #38538131
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение объекта
bazile,

Спасибо, запрыгало.
==============
Я нутром чуял, что это не лучший метод.
Спасибо за наводку. Я вначале хотел на флеше писать, но его я знаю еще хуже, чем WPF :(
...
Рейтинг: 0 / 0
26.01.2014, 13:48
    #38538183
3 D
3 D
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение объекта
...
Рейтинг: 0 / 0
26.01.2014, 14:30
    #38538220
Monochromatique
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение объекта
Cat2Смысл тренажера: что-то бегает по экрану, а он глазами за этим следит.

Может быть есть варианты получше?

Подари ему playstation 3 с большим телеком.
...
Рейтинг: 0 / 0
26.01.2014, 16:48
    #38538312
PA
PA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение объекта
DispatcherTimer
...
If a System.Timers.Timer is used in a WPF application, it is worth noting that the System.Timers.Timer runs on a different thread then the user interface (UI) thread. In order to access objects on the user interface (UI) thread, it is necessary to post the operation onto the Dispatcher of the user interface (UI) thread using Invoke or BeginInvoke. Reasons for using a DispatcherTimer opposed to a System.Timers.Timer are that the DispatcherTimer runs on the same thread as the Dispatcher and a DispatcherPriority can be set on the DispatcherTimer.
...
Рейтинг: 0 / 0
26.01.2014, 23:30
    #38538513
crause
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение объекта
ТС, дай примерное описание на тренажер.
Суть метода и т.д.
...
Рейтинг: 0 / 0
27.01.2014, 08:01
    #38538585
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение объекта
crauseТС, дай примерное описание на тренажер.
Суть метода и т.д.
По экрану по замкнутым траекториям двигается объект. Траектории простые: квадрат, круг, восьмерка и т.п.. То есть предсказуемые.

Тренирующийся должен следить глазами за движением

Цель не проверить реакцию, а тренировать мышцы, которыми глаза двигаются.
...
Рейтинг: 0 / 0
04.04.2014, 22:52
    #38605902
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение объекта
Всем спасибо.

Дядька сказал - 5 баллов. То, что ему нужно.

Однако WPF-ская анимация работает как-то слишком инерционно. В играх такой фигни нет.

Я думаю, что для такого нормального видео-тренажера придется идти в сторону DirectX.

Прилагаемая программа не является шедевром программирования. Однако она даже в этом виде пригодна для упражнений для глаз в регламентированные перерывы для людей, работающих на компах.

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

=============

Я клятвенно заверяю, что прога не имеет никаких деструктивных функций, ничего ни откуда не принимает и никуда ничего не посылает.
Клянусь своей Честью!
...
Рейтинг: 0 / 0
04.04.2014, 22:59
    #38605903
облико морале
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение объекта
Cat2,

спасиб!!! (очкарик с 35-летним стажем )
...
Рейтинг: 0 / 0
04.04.2014, 23:01
    #38605905
Герой дня
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение объекта
проверили, работает ?
...
Рейтинг: 0 / 0
04.04.2014, 23:05
    #38605906
Я и ёжик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение объекта
Cat2,

Направление движения хорошо бы иметь возможность менять, а то не симметрично мышцы будут развиваться.
...
Рейтинг: 0 / 0
04.04.2014, 23:16
    #38605910
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение объекта
Я и ёжикCat2,

Направление движения хорошо бы иметь возможность менять, а то не симметрично мышцы будут развиваться.
А черт знает, про эти мышцы.
Мне известно, только то, что самый "легкий" взгляд это снизу-вверх и слева-направо . Это из теории рекламы. Кто не верит - пусть попробует :)

Так может надо наоборот - самый "тяжелый" взгляд делать?


Еще в перспективе "программы". На одну, две, три и более минут, когда переходы между траекториями будут производится автоматически.
...
Рейтинг: 0 / 0
04.04.2014, 23:22
    #38605912
iv_an_ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение объекта
Cat2Смысл тренажера: что-то бегает по экрану, а он глазами за этим следит.Арканоид?
...
Рейтинг: 0 / 0
04.04.2014, 23:24
    #38605913
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение объекта
iv_an_ruCat2Смысл тренажера: что-то бегает по экрану, а он глазами за этим следит.Арканоид?
Давай это мы обсудим в ПТ

Для вас, очкарики!
...
Рейтинг: 0 / 0
09.04.2014, 07:42
    #38609247
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемещение объекта
MonochromatiqueCat2Смысл тренажера: что-то бегает по экрану, а он глазами за этим следит.

Может быть есть варианты получше?

Подари ему playstation 3 с большим телеком.
На этой мыловарне ещё больше зрение посадишь.

ТС, это проблема явно не из области WPF и программирования вообще. Лучший тренажёр для лечения близорукости (если это она) - упражнение "близко-далеко". Фокусируешься на что-нибудь перед носом на 3-5 с, потом фокусируешьсяна чём-нибудь далёком на 3-5 с. Повторить 10-15 раз. Таких подходов штук 10 в день. Плюс давать глазам отдыхать. Плюс массаж вокруг глаз и упражнения по двиганию глазами - для улучшения кровообращения.

И да, правильно сказали - двигай родными WPF анимациями. Там даже с 4 версии Дотнета появились всякие сложные кривые, по которым можно заставить двигаться объекты.

авторОднако WPF-ская анимация работает как-то слишком инерционно. В играх такой фигни нет.

Я думаю, что для такого нормального видео-тренажера придется идти в сторону DirectX.
А у компа ТТХ соответствуют? А то, может, там софтовый рендеринг и ты на весь фуллХД экран окно разворачиваешь. В WPF с этим строго - древние тачанки не потянут аппаратное ускорение.
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Перемещение объекта / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]