С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.74/19: Рейтинг темы: голосов - 19, средняя оценка - 4.74
12 / 12 / 2
Регистрация: 11.04.2011
Сообщений: 77

Игра. Проблемы с плавным движением объектов

15.03.2012, 17:54. Показов 3607. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
господа а на C# нельзя пример у меня форма должна вращаться увеличиваясь в размере а она при этом мерцает и DoubleBuffered не помогает
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.03.2012, 17:54
Ответы с готовыми решениями:

Управление движением объектов с клавиатуры
Постоянное движение нескольких графических объектов с отражением от границ окна (по таймеру). Начальные положение и скорости объектов...

Создание мини-игры и первые проблемы с движением объектов
Доброго всем времени суток, решили с другом создать мини-игрушку, но вот возникли несколько проблем, а именно мерцание объекта при...

Проблемы с плавным переливанием градиента
Нарисовал градиент, сделал плавный переход, но почему-то не работает, объясните пожалуйста, что я сделал не так, либо забыл. Ссылка -...

20
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
16.03.2012, 22:50
Код секретный что-ли? Здесь экстрасенсов нет.
Выкладывай давай. Посмотрим.
0
12 / 12 / 2
Регистрация: 11.04.2011
Сообщений: 77
17.03.2012, 12:52  [ТС]
вот код это как бы программа заставка


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
private void timer1_Tick(object sender, EventArgs e)
        {
            if (x < 11)
            {
              this.Location = new Point(Screen.PrimaryScreen.Bounds.Width / 2, Screen.PrimaryScreen.Bounds.Height / 2);
              bm = new Bitmap(this.BackgroundImage);
            }
            this.Location = new Point(Screen.PrimaryScreen.Bounds.Width / 2-this.Width/2, Screen.PrimaryScreen.Bounds.Height / 2-this.Height/2);
            this.Visible = true;
            peremeshen();
        }
 
        public void peremeshen()
        {
            DrawRotateImage(bm, ygol, this.Width / 2, this.Height / 2, this.Width, this.Height);
            ygol = ygol + 10;
            this.Visible = false;
            x = x + 2;
            y = y + 2;
            if (x > Screen.PrimaryScreen.Bounds.Width)
            {
                x = 10;
                y = 10;
                if (i > 0)
                {
                    i = i - 1;
                }
                else { i = img.Length-1; }
            }
                this.BackgroundImage = img[i];
            this.Size= new Size(x, y);
            if ((Cursor.Position.X > 100) | (Cursor.Position.X < 100) | (Cursor.Position.Y > 100) | (Cursor.Position.Y < 100))
            {
                Close();
            }
        }
 
        public void DrawRotateImage(Bitmap Image, int angle, int x, int y, int w, int h) // Рисует BitMap под угол и с масштабом
        {
            Bitmap i;
            i = Image;
            Graphics g = CreateGraphics();
            Matrix m = new Matrix();
            m.RotateAt(angle, new Point(x, y));
            g.Transform = m;
            g.DrawImage(i, x-this.Width/2 , y-this.Height/2 , w, h);
        }
0
18.03.2012, 00:48
 Комментарий модератора 
egik, задавайте вопросы в нужном разделе. Раздел VB не может включать обсуждения решений на C# по определению
0
12 / 12 / 2
Регистрация: 11.04.2011
Сообщений: 77
18.03.2012, 09:49  [ТС]
Цитата Сообщение от Памирыч Посмотреть сообщение
egik, задавайте вопросы в нужном разделе. Раздел VB не может включать обсуждения решений на C# по определению
но в своем разделе C# я ни чего не нашел
0
c#
 Аватар для temich-92
95 / 95 / 27
Регистрация: 25.03.2011
Сообщений: 290
18.03.2012, 10:22
не нужно постоянно объявлять
C#
1
Graphics g = CreateGraphics();
нужно сделать это глобально
C#
1
2
3
4
5
6
7
8
9
10
11
Graphics g = CreateGraphics();
public void DrawRotateImage(Bitmap Image, int angle, int x, int y, int w, int h) // Рисует BitMap под угол и с масштабом
        {
            Bitmap i;
            i = Image;
         
            Matrix m = new Matrix();
            m.RotateAt(angle, new Point(x, y));
            g.Transform = m;
            g.DrawImage(i, x-this.Width/2 , y-this.Height/2 , w, h);
        }
и чтобы не мерцало используйте BufferedGraphics
1
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
18.03.2012, 16:13
Цитата Сообщение от temich-92 Посмотреть сообщение
и чтобы не мерцало используйте BufferedGraphics
Вот тут я рисовал так, чтобы не мерцало: https://www.cyberforum.ru/csha... ost2328972 (проект прикреплён к сообщению)

Добавлено через 1 минуту
Вот ещё тут проект можешь скачать, ничего собого, но всё же думаю будет немножко полезно: https://www.cyberforum.ru/csha... ost2366606 (там рисование прозрачного прямоугольника поверх картинки при движении курсора мыши с зажатой левой кнопкой по картинке, не мигает вообще).
1
12 / 12 / 2
Регистрация: 11.04.2011
Сообщений: 77
18.03.2012, 18:13  [ТС]
спасибо конечно но у меня форма она вращается увеличиваясь в размере и у нее BackgroundImage это картинка с разрешением 1024_768
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
18.03.2012, 18:15
Можешь скинуть исходники? Хочу глянуть как форму вращаешь.
0
12 / 12 / 2
Регистрация: 11.04.2011
Сообщений: 77
18.03.2012, 18:27  [ТС]
Цитата Сообщение от egik Посмотреть сообщение
спасибо конечно но у меня форма она вращается увеличиваясь в размере и у нее BackgroundImage это картинка с разрешением 1024_768
извеняюсь не правильно выразился
у меня форма и на ней вращается увеличиваясь в размере картинка- BackgroundImage с разрешением 1024_768
а исходник вверху
0
12 / 12 / 2
Регистрация: 11.04.2011
Сообщений: 77
18.03.2012, 18:40  [ТС]
Цитата Сообщение от egik Посмотреть сообщение
извеняюсь не правильно выразился
у меня форма и на ней вращается увеличиваясь в размере картинка- BackgroundImage с разрешением 1024_768
а исходник вверху
а вот вращать форму это было бы интересно
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
18.03.2012, 18:41
Ну и в чём проблема? Я же тебе дал ссылки на проекты, переделай и всё. Скинь исходник, а то долго самому всё мутить, пока получу то что у тебя. Попробую помочь. Перед упаковкой в zip/rar сделай "Очистить решение", чтобы меньше весила.
1
12 / 12 / 2
Регистрация: 11.04.2011
Сообщений: 77
18.03.2012, 19:18  [ТС]
у тебя примеры под 2010 а у меня VS2008 и я прогу делаю под netframework2.0 чтоб на любой винде работала, конечно вращать надо пикчербокс но результат тот же-мерцает
а пример вот
Вложения
Тип файла: rar заставка1.rar (1.33 Мб, 19 просмотров)
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
18.03.2012, 21:52
Короче попробовал я полностью всё рисовать. Отрисовал из маленьких изображений одно большое размером с экран. Потом в буфере рисую эту ранее отрисованную картинку (фон) и поверх неё движущуюся другую картинку. Рисует всё это GDI+ поэтому тормозит (у меня разрешение 1920х1080). По идее надо перерисовывать только ту часть изображения, которая изменилась (ну так собственно форма вроде и отрисовывается).
Вот впринципе можно как-то так:
Код
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class MainForm : Form
    {
        Point _cursorPosition;
 
        Point _pictPos;
        Bitmap _bgrBitmap;
        Bitmap _frgBitmap;
        Graphics _gr;
        //Graphics _bufGraphics; //Тестил вместо BufferedGraphics _bufGraphics;
        BufferedGraphics _bufGraphics;
 
        public MainForm()
        {
            InitializeComponent();
            FormBorderStyle = (FormBorderStyle.None);
            Size = new Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
            Location = new Point(0, 0);
            TopMost = true;
            _cursorPosition = Cursor.Position;
            Cursor.Hide();
 
            _pictPos = new Point(0, 0);
            _bgrBitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
            //1 раз отрисовываем фон на _bgrBitmap (как бы текстурируем всё изображение частями маленького изображения)
            RenderBackground(Properties.Resources.Огонь_темный, _bgrBitmap);
            _frgBitmap = Properties.Resources.Метал;
            InitializeGraphics();
 
            Application.Idle += new EventHandler(Application_Idle);
            System.Timers.Timer timerCoord = new System.Timers.Timer();
            timerCoord.Interval = 20;
            timerCoord.Elapsed += new System.Timers.ElapsedEventHandler(CoordinateChangerTimer_Elapsed);// += new EventHandler(CoordinateChangerTimer_Tick);
            timerCoord.Start();
        }
 
        void CoordinateChangerTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            _pictPos = new Point(_pictPos.X + 1, _pictPos.Y + 1);
        }
 
        private void RenderBackground(Bitmap bmp, Bitmap bgrBitmap)
        {
            using (Graphics gr = Graphics.FromImage(bgrBitmap))
            {
                int quntityX = bgrBitmap.Width / bmp.Size.Width;
                int quntityY = (int)Math.Ceiling((double)bgrBitmap.Height / (double)bmp.Size.Height);
 
                for (int x = 0; x < quntityX; x++)
                    for (int y = 0; y < quntityY; y++)
                        gr.DrawImage(bmp, x * bmp.Size.Width, y * bmp.Size.Height);
            }
        }
 
        void Application_Idle(object sender, EventArgs e)
        {
            if (Cursor.Position != _cursorPosition)
            {
                Close();
                return;
            }
 
            RenderScene();
        }
 
        private void RenderScene()
        {
            _bufGraphics.Graphics.Clear(BackColor);
            _bufGraphics.Graphics.DrawImage(_bgrBitmap, 0, 0);
            _bufGraphics.Graphics.DrawImage(_frgBitmap, _pictPos);
            _bufGraphics.Render();
        }
 
        private void InitializeGraphics()
        {
            _gr = CreateGraphics();
            _bufGraphics = BufferedGraphicsManager.Current.Allocate(_gr, ClientRectangle);
        }
 
        //private void RenderScene()
        //{
        //    _bufGraphics.Clear(BackColor);
        //    _bufGraphics.DrawImage(_bgrBitmap, 0, 0);
        //    _bufGraphics.DrawImage(_frgBitmap, _pictPos);
        //    _gr.DrawImage(_bufBmp, 0, 0);
        //}
 
        //Bitmap _bufBmp;
        //private void InitializeGraphics()
        //{
        //    _bufBmp = new Bitmap(ClientSize.Width, ClientSize.Height);
        //    _gr = CreateGraphics();
        //    _bufGraphics = Graphics.FromImage(_bufBmp);
        //}
    }
}


