Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11833
Последний выпуск: 19.06.2015

Пустое поле WindowsForms C#

87K
31 мая 2016 года
AltAsche
4 / / 24.05.2016
Пишу простую игру "Лабиринт". Решил нарисовать стены графикой, а сделать их непроходимыми с помощью определения цвета пикселя. Стал прописывать условия и тут заметил, что в формах у меня отрисовывается только объект PictureBox "player" (квадрат 10х10) - до этого отрисовывалось все. Попробовал делать скриншоты сразу после рисования стен - ничего не рисуется. Подозреваю, что часть проблем у меня из-за того, что вызываю функцию из функции. Если видите какие-то ошибки в коде или просто можете что-то подсказать, жду ваших ответов.
Код:
namespace Catacombs
{
    public partial class Menu : Form
    {
        bool right;
        bool left;
        bool up;
        bool down;
        public Menu()
        {
            InitializeComponent();
        }          

        // Создаем кисть и указываем, что рисовать (Начало)
        SolidBrush blackBrush = new SolidBrush(Color.Black);
        private void Menu_Paint(object sender, PaintEventArgs e)
        {            
            e.Graphics.FillRectangle(blackBrush, 0, 0, 10, 500);
            e.Graphics.FillRectangle(blackBrush, 100, 100, 10, 200);      
        }    
        // Создаем кисть и указываем, что рисовать (Конец)

        // Элементы управления игроком (Начало)
        private void timer1_Tick(object sender, EventArgs e)
        {      
            if (right == true) {player.Left += 3;}
            if (left == true) { player.Left -= 3; }
            if (up == true) { player.Top -= 3; }
            if (down == true) { player.Top += 3; }

        }

        private void Menu_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode ==Keys.Right) { right = true; }
            if (e.KeyCode == Keys.Left) { left = true; }
            if (e.KeyCode == Keys.Up) { up = true; }
            if (e.KeyCode == Keys.Down) { down = true; }
        }

        private void Menu_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Right) { right = false; }
            if (e.KeyCode == Keys.Left) { left = false; }
            if (e.KeyCode == Keys.Up) { up = false; }
            if (e.KeyCode == Keys.Down) { down = false; }

        }
        // Элементы управления игроком (Конец)

        //Скриншот окна (Начало)
        public static Bitmap CaptureScreen()
        {
            Bitmap BMP = new Bitmap(System.Windows.Forms.Form.ActiveForm.Bounds.Width,
                                    System.Windows.Forms.Form.ActiveForm.Bounds.Height,
                                    System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            System.Drawing.Graphics GFX = System.Drawing.Graphics.FromImage(BMP);
            GFX.CopyFromScreen(System.Windows.Forms.Form.ActiveForm.Bounds.X,
                                System.Windows.Forms.Form.ActiveForm.Bounds.Y,
                                0, 0,
                                System.Windows.Forms.Form.ActiveForm.Bounds.Size,
                                System.Drawing.CopyPixelOperation.SourceCopy);
           
            return BMP;
        }
        //Скриншот окна (Конец)
             
        //Определение цвета пикселя (Начало)
            public static Color PC(int x,int y)
        {
            Bitmap myBitmap = CaptureScreen();
            Color pixelColor = myBitmap.GetPixel(x+8, y+30);
            return pixelColor;
        }
        //Определение цвета пикселя (Конец)

       // Делаем стены непроходимыми (Начало)
        private void player_LocationChanged(object sender, EventArgs e)
        {
            if ((PC(player.Location.X - 1, player.Location.Y) == Color.Black) || (PC(player.Location.X - 1, player.Location.Y + 10) == Color.Black)) { left = false; }
        }
        // Делаем стены непроходимыми (Не Конец)
    }
}
87K
31 мая 2016 года
AltAsche
4 / / 24.05.2016
Переписал весь код в точности в другой проект. Графика появилась. Но игрок все равно проходит сквозь стены :/
1.9K
06 июня 2016 года
Kuzya
183 / / 19.03.2008
я так понимаю у тебя нет системы координат, введи их в игру, а потом когда координаты игрока будут соприкасаться с координатами стены, просто "банешь" клавишу с которой игрок тыкается в стену.
87K
06 июня 2016 года
AltAsche
4 / / 24.05.2016
Цитата: Kuzya
я так понимаю у тебя нет системы координат, введи их в игру, а потом когда координаты игрока будут соприкасаться с координатами стены, просто "банешь" клавишу с которой игрок тыкается в стену.

Спасибо, а не подскажете событие, в котором описывать координаты и метод бы. Я так понял, что, в принципе, можно указать координаты "запретных" пикселей?

1.9K
06 июня 2016 года
Kuzya
183 / / 19.03.2008
Цитата: AltAsche

Спасибо, а не подскажете событие, в котором описывать координаты и метод бы. Я так понял, что, в принципе, можно указать координаты "запретных" пикселей?

Это ты сам придумываешь,

319
06 июня 2016 года
UserNet2008
678 / / 03.04.2010
см. Тему Сделать стены в игре "Лабиринт"

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог