powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Перемещение объекта
16 сообщений из 16, страница 1 из 1
Перемещение объекта
    #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
Перемещение объекта
    #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
Перемещение объекта
    #38538131
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
bazile,

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

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

Подари ему playstation 3 с большим телеком.
...
Рейтинг: 0 / 0
Перемещение объекта
    #38538312
Фотография 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
Перемещение объекта
    #38538513
crause
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТС, дай примерное описание на тренажер.
Суть метода и т.д.
...
Рейтинг: 0 / 0
Перемещение объекта
    #38538585
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
crauseТС, дай примерное описание на тренажер.
Суть метода и т.д.
По экрану по замкнутым траекториям двигается объект. Траектории простые: квадрат, круг, восьмерка и т.п.. То есть предсказуемые.

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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


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