А форма летающая поверх другой как мне кажется вообще неверный подход, я даже не стал заморачиваться. Или как-то рисуй с помощью DirectX библиотек или OpenGl или попробуй в WPF проекте, там всё рисуется видеокартой в отличии от Windows Forms.
Вложения
Тип файла: zip WinForms_DrawingImgs.zip (141.0 Кб, 12 просмотров)
1
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
18.03.2012, 21:57
Кстати, если System.Timers.Timer заменить на System.Windows.Forms.Timer, то подёргиваний летящей картинки нету, но походу при торможении отрисовки будет также тормозить получение новых координат.
1
 Аватар для Yukikaze
352 / 331 / 49
Регистрация: 12.12.2011
Сообщений: 563
19.03.2012, 01:46
Решение в корне неправильное, зачем вращать форму если нужно вращать ее содержимое?
Вот хороший пример с зарубежного портала
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
using System;
using System.Drawing;
using System.ComponentModel;
using System.Windows.Forms;
using System.Threading;
 
namespace DrawAnimation
{
    /// <summary>
    /// Summary description for Form1.
    /// </summary>
    public class Form1 : Form
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private Container components = null;
 
 
        /// <summary>
        /// The rectangle that the smaller rectangle follows.
        /// </summary>
        private Rectangle mRect = new Rectangle(10, 10, 100, 100);
 
        /// <summary>
        /// A timer to move the rectangle (causes the animation)
        /// </summary>
        private System.Threading.Timer mTimer = null;
 
        /// <summary>
        /// The point where the rectangle is along the path.
        /// </summary>
        private Point mPoint;
 
        /// <summary>
        /// The width of the moving rectangle.
        /// </summary>
        private const int RECT_WIDTH = 10;
 
        /// <summary>
        /// The height of the moving rectangle.
        /// </summary>
        private const int RECT_HEIGHT = 10;
 
 
        /// <summary>
        /// Animation rate in milliseconds.
        /// </summary>
        private const int ANIMATION_RATE = 30;
 
        public Form1()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();
 
            //You have to do this to remove the flicker
            this.SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.DoubleBuffer, true);
 
            //Initialize the point to start in the top left corner
            mPoint = new Point(mRect.Location.X, mRect.Location.X);
 
 
            //Set up the function to call when the timer fires
            TimerCallback timercb = new TimerCallback(TimerCB);
 
            //Set up the timer to fire at the set animation rate
            mTimer = new System.Threading.Timer(timercb, null, ANIMATION_RATE, ANIMATION_RATE);
 
        }
 
 
        /// <summary>
        /// Move the point to the next location on the rectangle
        /// </summary>
        private void MovePoint()
        {
 
            //Move along the right side
            if (mPoint.X == mRect.Right)
            {
 
                //Only do it if we aren't at the bottom of the right edge
                if (mPoint.Y != mRect.Bottom)
                {
                    mPoint.Offset(0, 1);
 
                    return;
                }
            }
 
 
            //Move along the bottom side
            if (mPoint.Y == mRect.Bottom)
            {
 
                //Only do it if we aren't at the left side of the bottom edge
                if (mPoint.X != mRect.Left)
                {
                    mPoint.Offset(-1, 0);
 
                    return;
                }
            }
 
 
            //Move along the left side
            if (mPoint.X == mRect.Left)
            {
 
                //Only do it if we aren't at the top side of the left edge
                if (mPoint.Y != mRect.Top)
                {
                    mPoint.Offset(0, -1);
                }
            }
 
 
            //Move along the top side
            if (mPoint.Y == mRect.Top)
            {
                //Only do it if we aren't at the right side of the top edge
                if (mPoint.X != mRect.Right)
                {
                    mPoint.Offset(1, 0);
                }
            }
        }
 
 
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose(disposing);
        }
 
        #region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.Size = new System.Drawing.Size(300, 300);
            this.Text = "Form1";
        }
        #endregion
 
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.Run(new Form1());
        }
 
        /// <summary>
        /// Handle painting the form
        /// </summary>
        /// <param name="e"></param>
        protected override void OnPaint(PaintEventArgs e)
        {
            //Get a reference to the graphics object
            Graphics g = e.Graphics;
 
            //Fill the background of the client area
            g.FillRectangle(SystemBrushes.Control, this.ClientRectangle);
 
            //Draw the big rectangle track
            g.DrawRectangle(Pens.Black, mRect);
 
            //Clone the point
            Point p = new Point(mPoint.X, mPoint.Y);
 
            //Offset it by half the width and height of the desired rectangle
            p.Offset(-(RECT_WIDTH / 2), -(RECT_HEIGHT / 2));
 
            //Draw the little moving rectangle
            g.FillRectangle(Brushes.White, new Rectangle(p, new Size(RECT_WIDTH, RECT_HEIGHT)));
        }
 
 
        /// <summary>
        /// This is called when the timer fires.
        /// </summary>
        /// <param name="o"></param>
        protected void TimerCB(object o)
        {
 
            //Move the rectangle
            MovePoint();
 
            //Redraw the form
            Invalidate();
        }
    }
}

В данном примере очень хорошо описано как рисовать на форме в Win Forms, в принципе там уже все сделано, за вами остается только алгоритм вращения спрайта
ЗЫ И небольшая подсказка
C#
1
g.FillRectangle(new TextureBrush(new Bitmap("path")), new Rectangle(Location, Size));
1
5 / 5 / 0
Регистрация: 23.11.2010
Сообщений: 28
19.03.2012, 02:23
Цитата Сообщение от Памирыч Посмотреть сообщение
egik, задавайте вопросы в нужном разделе. Раздел VB не может включать обсуждения решений на C# по определению
У этих языков разницы как кот наплакал, так что я думаю не составит людям знающим один из языков добавить точку с запятой и сделать другое объявление переменных, а ну да и убрать юзинги или же добавить
1
Почетный модератор
 Аватар для Памирыч
23248 / 9160 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
19.03.2012, 06:21
Цитата Сообщение от DokaHP Посмотреть сообщение
У этих языков разницы как кот наплакал
Я про VB 6

egik, DokaHP, на будущее: на коментарии и замечания модераторов отвечать не нужно
1
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
19.03.2012, 08:30
Цитата Сообщение от Yukikaze Посмотреть сообщение
В данном примере очень хорошо описано как рисовать на форме в Win Forms, в принципе там уже все сделано, за вами остается только алгоритм вращения спрайта
Опробовал данный код. Если взять мой пример выше и заменить отрисовку DrawImage на FillRectangle, то рисуется с одинаковой скоростью (TextureBrush создал я 1 раз). При том мигает экран просто зверски. Сейчас ради интереса много всего перепробовал. Даже переопределил OnPaintBackground для формы и рисовал фоновую картинку там, а в OnPaint рисовал вращающуюся текстуру, так посмотрел в диспетчер задач, там отъедало по гигабайту и сразу же очищалось до ~100 мегабайт и так постоянно при том гигабайт набирается и сбрасывается очень быстро.

Далее я просто поставил в качестве BackgroundImage нужную текстуру и в OnPaint рисовал нужный рисунок, никаких торомозов, память не кушается, процессор не нагружает, всё рисуется. Короче фиг поймёшь как там всё внутри организовано, что такая убойная разница между внутренними методами рисования и рисованием вручную.

Короче, как я понял самый оптимальный способ рисования такой (таймер сам поменяешь, если это принципиально и картинки в ресурсах из проекта автора темы):
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
using System;
using System.Drawing;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class MainForm : Form
    {
        int _angle;
        Point _cursorPosition;
        Point _pictPos;
        TextureBrush _frgTexture;
 
        public MainForm()
        {
            InitializeComponent();
            FormBorderStyle = (FormBorderStyle.None);
            Size = new Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
            Location = new Point(0, 0);
            TopMost = true;
            Cursor.Hide();
            _cursorPosition = Cursor.Position;
            _pictPos = new Point(0, 0);
            
            Bitmap bgrBitmap = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
            _frgTexture = new TextureBrush(Properties.Resources.Метал);
 
            System.Timers.Timer timerLogic = new System.Timers.Timer();
            timerLogic.Interval = 20;
            timerLogic.Elapsed += new System.Timers.ElapsedEventHandler(LogicUpdateTimer_Elapsed);
            timerLogic.Start();
 
            BackgroundImage = Properties.Resources.Огонь_темный;
 
            DoubleBuffered = true;
            Application.Idle += new EventHandler(Application_Idle);
        }
 
        void LogicUpdateTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            _pictPos = new Point(_pictPos.X + 1, _pictPos.Y + 1);
            _frgTexture.RotateTransform(_angle++);
            Invalidate();
        }
 
        void Application_Idle(object sender, EventArgs e)
        {
            if (Cursor.Position != _cursorPosition)
            {
                Close();
                return;
            }
        }
 
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            e.Graphics.FillRectangle(_frgTexture, _pictPos.X, _pictPos.Y, _frgTexture.Image.Width, _frgTexture.Image.Height);
        }
    }
}
Добавлено через 14 минут
А вообще даже разбираться особо неохота что да как, мне кажется лучше сразу подобное писать на WPF. Там вообще не должно быть таких проблем с тормозами, хотя кто его знает, там ведь тоже надо знать как правильно рисовать. Я вчера пробовал, смог сделать аналогичное тому, что сейчас на WindowsForms, но пока сомнения что я всё полностью правильно сделал. Но картинка летит по экрану намного плавнее, просто реально заметно. Но опять же, я там сделал отрисовку фона и отрисовку картинки в лоб, также как и поначалу в Windows Forms, память съедает также зверски как и на формах съедало. Нужно попробовать через ImageBrush и фигуры, думаю проблемы отпадут. Если что-то получится, и вообще инетерес не пропадёт, выложу вариант на WPF.
1
6 / 6 / 1
Регистрация: 08.09.2011
Сообщений: 36
19.03.2012, 16:26
Если на WPF, то вот тут есть пример вращения окна.
Ну и трансформация объектов есть. Только мне не совсем понятен будет выбор WPF для игры.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.03.2012, 16:26
Помогаю со студенческими работами здесь

Unity c#, проблемы с движением
Здравствуйте! Я новичок в программировании, и у меня возникла проблема с движением персонажа. Я вставил рыцаря и написал самый простой код...

Управление движением графических объектов с клавиатуры
Здравствуйте! Возможно ли это? Если да, то каким образом? Я знаю, как запустить движение, но можно ли добиться того, чтобы движение...

Графика. Управление движением объектов с клавиатуры
Есть куча Line, Circle, Arc и тд, т.е. некий рисунок, ему нужно придать жизнь т.е. что бы он начал двигаться. Подскажите что запихать ещё в...

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

Проблемы с созданием объектов
Описан класс TPlanet: TPlanet = class (TObject) public name: string; x,y,m,r,px,py,vx,vy,ax,ay: real; u,v,up,vp:integer; ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
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-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru