Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
luckyevil95
0 / 0 / 0
Регистрация: 12.03.2016
Сообщений: 11
1

Не работает цикл перерисовки

15.03.2016, 03:08. Просмотров 247. Ответов 1
Метки нет (Все метки)

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
 
namespace Wizard_Wars
{
    class MainForm : Form
    {
        private Image frame = Wizard_Wars.Properties.Resources.area;
        private Rectangle frameForm = new Rectangle(0, 0, 10000, 10000);
        private Timer timer = new Timer();
        private Graphics g;
        private Player player;        
 
        public MainForm()
        {
            FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            KeyPreview = true;
            WindowState = FormWindowState.Maximized;
            TopMost = true;
            Icon = new Icon("ico.ico");
            Text = "Wizard Wars";
 
            Paint += new PaintEventHandler(MainForm_Paint);
            KeyDown += new KeyEventHandler(MainForm_KeyDown);
 
            player = new Player(400, 400);
        }
 
        private void MainForm_Paint(object Sender, PaintEventArgs e)
        {
            g = e.Graphics;
            
            StartRender();
        }
 
        private void StartRender()
        {
            timer.Tick += new EventHandler(timer_Tick);
            timer.Interval = 20;
            timer.Start();
        }
 
        private void timer_Tick(object sender, EventArgs e)
        {
            Render();
        }
 
        private void Render()
        {
            g.DrawImage(frame, frameForm);
 
            player.Render(g);
 
            g.Dispose();
        }
 
        private void StopRender()
        {
            timer.Stop();
        }
 
        private void MainForm_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Escape)
            {
                StopRender();
                Dispose();
            }
 
            if (e.KeyCode == Keys.A)
                player.Move("Left");
            if (e.KeyCode == Keys.D)
                player.Move("Right");
            if (e.KeyCode == Keys.W)
                player.Move("Up");
            if (e.KeyCode == Keys.S)
                player.Move("Down");
        }
    }
}
Собственно, при компиляции ошибок не выдает, но когда уже прога запустилась ошибка - недопустимый параметр.

************** Текст исключения **************
System.ArgumentException: Недопустимый параметр.
в System.Drawing.Graphics.CheckErrorStatus(Int32 status)
в System.Drawing.Graphics.DrawImage(Image image, Int32 x, Int32 y, Int32 width, Int32 height)
в System.Drawing.Graphics.DrawImage(Image image, Rectangle rect)
в Wizard_Wars.MainForm.Render() в E:\VS Projects\Wizard Wars\Wizard Wars\MainForm.cs:строка 54
в Wizard_Wars.MainForm.timer_Tick(Object sender, EventArgs e) в E:\VS Projects\Wizard Wars\Wizard Wars\MainForm.cs:строка 49
в System.Windows.Forms.Timer.OnTick(EventArgs e)
в System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Че не так то сделал? Как поправить можно?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2016, 03:08
Ответы с готовыми решениями:

Очередь перерисовки GDI+
Господа, нужна ваша помощь =) Итак, имеем форму, на ней две панели. У каждой...

Событие перерисовки UserControl
Создаю свой контрол с событием readonly public bool ReadOnly { get;...

Изменение ширины столбца ListView без перерисовки
Здравствуйте, Имеется стандартный ListView в режиме Detail. В нем X...

Смена фона элемента без перерисовки графики
Здравствуйте! Возникла такая проблема, скажем у меня имеется pictureBox и в нем...

Перерисовка линий без перерисовки всего графика
на form1 находится panel1 с двумя событиями Paint и MouseMove как сделать...

1
Storm23
Эксперт .NETАвтор FAQ
6564 / 3966 / 1447
Регистрация: 11.01.2015
Сообщений: 5,139
Записей в блоге: 32
15.03.2016, 09:09 2
luckyevil95, Вы совершенно неправильно используете Graphics.
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
    class MainForm : Form
    {
        private Image frame = Wizard_Wars.Properties.Resources.area;
        private Rectangle frameForm = new Rectangle(0, 0, 10000, 10000);
        private Timer timer = new Timer();
        private Player player;
 
        public MainForm()
        {
            FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            KeyPreview = true;
            WindowState = FormWindowState.Maximized;
            TopMost = true;
            Icon = new Icon("ico.ico");
            Text = "Wizard Wars";
 
            Paint += new PaintEventHandler(MainForm_Paint);
            KeyDown += new KeyEventHandler(MainForm_KeyDown);
 
            player = new Player(400, 400);
 
            timer.Tick += delegate { Invalidate(); };
            timer.Interval = 20;
            timer.Start();
        }
 
        private void MainForm_Paint(object Sender, PaintEventArgs e)
        {
            Render(e.Graphics);
        }
 
        private void Render(Graphics g)
        {
            g.DrawImage(frame, frameForm);
            player.Render(g);
        }
 
        private void MainForm_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Escape)
            {
                Dispose();
            }
 
            if (e.KeyCode == Keys.A)
                player.Move("Left");
            if (e.KeyCode == Keys.D)
                player.Move("Right");
            if (e.KeyCode == Keys.W)
                player.Move("Up");
            if (e.KeyCode == Keys.S)
                player.Move("Down");
        }
    }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2016, 09:09

Не работает цикл
Есть метод Генератор(); Его основная задача сгенерировать случайное число . При...

Отображение точек на форме, нарисованных мышью, без перерисовки формы
Здравствуйте. Есть прога. Тыкаешь мышкой и на том месте появляется точка....

Цикл по DGV не работает
Почему то не работает или работает, но не виден ход цикла: private void...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru