0 / 0 / 0
Регистрация: 07.09.2011
Сообщений: 15

Во время анимации менять скорость моделирования, к тому же нужно менять скорость каждого автомобиля

02.03.2012, 23:38. Показов 1566. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добрый вечер.
Я недавно познакомился с С#, поэтому застрял. Я разрабатываю приложение для визуализации некоторого процесса. Скажем похоже на автобан с автомобилями. 2 или больше полосы, автомобили едут, обгоняют и т.п. Но вопрос не в этом. Нужно во время анимации менять скорость моделирования, к тому-же нужно менять скорость каждого автомобиля. Мануалы я читать умею, форум тоже, но никак ко мне не доходит как это все организовать.
Что почерпнул из форума так это то что нужно использовать отдельный поток для рассчетов и BufferedGraphics для отрисовки чтобы не было задержек. Или нет? Кто-то может обьяснить на словах как лучше организовать? Ибо сделал рассчеты и отрисовку в отдельном потоке, и в итоге даже остановка процесса происходит только через секунду после нажатия кнопки стоп. И да, все происходит в цикле, процесс итерационный. Буду очень признателен за помощь.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.03.2012, 23:38
Ответы с готовыми решениями:

Какой Винчестер Лучше можно ли менять скорость Винчестера HDD
Какой Винчестер Лучше можно ли менять скорость Винчестера HDD Есть такие популярные фирмы как WD (Western Digital), Hitaсhi Грубо...

Как менять скорость передачи через COM порт не меняя сигнал RTS
У меня некоторый девайс связан с компьютером по COM порту. Задействованы не только линии данных RX/TX но и RTS. В процессе работы нужно...

Определить скорость движения автомобиля v, преодолевающего расстояние S за время t
определить Скорость движения автомобиля v, преодолевающего расстояние S за время t, с учетом возможности равномерного или равнопеременного...

1
c#
 Аватар для temich-92
95 / 95 / 27
Регистрация: 25.03.2011
Сообщений: 290
03.03.2012, 19:08
Лучший ответ Сообщение было отмечено Wolf6969 как решение

Решение

может я ни так понял но вот:
класс врага

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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
 
namespace tank
{
    class _Bullet
    {
        public Point Location { get; set; }
        public Size Size { get; set; }
        public _Orientation Or { get; set; }
        public int Velocity { get; set; }
        public bool IsRunning { get; set; }
        public Image Image { get; set; }
 
        public Rectangle Rectangle
        {
            get { return new Rectangle(Location, Size); }
        }
 
        int maxWidth, maxHeight;
 
        public _Bullet(int maxWidth, int maxHeight)
        {
            Location = new Point(-10, -10);
            Size = new Size(6, 6);
            Velocity = 4;
            Image = tank.Properties.Resources.bulletImage;
 
            this.maxWidth = maxWidth;
            this.maxHeight = maxHeight;
        }
 
        public void Reset()
        {
            Location = new Point(-10, -10);
            IsRunning = false;
        }
 
        public void StartShoot(Point location, Size size, _Orientation orientation)
        {
            switch (orientation)
            {
                case _Orientation.Up:
                    {
                        Location = new Point(location.X + size.Width / 2 - Size.Width / 2, location.Y - Size.Height / 2);
                        break;
                    }
 
                case _Orientation.Down:
                    {
                        Location = new Point(location.X + size.Width / 2 - Size.Width / 2, location.Y + size.Height - Size.Height / 2);
                        break;
                    }
 
                case _Orientation.Left:
                    {
                        Location = new Point(location.X - Size.Width / 2, location.Y + size.Height / 2 - Size.Height / 2);
                        break;
                    }
 
                case _Orientation.Right:
                    {
                        Location = new Point(location.X + size.Width - Size.Width / 2, location.Y + size.Height / 2 - Size.Height / 2);
                        break;
                    }
            }
            IsRunning = true;
            Or = orientation;
        }
 
        public void Update(ref List<_Block> blocks)
        {
            int dx = 0, dy = 0;
            if (IsRunning)
            {
                if (Or == _Orientation.Up)
                    dy = -Velocity;
                else
                    if (Or == _Orientation.Down)
                        dy = Velocity;
                    else
                        if (Or == _Orientation.Left)
                            dx = -Velocity;
                        else
                            if (Or == _Orientation.Right)
                                dx = Velocity;
 
                Rectangle rect = new Rectangle(Location, Size);
                rect.Offset(dx, dy);
 
                bool intersect = false;
 
                for (int i = 0; i < blocks.Count; i++)
                {
                    if (RectIntersect(rect, new Rectangle(blocks[i].Location, blocks[i].Size)))
                    {
                        intersect = true;
                        blocks.RemoveAt(i);
                        i--;
                    }
                }
 
                if (rect.Top > 0 && rect.Bottom < maxHeight && rect.Left > 0 && rect.Right < maxWidth&&!intersect)
                    Location = rect.Location;
                else
                    Reset();
            }
        }
 
        public void Draw(Graphics graphics)
        {
            graphics.DrawImage(Image, Location);
        }
 
        /// <summary>
        /// проверяет, пересекаются ли 2 прямоугольника
        /// </summary>
        /// <param name="rect1"> 1 прямоугольник </param>
        /// <param name="rect2"> 2 прямоугольник </param>
        /// <returns> true - пересекаются, false - не пересекаются </returns>
        bool RectIntersect(Rectangle rect1, Rectangle rect2)
        {
            bool intersect = false;
 
            if (rect1.Left >= rect2.Left && rect1.Left <= rect2.Right && rect1.Top >= rect2.Top && rect1.Top <= rect2.Bottom
               || rect1.Left >= rect2.Left && rect1.Left <= rect2.Right && rect1.Bottom >= rect2.Top && rect1.Bottom <= rect2.Bottom
               || rect1.Right >= rect2.Left && rect1.Right <= rect2.Right && rect1.Top >= rect2.Top && rect1.Top <= rect2.Bottom
               || rect1.Right >= rect2.Left && rect1.Right <= rect2.Right && rect1.Bottom >= rect2.Top && rect1.Bottom <= rect2.Bottom)
                intersect = true;
 
            return intersect;
        }
    }
}

пишу танки. это класс врага. на форму их добавляется множество. скорость, направление движения и тп у каждого можно менять. обновление параметров(движение и всяческие проверки) происходят в методе update(). этот метод вызывается в таймере
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.03.2012, 19:08
Помогаю со студенческими работами здесь

Менять скорость передачи данных TCP/IP из скрипта? (VBS,WSH,BAT, PowerShall)
Hi guys and ladies ) Есть необходимость в написании следующего скрипта, ПО, батника, вообще чего либо угодно (VBS,WSH,BAT, PowerShall),...

Найти скорость движения автомобиля, если известны пройденный путь и время
Привет!Люди,помогите решить задачу!Т.е написать программу и составить блок-схему!!!!Очень прошу . Найти скорость движения автомобиля ,...

Дано время движения автомобиля и пройденный путь. Найти его скорость
Здравствуйте! Помогите найти ошибку. Program skorost; Var s,v,t:^real; Begin new(s); new(t); ...

Нужно ли менять на 8600gt менять термопасту ?
Нужно ли менять на ней термопасту? И если да, то как?

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru