Навигация
· XNA FAQ
· С чего начать
· Конкурсы
· Обратная связь
· XNA Блоги
Сейчас на сайте
· Гостей: 1

· Пользователей: 0

· Всего пользователей: 3,684
· Новый пользователь: headron
Последние фото
Эх, чуть не проспал закрытие.
Эх, чуть не проспал ...
Альбом: XNA Engine

GB
GB
Альбом: XNA Engine

South Park Coon & Friends
South Park Coon & Fr...
Альбом: XNA Games

Блоги
yavshoke
» XboxOne - интерес...
dampirik
» Push уведомления ...
dampirik
» Реклама,статистик...
Chort
» XNA и StartCoroutine
Chort
» Curve Class
dampirik
» Реклама, статисти...
dampirik
» Увеличение скорос...
dampirik
» Реклама, статисти...
general
» Распаковка DxtCom...
general
» Как работать с XN...
Поддержка
microsoft.com
1gb.ru - Дом для вашего сайта
Статистика посещений:

Просмотр темы
 Распечатать тему
Glass Battle
Hellmapper
#21 Распечатать сообщение
Опубликовано 03.12.2013 21:33:45
Аватар пользователя

Старший специалист


Сообщений: 440
Зарегистрирован: 03.07.11

Хотелось бы до января выложить бету, в которой присутствует 1 компания - земля, но работает весь запланированный функционал. На данный момент надо сделать финального босса, еще 2 вида оружия и 2 давнгрейда, а также подсказки по управлению и доделать меню опций и статистики.
Изменил(а) Hellmapper, 03.12.2013 22:08:49
 
Hellmapper
#22 Распечатать сообщение
Опубликовано 17.12.2013 23:04:41
Аватар пользователя

Старший специалист


Сообщений: 440
Зарегистрирован: 03.07.11

За 2 недели с моего предыдущего поста в игрушке произошли следующие изменения:
  • Исправлены незначительные баги в меню.
  • Исправлен баг, который позволял стрелять после смерти игрока.
  • Добавлены сообщения для уникальных уровней, которые в компании выводят цель миссии, а в бесконечных уровнях так же пишут номер уровня и доп. информацию.
  • Добавлен враг - Carrier. Это корабль Остеклителей, который занимается транспортировкой блоков стекла. Его можно встретить как в волнах, так и на уникальном уровне Змейка. В первой волне и гравитации их нельзя уничтожить - они лишь доставляются блоки, но вот волне от уровня Змейка вам придется встретиться с ним лицом к лицу. Во время этой волны, корабль-транспортировщик с 4 блоками (их тип зависит от того, сколько кораблей-транспортировщиков вы убили за текущую волну) и 300ХП перемещается по направлению к вам. С каждым ударом по кораблю его скорость перемещения возрастает, а полученный урон перераспределяется по всем блокам. но так же этот транспортировщик можно уничтожить разбив все блоки, которые он тащит и быстро нанести 3 удара.

Скриншот с уровня змейка:
Hellmapper присоединил изображение:


[136,93Kb]
Изменил(а) Hellmapper, 06.01.2014 00:23:46
 
Hellmapper
#23 Распечатать сообщение
Опубликовано 06.01.2014 00:28:04
Аватар пользователя

Старший специалист


Сообщений: 440
Зарегистрирован: 03.07.11

Новый NPC - Carrier - выполняет функции транспортировщика блоков. Он не раз будет мешать по пути к финальному боссу. В данный момент реализовано 2/3 его предназначений. В следующем видео будут продемонстрированы все 3, а так же переработка первой волны.
YouTube Video

Изменил(а) Hellmapper, 06.01.2014 00:28:29
 
Yozka
#24 Распечатать сообщение
Опубликовано 06.01.2014 00:42:42
Аватар пользователя

Старший специалист


Сообщений: 268
Зарегистрирован: 18.04.12

Выглядит хорошо!
Дай файлег, на девайсе потыструю
 
http://isera.info
Hellmapper
#25 Распечатать сообщение
Опубликовано 06.01.2014 14:41:08
Аватар пользователя

Старший специалист


Сообщений: 440
Зарегистрирован: 03.07.11

http://sdrv.ms/19...
 
Yozka
#26 Распечатать сообщение
Опубликовано 09.01.2014 17:12:54
Аватар пользователя

Старший специалист


Сообщений: 268
Зарегистрирован: 18.04.12

Есть одно замечание. Серьезное замечание.
Игра одолжна развертыватся именно в папке "игры" ане в корне приложений.
Как сделать?
В файле WMAppManifest.xml добавить стрчку Genre="Apps.Games"

---
Так очень понравилось, теперь уже глаза не бегают с целью определить каким цветом выстрелит корабль. очень информативно. И побокам подсветка текущего цвета очень помагает соринтироватся.
К текущему управлению привыкнуть сложно. можно но сложно.
Сейчас два варианта:

1. При нажатии одним тапом.
Если нажатие находится в пределах коробля, то происходит выстрел.
Если нажатие за пределами корабля то идет перемещения коробля в точку тапа и происходит выстрел.


2. перетаскивание коробля путем удержания нажатия на коробле и перетаскивание в точку.


Метод два интунтивно понятный.
Но с первым методом происходят непонятки.
Что вот как я игрок который первый раз запустил игру.
Думаю что нужно переместить корабль, и сделать выстрел.
Собственно тапаю в сторону перемещения. корабль послушно перемещается. и неожиданно для меня происходит автоматический выстрел! Пытаюсь понять что происходит. и тут выстрел попадает в блок не того цвета. я ведь решил просто передвинуть корабль а не стрелять. и собсвенно идет отражение моего выстрела. я незнамо что делать. опять перетаскиваю карабль. корабль перемещается и снова выстрел. паника.
Собсвтенно я очем.
Для меня, интуитивно понятно былоб такое управелние
1. нажатие на тап за пределы карабля - только перемещение коробля
2. нажатие на тап в пределах коробля - выстрел
3. нажатие и удерживание на коробле с перемещением - перемещение коробля
4. нажатие на стеклянные блоки - перемещение и выстрел корабля на указанный блок. при этом. блок который будет обстеливатся както подсвечивать. чтобы понятно было что мы стреляем именно по этому блоку. Далее когда он двигается. и мы еще раз нажали в другую сторону. происходит отмена движения и стрельбы.

както так.

Хотя повторюсь. это только мое мнение.
----

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




 
http://isera.info
Hellmapper
#27 Распечатать сообщение
Опубликовано 09.01.2014 17:41:52
Аватар пользователя

Старший специалист


Сообщений: 440
Зарегистрирован: 03.07.11

Спасибо за тест и за отзыв! Управление будет изменено на предложенное, ну может кроме подсветки блока, хотя как пойдет. + в настройках, до которых у меня надеюсь дойдут руки после сессии, можно будет включить автоматический огонь после перемещения нажатием. Параллакс будет, как и 3D вращение земли на уровнях 5+.

Вчера увеличил производительность, а так же добавил новые пути в WaveSnake. Следующая обнова будет выложена, когда допилю оставшийся тип npc_carrier'а.
Изменил(а) Hellmapper, 09.01.2014 17:42:15
 
Hellmapper
#28 Распечатать сообщение
Опубликовано 09.01.2014 20:09:44
Аватар пользователя

Старший специалист


Сообщений: 440
Зарегистрирован: 03.07.11

Начал тут еще лепить небольшой комикс, описывающий начало событий игры. Несколько кадров из него. (В игрушке все будет приправлено передвижульками и эффектами):
cs424316.vk.me/v424316951/7873/UH0IeINYZtg.jpg
cs424316.vk.me/v424316951/787d/0R0nDSuxN_E.jpg
cs424316.vk.me/v424316951/7869/Yb_0WIL4epQ.jpg
cs424316.vk.me/v424316951/7887/NFvqd-IljzI.jpg
cs424316.vk.me/v424316951/7891/sjxbr-wDIYw.jpg
cs424316.vk.me/v424316951/789b/wSLgiPNoHXs.jpg
cs424316.vk.me/v424316951/78a5/T7B9WB92QwU.jpg
Осталось нарисовать кадры с земли: кто-то указывает на корабли остеклителей, следующий кадр: первый корабль с 3-го кадра сбивают и захватывают и последний: он отправляется в бой. Это самые трудные кадры, т.к простыми деформациями не удастся получить объемный корабль вблизи и придется рисовать с 0.
Изменил(а) Hellmapper, 09.01.2014 23:11:31
 
Hellmapper
#29 Распечатать сообщение
Опубликовано 17.01.2014 17:52:18
Аватар пользователя

Старший специалист


Сообщений: 440
Зарегистрирован: 03.07.11

Добавил параллакс скроллинг облаков и смену дня ночью. Сегодня/завтра для уровней 5+ забабацаю 3D модельку земли.
YouTube Video
 
Yozka
#30 Распечатать сообщение
Опубликовано 17.01.2014 19:11:07
Аватар пользователя

Старший специалист


Сообщений: 268
Зарегистрирован: 18.04.12

Потом выясняется, что остеклители какбы и не захватывают планету. а специально защищают ее от радиоционного фона близпролетающей каметы. Путем выстраивания защиты из особого стекла.
И когда выясняются истеныне мотивы инопланетян... становится очень поздно!
--
видео прикольное
Изменил(а) Yozka, 17.01.2014 19:11:27
 
http://isera.info
Hellmapper
#31 Распечатать сообщение
Опубликовано 17.01.2014 19:26:45
Аватар пользователя

Старший специалист


Сообщений: 440
Зарегистрирован: 03.07.11

Yozka написал:
Потом выясняется, что остеклители какбы и не захватывают планету. а специально защищают ее от радиоционного фона близпролетающей каметы. Путем выстраивания защиты из особого стекла.
И когда выясняются истеныне мотивы инопланетян... становится очень поздно!
--
видео прикольное

Можно и такое забабацать Grin.
 
general
#32 Распечатать сообщение
Опубликовано 17.01.2014 19:44:31
Аватар пользователя

Администратор сайта


Сообщений: 3788
Зарегистрирован: 10.02.09

вижу рывки при скролле фона.
это только в видео или и в приложении тоже?
[dreamteam-mobile]
[dtimofeev.blogspot.com][c#][XNA][blog]
 
Hellmapper
#33 Распечатать сообщение
Опубликовано 17.01.2014 19:51:15
Аватар пользователя

Старший специалист


Сообщений: 440
Зарегистрирован: 03.07.11

Рывки при записи и в эмуле (хз почему). На девайсе все стабильно ползет. Вот http://sdrv.ms/1b... можно скачать и посмотреть в живую. Без отрисовки корабля карта Test.
Изменил(а) Hellmapper, 17.01.2014 19:54:34
 
Hellmapper
#34 Распечатать сообщение
Опубликовано 20.01.2014 23:39:45
Аватар пользователя

Старший специалист


Сообщений: 440
Зарегистрирован: 03.07.11

Немного о том, какие награды дают звездочки при прохождении компании.
  • 5 уровень на 3 звезды - открывается режим Snake на онлайн счет.
  • 10 уровень на 3 звезды - открывается режим Gravity на онлайн счет.
  • 1 - 4 уровень на 3 звезды - можно выбрать в меню другой бэкграунд (из 1-5 уровней). Аналогично с интервалами уровней 6-9 и 11-14
  • Все уровни на 3 звезды и убитый босс - открывают героический уровень сложности босса, на онлайн время. А так же новый корабль, тот что был у босса с возможностью создавать блок взрывчатки и направлять ее к другим блокам.

Hellmapper присоединил изображение:


[122,63Kb]
 
Hellmapper
#35 Распечатать сообщение
Опубликовано 22.01.2014 21:45:23
Аватар пользователя

Старший специалист


Сообщений: 440
Зарегистрирован: 03.07.11

При скролле есть небольшая проблема: когда высота текстуры не делится целиком на приращение Y скролла, то появляется черная полоска. Кто-нибудь знает как это исправить?
 
general
#36 Распечатать сообщение
Опубликовано 22.01.2014 22:14:23
Аватар пользователя

Администратор сайта


Сообщений: 3788
Зарегистрирован: 10.02.09

if(scrolly+speedy > y)
scrolly = y;
[dreamteam-mobile]
[dtimofeev.blogspot.com][c#][XNA][blog]
 
Hellmapper
#37 Распечатать сообщение
Опубликовано 24.01.2014 00:14:13
Аватар пользователя

Старший специалист


Сообщений: 440
Зарегистрирован: 03.07.11

Еще 1 бэкграунд. В данный момент он еще шлифуется. Возможно стоит добавить на полярные шапки блоки стекла.
YouTube Video

UPD:
На уровнях c этим фоном фпс стало проседать местами до 27.11. Наверно надо будет уменьшить кол-во полигонов в сфере и все текстуры Дня/ночи/Маска. Закинуть в 1 атлас и сжать DXT. Саму маску стоит ужать до 1280*1, а потом просто растягивать по высоте основной карты. Сейчас гуглил про оптимизацию, и оказывается зря я вводил виртуальные методы почти в каждый класс и делал кучу наследований.
Изменил(а) Hellmapper, 24.01.2014 01:57:21
 
Hellmapper
#38 Распечатать сообщение
Опубликовано 27.01.2014 15:36:29
Аватар пользователя

Старший специалист


Сообщений: 440
Зарегистрирован: 03.07.11

Немного кода, может кому-нибудь пригодится (свободное использование). Есть по нему еще пара вопросов, они после кода.
Менеджер звуков:
SoundManager.cs

Загрузить источник  Примечания: Код слишком большой для GeSHi! Используйте код тега.:
namespace GlassBattle.Manager
{
    public enum SoundType
    {
        None,
        Laser_shot_1,
        Glass_break,
        Glass_reflect,
        Field_break,
        Field_set,
        Explode1,
        Explode2,
        Triplel_fire,
        Pillar_fire,
        Nuclear_fire,
        Nuclear_fly,
        Bomb_activated
    }


    public class SoundManager
    {
        private class Sound
        {
            /// <summary>
            /// Количество существующих копий данного звука.
            /// </summary>
            public int count;
            /// <summary>
            /// Звук для создания его независимых копий
            /// </summary>
            private SoundEffect effect;
            /// <summary>
            /// Список с независимыми копиями
            /// </summary>
            private List<SoundEffectInstance> effect_copies;
            /// <summary>
            /// Тип звука. Используется enum, чтобы при поиске избегать пересоздания строк.
            /// </summary>
            public SoundType Type;
            /// <summary>
            /// Максимальное число копий данного звука - выбрано с учетом того,
            /// что максимальное число одновременно проигрываемых звуков на Windows Phone - 64,
            /// а игрок не может создать за короткий промежуток времени больше 16 выстрелов
            /// или разбить больше 16 блоков.
            /// Большое количество взрывов просто "смазывается" во времени и становится
            /// незаметным, что некоторые звуки не проигрались.
            /// </summary>
            const int MaxSoundCopies = 16;
            /// <summary>
            /// Инициализация
            /// </summary>
            /// <param name="_type">Тип звука</param>
            /// <param name="_effect">Ссылка на SoundEffect</param>
            public Sound(SoundType _type, SoundEffect _effect)
            {
                Type = _type;
                //Задаем Capacity, чтобы тратить время на расширение списока при добавлении.
                effect_copies = new List<SoundEffectInstance>(MaxSoundCopies);
                effect = _effect;
            }

            /// <summary>
            /// Проигрывание звука.
            /// </summary>
            /// <param name="volume">Громкость</param>
            /// <param name="looped">Повторять звук</param>
            /// <returns>Возвращает ссылку на копию SoundEffectInstance,
            /// чтобы можно было остановить именно её а не все копии данного звука.</returns>
            public SoundEffectInstance Play(float volume, bool looped)
            {
                if (count < MaxSoundCopies)
                {
                    SoundEffectInstance instance = effect.CreateInstance();
                    instance.Volume = volume;
                    instance.IsLooped = looped;
                    effect_copies.Add(instance);
                    effect_copies[count].Play();
                    count++;
                    return instance;
                }
                return null;
            }

            /// <summary>
            /// Остановка всех копий данного звука.
            /// </summary>
            /// <param name="only_looped">Остановка только зацикленных звуков</param>
            public void Stop(bool only_looped)
            {
                if (only_looped)
                {
                    for (int i = 0; i < count; i++)
                    {
                        if (effect_copies[i].IsLooped)
                        {
                            effect_copies[i].Stop();
                            effect_copies.RemoveAt(i);
                            count--;
                            i--;
                        }
                    }
                }
                else
                {
                    for (int i = 0; i < count; i++)
                    {
                        effect_copies[i].Stop();
                    }
                    effect_copies.Clear();
                }
            }

            public void Update(GameTime gameTime)
            {
                for (int i = 0; i < count; i++)
                {
                    //Если звук проигрался убираем его из списка
                    if (effect_copies[i].State == SoundState.Stopped)
                    {
                        effect_copies.RemoveAt(i);
                        count--;
                        i--;
                    }
                }
            }
        }
        /// <summary>
        /// Список со всеми звуками.
        /// </summary>
        private List<Sound> sounds;

        /// <summary>
        /// Инициализация
        /// </summary>
        public SoundManager()
        {
        }

        /// <summary>
        /// Загрузка звуков.
        /// </summary>
        /// <param name="Content">Ссылка на ContentManager</param>
        public void LoadSound(ContentManager Content)
        {
            sounds = new List<Sound>();
            sounds.Add(new Sound(SoundType.Laser_shot_1, Content.Load<SoundEffect>("Sounds\\laser_shot_1")));
            sounds.Add(new Sound(SoundType.Glass_break, Content.Load<SoundEffect>("Sounds\\glass_break")));
            sounds.Add(new Sound(SoundType.Glass_reflect, Content.Load<SoundEffect>("Sounds\\glass_reflect")));
            sounds.Add(new Sound(SoundType.Field_break, Content.Load<SoundEffect>("Sounds\\field_break")));
            sounds.Add(new Sound(SoundType.Field_set, Content.Load<SoundEffect>("Sounds\\field_set")));
            sounds.Add(new Sound(SoundType.Explode1, Content.Load<SoundEffect>("Sounds\\explode1")));
            sounds.Add(new Sound(SoundType.Explode2, Content.Load<SoundEffect>("Sounds\\explode2")));
            sounds.Add(new Sound(SoundType.Triplel_fire, Content.Load<SoundEffect>("Sounds\\triplel_fire")));
            sounds.Add(new Sound(SoundType.Pillar_fire, Content.Load<SoundEffect>("Sounds\\pillar_fire")));
            sounds.Add(new Sound(SoundType.Nuclear_fire, Content.Load<SoundEffect>("Sounds\\nuclear_fire")));
            sounds.Add(new Sound(SoundType.Nuclear_fly, Content.Load<SoundEffect>("Sounds\\nuclear_fly")));
            sounds.Add(new Sound(SoundType.Bomb_activated, Content.Load<SoundEffect>("Sounds\\bomb_activated")));
            for (int i = 0; i < sounds.Count; i++)
            {
                sounds[i].Play(0, false);
            }
        }

        /// <summary>
        /// Проиграть определенный звук.
        /// </summary>
        /// <param name="type">Тип звука</param>
        /// <param name="volume">Громкость</param>
        /// <returns>Возвращает ссылку на текущий звук</returns>
        public SoundEffectInstance Play(SoundType type, float volume)
        {
            for (int i = 0; i < sounds.Count; i++)
            {
                if (sounds[i].Type == type)
                {
                    return sounds[i].Play(volume, false);
                }
            }
            return null;
        }

        /// <summary>
        /// Проиграть определенный звук.
        /// </summary>
        /// <param name="type">Тип звука</param>
        /// <param name="volume">Громкость</param>
        /// <param name="looped">Зацикленный</param>
        /// <returns>Возвращает ссылку на текущий звук</returns>
        public SoundEffectInstance PlayInstance(SoundType type, float volume, bool looped)
        {
            for (int i = 0; i < sounds.Count; i++)
            {
                if (sounds[i].Type == type)
                {
                    return sounds[i].Play(volume, looped);
                }
            }
            return null;
        }

        public void Update(GameTime gameTime)
        {
            for (int i = 0; i < sounds.Count; i++)
            {
                sounds[i].Update(gameTime);
            }
        }
    }
}




1 вопрос: может стоит сделать этот класс статичным? Как это повлияет на производительность?
2 вопрос: Может в классе Sound избавиться от добавления\удаления звука в список, а сразу создать массив из 16 звуков, а при вызове Play искать первое вхождение звука у которого State == Stopped изменять его параметры и проигрывать. Тот же вопрос с производительностью.
Изменил(а) Hellmapper, 27.01.2014 15:37:27
 
Hellmapper
#39 Распечатать сообщение
Опубликовано 27.01.2014 20:07:23
Аватар пользователя

Старший специалист


Сообщений: 440
Зарегистрирован: 03.07.11

Реализовал второй пункт. Работать стало шустрее. Но есть минус - метод Dispose() нельзя вызывать, если планируется в дальнейшем использовать данный звук - крашнет игру.
Загрузить источник  GeSHi: C#
  1.  
  2. private class Sound
  3. {
  4. private struct SoundInstance
  5. {
  6. public SoundEffectInstance SoundEffectInstance;
  7. public bool Activated;
  8. public SoundInstance(SoundEffectInstance soundEffect, bool played)
  9. {
  10. SoundEffectInstance = soundEffect;
  11. Activated = played;
  12. }
  13. }
  14. /// <summary>
  15. /// Количество существующих копий данного звука.
  16. /// </summary>
  17. public int count;
  18. /// <summary>
  19. /// Звук для создания его независимых копий
  20. /// </summary>
  21. private SoundEffect effect;
  22. /// <summary>
  23. /// Массив с независимыми копиями
  24. /// </summary>
  25. private SoundInstance[] effect_copies;
  26.  
  27. /// <summary>
  28. /// Стек с доступными номерами звуков.
  29. /// </summary>
  30. private Stack<int> unused_sounds_stack;
  31. /// <summary>
  32. /// Тип звука. Используется enum, чтобы при поиске избегать пересоздания строк.
  33. /// </summary>
  34. public SoundType Type;
  35. /// <summary>
  36. /// Максимальное число копий данного звука - выбрано с учетом того,
  37. /// что максимальное число одновременно проигрываемых звуков на Windows Phone - 64.
  38. /// </summary>
  39. private int MaxSoundCopies = 16;
  40. /// <summary>
  41. /// Инициализация
  42. /// </summary>
  43. /// <param name="_type">Тип звука</param>
  44. /// <param name="_effect">Ссылка на SoundEffect</param>
  45. public Sound(SoundType _type, SoundEffect _effect)
  46. {
  47. Initialize(_type, _effect, 16);
  48. }
  49.  
  50. /// <summary>
  51. /// Инициализация c возможностью задать максимальное число копий данного звука
  52. /// </summary>
  53. /// <param name="_type">Тип звука</param>
  54. /// <param name="_effect">Ссылка на SoundEffect</param>
  55. /// <param name="maxSoundCopies">Максимальное число копий данного звука</param>
  56. public Sound(SoundType _type, SoundEffect _effect, int maxSoundCopies)
  57. {
  58. Initialize(_type, _effect, maxSoundCopies);
  59. }
  60.  
  61. private void Initialize(SoundType _type, SoundEffect _effect, int maxSoundCopies)
  62. {
  63. Type = _type;
  64. effect = _effect;
  65. effect_copies = new SoundInstance[MaxSoundCopies];
  66. unused_sounds_stack = new Stack<int>(MaxSoundCopies);
  67. MaxSoundCopies = maxSoundCopies;
  68. for (int i = 0; i < MaxSoundCopies; i++)
  69. {
  70. effect_copies[i].SoundEffectInstance = effect.CreateInstance();
  71. unused_sounds_stack.Push(i);
  72. }
  73. }
  74.  
  75. /// <summary>
  76. /// Проигрывание звука.
  77. /// </summary>
  78. /// <param name="volume">Громкость</param>
  79. /// <param name="looped">Повторять звук</param>
  80. /// <returns>Возвращает ссылку на копию SoundEffectInstance,
  81. /// чтобы можно было остановить именно её а не все копии данного звука.</returns>
  82. public SoundEffectInstance Play(float volume, bool looped)
  83. {
  84. if (count < MaxSoundCopies)
  85. {
  86. int unused_sound_num = unused_sounds_stack.Pop();
  87. SoundEffectInstance instance = effect_copies[unused_sound_num].SoundEffectInstance;
  88. effect_copies[unused_sound_num].Activated = true;
  89. if (instance.IsLooped != looped)
  90. {
  91. instance = effect_copies[unused_sound_num].SoundEffectInstance = effect.CreateInstance();
  92. instance.IsLooped = looped;
  93. }
  94. instance.Volume = volume;
  95. instance.Play();
  96. count++;
  97. return instance;
  98. }
  99. return null;
  100. }
  101.  
  102. /// <summary>
  103. /// Остановка всех копий данного звука.
  104. /// </summary>
  105. /// <param name="only_looped">Остановка только зацикленных звуков</param>
  106. public void Stop(bool only_looped)
  107. {
  108. if (only_looped)
  109. {
  110. //unused_sounds_stack.Clear();
  111. for (int i = 0; i < count; i++)
  112. {
  113. if (effect_copies[i].SoundEffectInstance.IsLooped)
  114. {
  115. effect_copies[i].SoundEffectInstance.Stop();
  116. effect_copies[i].Activated = false;
  117. unused_sounds_stack.Push(i);
  118. count--;
  119. }
  120. }
  121. }
  122. else
  123. {
  124. unused_sounds_stack.Clear();
  125. for (int i = 0; i < count; i++)
  126. {
  127. effect_copies[i].SoundEffectInstance.Stop();
  128. effect_copies[i].Activated = false;
  129. unused_sounds_stack.Push(i);
  130. }
  131. count = 0;
  132. }
  133. }
  134.  
  135. public void Update(GameTime gameTime)
  136. {
  137. for (int i = 0; i < MaxSoundCopies; i++)
  138. {
  139. if (effect_copies[i].SoundEffectInstance.State == SoundState.Stopped &&
  140. effect_copies[i].Activated == true)//Если звук проигрался убираем его из списка
  141. {
  142. effect_copies[i].Activated = false;
  143. unused_sounds_stack.Push(i);
  144. count--;
  145. }
  146. }
  147. }
  148. }
  149.  
Добавлено за 0.030 секунд, используя GeSHi 1.0.8.2

Изменил(а) Hellmapper, 27.01.2014 20:28:47
 
Hellmapper
#40 Распечатать сообщение
Опубликовано 29.01.2014 16:11:47
Аватар пользователя

Старший специалист


Сообщений: 440
Зарегистрирован: 03.07.11

Никак не могу избавится от микрофриза при первом выстреле. Ума не приложу что может делать приложение при выстреле.
Вот измеренное время на каждый вызов выстрела (мс):
26,2422
0,2485
0,0805
0,0548
0,101
0,0859

Полный путь от вызова Fire(), где начинается измерение через все методы. Может вы заметите, что-то неладное
Загрузить источник  GeSHi: C#
  1.  
  2. ///Файл Player.cs
  3. Stopwatch st = new Stopwatch();
  4. public void Fire()
  5. {
  6.  
  7. st.Start();
  8. if (!Unconrolled && canFire && !EmptyWeaponColors)
  9. {
  10.  
  11. if (!Destroyed && !bMoving)
  12. {
  13. canFire = false;
  14. map.CreateWeaponFire(WeaponType.LaserBeam, this.FirePosition, CurrentEnergyColor);
  15. }
  16.  
  17. if (CurrentEnergyIndex >= 3)
  18. {
  19. WeaponsColors = emptyColors;
  20. EmptyWeaponColors = true;
  21. CurrentEnergyIndex = 0;
  22. }
  23. else
  24. {
  25. WeaponsColors[CurrentEnergyIndex] = emptyColor;
  26. CurrentEnergyIndex++;
  27. }
  28. }
  29. st.Stop();
  30. Debug.WriteLine(st.Elapsed.TotalMilliseconds);
  31. st.Reset();
  32. }
  33.  
Добавлено за 0.008 секунд, используя GeSHi 1.0.8.2

Загрузить источник  GeSHi: C#
  1. //Файл MapBase.cs
  2.  
  3. //Вызов из Player.cs Fire()
  4. public void CreateWeaponFire(WeaponType weaponType, Vector2 position, Color playerColor)
  5. {
  6. CreateWeaponFire(weaponType, position, new Vector2(0, -10), playerColor);
  7. }
  8.  
  9. //Вызов из метода выше
  10. public void CreateWeaponFire(WeaponType weaponType, Vector2 position,
  11. Vector2 direction, Color playerColor)
  12. {
  13. CreateWeaponFire(weaponType, position, direction, playerColor, false);
  14. }
  15.  
  16. //Вызов из метода выше
  17. public void CreateWeaponFire(WeaponType weaponType, Vector2 position,
  18. Vector2 direction, Color color, bool silence)
  19. {
  20. switch (weaponType)
  21. {
  22. case WeaponType.LaserBeam:
  23. Weapons.Add(new WeaponLaserBeam(color, position, direction,
  24. 100, 100, ParticlesWeaponsController));
  25. if (!silence)
  26. SoundManager.Play(SoundType.Laser_shot_1, SettingsManager.SoundVolume * 0.4f);
  27. break;
  28. //... Другие виды оружия
  29. }
  30. }
Добавлено за 0.009 секунд, используя GeSHi 1.0.8.2

Загрузить источник  GeSHi: C#
  1. //WeaponBase.cs
  2. public WeaponBase(WeaponType weaponType, Vector2 position, int damage,
  3. Vector2 moveVector, SpectrumColor color, int maxEnergy)
  4. {
  5. WeaponType = weaponType;
  6. Position = position;
  7. Damage = damage;
  8. move = moveVector;
  9. SpecColor = color;
  10. Alive = true;
  11. Energy = maxEnergy;
  12. firstTime = true;
  13. Row = -1;
  14. Col = -1;
  15. }
Добавлено за 0.006 секунд, используя GeSHi 1.0.8.2

Загрузить источник  GeSHi: C#
  1. //WeaponLaserBeam.cs
  2. ParticleController particles;
  3. private bool exploded;
  4. public WeaponLaserBeam(Color color, Vector2 position, Vector2 moveVector,
  5. int damage, int maxEnergy, ParticleController pcontroller)
  6. : base(WeaponType.LaserBeam, position, damage, moveVector, color, maxEnergy)
  7. {
  8. particles = pcontroller;
  9. }
  10.  
  11. public override void Update(GameTime gameTime)
  12. {
  13. if (Energy <= 0 && particles.particles.Count == 0)
  14. Alive = false;
  15. Position += move;
  16. Row = (int)Position.Y / 48;
  17. Col = (int)Position.X / 48;
  18. Vector2 v2Center = new Vector2(Position.X, Position.Y + 3);
  19. if (!Collided)
  20. particles.LaserTrail(v2Center, SpecColor);
  21. else
  22. {
  23. if (!exploded)
  24. {
  25. exploded = true;
  26. particles.EngineExplode(CollisionPoint, SpecColor, 0.8f);
  27. }
  28.  
  29. if (PlayerCollided && exploded)
  30. {
  31. exploded = false;
  32. PlayerCollided = false;
  33. particles.EngineExplode(CollisionPoint, SpecColor, 0.3f);
  34. }
  35.  
  36. if(Energy > 0)
  37. particles.EngineRocketReverse(v2Center, SpecColor);
  38. }
  39. //particles.Update(gameTime);
  40.  
  41. }
Добавлено за 0.010 секунд, используя GeSHi 1.0.8.2

Загрузить источник  GeSHi: C#
  1. //ParticleController.cs
  2. public void LaserTrail(Vector2 position, Color Color) // функция, которая будет генерировать частицы
  3. {
  4. for (int a = 0; a < 2; a++) // создаем 2 частицы дыма для трейла
  5. {
  6. Vector2 velocity_s = AngleToV2((float)(Math.PI * 2d * RandomManager.NextDouble()), 0.6f);
  7. float angle_s = 0;
  8. float angleVel_s = 0;
  9. Vector4 color_s = Color.ToVector4();
  10. float size_s = 1f;
  11. int ttl_s = 10;
  12. float sizeVel_s = 0;
  13. float alphaVel_s = -0.1f;
  14. GenerateNewParticle(ContentStorage.particles_weapons_spark, position,
  15. velocity_s, angle_s, angleVel_s, color_s, size_s, ttl_s, sizeVel_s, alphaVel_s);
  16. }
  17.  
  18. Vector2 velocity = AngleToV2((float)(Math.PI * 2d * RandomManager.NextDouble()), .2f);
  19. Vector4 color = Color.ToVector4() * 0.7f;
  20. float size = 1f;
  21. int ttl = 10;
  22. float sizeVel = -.01f;
  23. float alphaVel = .01f;
  24.  
  25. GenerateNewParticle(ContentStorage.particles_weapons_smoke, position,
  26. velocity, 0, 0, color, size, ttl, sizeVel, alphaVel);
  27.  
  28. velocity = Vector2.Zero;
  29. color = Color.ToVector4();
  30. size = 0.1f + 1.8f * (float)RandomManager.NextDouble();
  31. ttl = 5;
  32. sizeVel = -.05f;
  33. alphaVel = .01f;
  34. GenerateNewParticle(ContentStorage.particles_weapons_spark, position,
  35. velocity, 0, 0, color, size, ttl, sizeVel, alphaVel);
  36.  
  37. }
  38. private Particle GenerateNewParticle(Texture2D texture, Vector2 position, Vector2 velocity,
  39. float angle, float angularVelocity,
  40. Vector4 color, float size, int ttl, float sizeVel, float alphaVel) // генерация новой частички
  41. {
  42. Particle particle = new Particle(texture, position, velocity, angle,
  43. angularVelocity, color, size, ttl, sizeVel, alphaVel, false, 1);
  44. particles.Add(particle);
  45. return particle;
  46. }
Добавлено за 0.013 секунд, используя GeSHi 1.0.8.2

Изменил(а) Hellmapper, 29.01.2014 16:26:48
 
Перейти на форум:
Авторизация
Логин

Пароль



Вы не зарегистрированы?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Мини-чат
Вы должны авторизироваться, чтобы добавить сообщение.

27.08.2014
Я умею немного на asp.net + html и css

22.08.2014
на ASP mvc 3 есть пару проектов. Могу помочь, если нужно. Обидно, если закроется Frown

21.08.2014
я тоже ноль

21.08.2014
Я в вебе только с php занимался да и то на уровне чтоб работало.

21.08.2014
Я в вебе полный ноль…

21.08.2014
Переводить его надо, хоть на ту же азуру. И двиг менять на что-то современное. Если есть веб-разрабы - можем скооперироваться. Один делать не буду.

21.08.2014
не знаю всех нюансов по оплате и все хорошее когда нибудь заканчивается

21.08.2014
А что случилось?

21.08.2014
похоже сайт будет работать до 28го числа

09.08.2014
Апи пока не видел. Но есть приложение в магазине Live Lock Screen BETA, так что думаю скоро будет

08.08.2014
Я про API для Update1. На нем работает это

08.08.2014
А что именно нужно? Чтото и сейчас открыто http://msdn.micro.
...105).aspx

06.08.2014
Кто-нибудь слышал об открытии доступа к Lock Screen Api?

31.07.2014
VPDExpress на базе MVS 2012, ни в какую не ловит исключения. Даже если их сам создаешь. И всех так?

25.07.2014
С днем системного администратора причастных к этой профессии! По случаю - тортик от жены

RSS каналы сайта
XNA - Новости
XNA - Статьи
XNA - Форум
XNA - Галерея
XNA - Файлы
Время загрузки: 2,28 секунд 8,709,680 уникальных посетителей