10 / 10 / 6
Регистрация: 16.10.2013
Сообщений: 72
1

Задержки звука при использовании двойной буферизации

01.11.2014, 13:46. Показов 944. Ответов 1
Метки нет (Все метки)

Пишу простую игрушку, где летят самолеты и нужно их сбить ракетой. Проблема встала с двойной буферизацией. Использую ее для того, чтобы избежать мерцания экрана при перерисовке.

Если Двойную Буферизацию не использовать, то все нормально, звук запуска и сбития самолета воспроизводится во время, самолет и ракета при столкновении исчезают тоже, но как только я прописываю в форму
C#
1
DoubleBuffered = true;
все меняется. Самолеты начинают лететь медленнее, с разной скоростью (рывками), при столкновении самолета и ракеты ракета пролетает сквозь самолет, и потом только происходит взрыв, звук вообще отстает а иногда и не проигрывается.
Но зато картинка перестает мигать=)

Вот сам проект:
тест.zip
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.11.2014, 13:46
Ответы с готовыми решениями:

Реализация двойной буферизации
Есть pictureBox создаваемый в коде. Я реализовал возможность его передвижения мышкой, но проблема в...

Мерцание при двойной буферизации
Вот пытаюсь сделать что-то вроде игры. не могу убрать мерцание. двойную буферизацию пробовал, не...

Как поменять цвет фона при двойной буферизации?
Ребята помоги пожалуйста) У меня есть программа "Графический редактор" Там присутствует Двойная...

Ускорение двойной буферизации
Недавно вычитал что при создании 2 буфера лучше использовать CreateDIBSection вместо...

1
10 / 10 / 6
Регистрация: 16.10.2013
Сообщений: 72
01.11.2014, 13:54  [ТС] 2
UPD:
Я понял что задержка при обработки взрыва (то, что самолет взрывается после того, как ракета уже пролетела его) связана с отрисовкой анимации взрыва
Заккоментировал эти строки:
C#
1
2
3
thrBoom = new Thread(new ParameterizedThreadStart(this.Boom));
                        string str = Convert.ToString(((Airplane)al[i]).X) + " " + Convert.ToString(((Airplane)al[i]).Y);
                        thrBoom.Start(str);
и взрыв сразу после столкновения ракеты и самолета (но без анимации, т.к. я ее отключил). Но задержка по звуку осталась...
Как можно реализовать анимацию взрыва, чтобы она не вызывала лагов?
вот метод прорисовки взрыва:
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
private void Boom(object positionOfRacket)    //отрисовка анимации взрыва
        {
            sp.Play();
            int xr = Convert.ToInt32(((string)positionOfRacket).Substring(0, ((string)positionOfRacket).IndexOf(" ")));
            int index = ((string)positionOfRacket).IndexOf(" ") + 1;
            int index2 = ((string)positionOfRacket).Length;
            int yr = Convert.ToInt32(((string)positionOfRacket).Substring(((string)positionOfRacket).IndexOf(" ") + 1, ((string)positionOfRacket).Length - ((string)positionOfRacket).IndexOf(" ") - 1));
            Graphics g = this.CreateGraphics();
            for (int n = 0, xx = 0, yy = 0; n < 5; n++)
            {
                for (int k = 0; k < 5; k++)
                {
                    rect = new Rectangle(xx, yy, 65, 65);
                    for (int z = 0; z < 10; z++)
                    {
                        g.DrawImage(imgBoom, xr, yr, rect, GraphicsUnit.Pixel);
                    }
                    xx += 65;
                }
                yy += 65;
                xx = 0;
            }
            thrBoom.Abort();
        }
UPD2: Еще я понял что т.к. мигает фоновое изображение оно тоже постоянно перерисовывается! Как можно сделать, чтобы background не перерисовывая при каждом обновлении окна?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.11.2014, 13:54
Помогаю со студенческими работами здесь

Программа виснет при использовании задержки
В общем проблема в следующем: Когда я использую sleep(), то программа &quot;виснет&quot;, то есть я не могу...

Уведомление о задержки при использовании direct3d
Почему когда я добавляю ссылки direct3d и directX, при компиляции программа зависает и вылазиет это...

Программа виснет при использовании задержки
В общем проблема в следующем: Когда я использую sleep(), то программа &quot;виснет&quot;, то есть я не могу...

Рисование графика с использованием двойной буферизации
Добрый день. Делаю программу, которая будет в себе содержать динамический график. Не знаю, как...

Не выводится растр из Бо после добавления двойной буферизации!
Почему программа не выводит изображение из БО в окно? Но зато 4 предупреждения что hBmp не может...

Реализация двойной буферизации для рисования графических примитивов
Решил я значит порисовать всяких кружков-квадратиков, а они мерцают. Убрал эффект наполовину,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru