Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
13 / 13 / 1
Регистрация: 12.05.2013
Сообщений: 37

Объект отталкивается от формы и идет в обратном направлении

11.01.2015, 14:39. Показов 1752. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
В программе по таймеру срабатывает событие(рисую олимпийские кольца). Нужно чтоб она двигалась вниз, и как только доходит до края формы , отталкивалась и двигалась вверх, и так пока не надоест.

Так вот сама проблема, как мне сделать так, чтобы мои кольца двигались вверх, после столкновения с формой, а потом, после столкновения с верхней границей, опять двигались вниз?

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 public void Changes()
        {
 
            if ((Y < (Form1.ActiveForm.Height -2*R))&&(Y>0))
            {
 
                Y += 5;
                XC = X;
                YC = Y;
 
 
                C1[0] = X;
                C1[1] = Y;
                C1[2] = R;
 
 
                C2[0] = (X + (R / 2 + (R / 4)));
                C2[1] = Y;
                C2[2] = R;
 
                C3[0] = (X + 3 * (R / 2));
                C3[1] = Y;
                C3[2] = R;
 
                C4[0] = (X + (R / 4));
                C4[1] = (Y + (R / 2 + (R / 4)));
                C4[2] = R;
 
                C5[0] = (X + 2 * (R / 2));
                C5[1] = (Y + (R / 2 + (R / 4)));
                C5[2] = R;
 
                X = XC;
                Y = YC;
 
            }
 
            else
            {
                Y -= 5;
                XC = X;
                YC = Y;
 
 
                C1[0] = X;
                C1[1] = Y;
                C1[2] = R;
 
 
                C2[0] = (X + (R / 2 + (R / 4)));
                C2[1] = Y;
                C2[2] = R;
 
                C3[0] = (X + 3 * (R / 2));
                C3[1] = Y;
                C3[2] = R;
 
                C4[0] = (X + (R / 4));
                C4[1] = (Y + (R / 2 + (R / 4)));
                C4[2] = R;
 
                C5[0] = (X + 2 * (R / 2));
                C5[1] = (Y + (R / 2 + (R / 4)));
                C5[2] = R;
 
                X = XC;
                Y = YC;
            }
               
        }
вот что написал я, но, как только кольца доходят до края формы, срабатывает ветвь по ELSE и у меня происходит зацикливание.

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public void Draw(Graphics gr)
        {
            
 
                obj.Mail -= new Tik(obj_TikTak);
                obj.Mail += new Tik(obj_TikTak);
 
                Pen pen1 = new Pen(Color.Blue);
                Pen pen2 = new Pen(Color.Black);
                Pen pen3 = new Pen(Color.Red);
                Pen pen4 = new Pen(Color.Yellow);
                Pen pen5 = new Pen(Color.Green);
 
                gr.DrawEllipse(pen1, C1[0], C1[1], C1[2], C1[2]);            
                gr.DrawEllipse(pen2, C2[0], C2[1], C2[2], C2[2]);                
                gr.DrawEllipse(pen3, C3[0], C3[1], C3[2], C3[2]);               
                gr.DrawEllipse(pen4, C4[0], C4[1], C4[2], C4[2]);             
                gr.DrawEllipse(pen5, C5[0], C5[1], C5[2], C5[2]);
 
                System.Threading.Thread.Sleep(480);
                gr.Clear(Color.LightGray);
 
                this.Changes();// изменение координат колец
                obj.Mail -= new Tik(obj_TikTak);
                obj.Mail += new Tik(obj_TikTak);
 
                
                 gr.DrawEllipse(pen1, C1[0], C1[1], C1[2], C1[2]);          
                 gr.DrawEllipse(pen2, C2[0], C2[1], C2[2], C2[2]);                
                 gr.DrawEllipse(pen3, C3[0], C3[1], C3[2], C3[2]);                
                 gr.DrawEllipse(pen4, C4[0], C4[1], C4[2], C4[2]);                
                 gr.DrawEllipse(pen5, C5[0], C5[1], C5[2], C5[2]);
 
              
 
                 System.Threading.Thread.Sleep(480);
                 gr.Clear(Color.LightGray);
 
                
             
            
        }
    }
Вот место где я ее вызываю.
Подскажите пожалуйста как с этим побороться!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.01.2015, 14:39
Ответы с готовыми решениями:

Объект отталкивается от стенки
Здраствуйте, очень прошу помочь знающих людей. Киньте код или поскажите, где найти следующее - рисую я например в Form_Paint...

добавление силы в направлении forward ведет Rigidbody ведет объект не в направлении форварда объекта
При первом нажатии на клавишу up объект едет вперед но при поворачи и повторном нажатии на клавишу up объект едет задом наперед вот код: ...

Цикл for в обратном направлении
Здравствуйте. Нужно сделать так, что бы цикл шел в обратном порядке. У меня получается бесконечный цикл. Что не так? #include...

2
34 / 39 / 18
Регистрация: 04.05.2013
Сообщений: 212
11.01.2015, 20:47
Заведите переменную для приращения. Если Y выходит за диапазон, меняйте знак приращения.
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
26
27
28
29
30
31
32
33
34
35
int increment = 5;
public void Changes()
        {
            if ((Y > (Form1.ActiveForm.Height -2*R)) || (Y<0))
                increment = -increment;
 
                Y += increment;
                XC = X;
                YC = Y;
 
 
                C1[0] = X;
                C1[1] = Y;
                C1[2] = R;
 
 
                C2[0] = (X + (R / 2 + (R / 4)));
                C2[1] = Y;
                C2[2] = R;
 
                C3[0] = (X + 3 * (R / 2));
                C3[1] = Y;
                C3[2] = R;
 
                C4[0] = (X + (R / 4));
                C4[1] = (Y + (R / 2 + (R / 4)));
                C4[2] = R;
 
                C5[0] = (X + 2 * (R / 2));
                C5[1] = (Y + (R / 2 + (R / 4)));
                C5[2] = R;
 
                X = XC;
                Y = YC;
        }
0
13 / 13 / 1
Регистрация: 12.05.2013
Сообщений: 37
11.01.2015, 21:21  [ТС]
решил проблему с помощью флага
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.01.2015, 21:21
Помогаю со студенческими работами здесь

Цикл в обратном направлении
Можно ли в VBA сделать обратный цикл(что бы считал наоборот). На паскале он реализуется вот так. for k:=6 downto 1 do

Не получается перебор в обратном направлении
Разработать программу для реализации основных действий с двунаправленным динамическим списком: • проход по списку в ПРЯМОМ и ОБРАТНОМ...

Считывает двойками в обратном направлении до 1
Добрый День!!!Вот код программы которая считывает от 1 до 6 и также в обратном порядке от 6 до 1. Но вот столкнулся с такой проблемой не...

Записать целочисленные массивы в обратном направлении
даны целые массивные числа нужно их написать в обратном направлений...

Вывести текст файла в обратном направлении
Пожалуйста помогите с решением. Создать файл с текстовой строкой. Прочитать файл и вывести текст в обратном направлении. С++


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru