Esempio n. 1
0
 /// <summary>
 /// Конструктор класса
 /// </summary>
 public spriteL()
 {
     //Инициализируем дефолтные значения
     filename  = null;
     replace   = null;
     position  = new positionParams();
     animation = new animationParams();
     id        = -1;
     density   = 1;
 }
Esempio n. 2
0
        /// <summary>
        /// Загружаем спрайт из изображения
        /// </summary>
        /// <param name="pic">Исходное изображение</param>
        /// <param name="position">Параметры положения и размера спрайта</param>
        /// <param name="replacement">Заменяемый цвет</param>
        /// <param name="animationDelay">Cкорость смены кадров</param>
        /// <param name="animation">Параметры анимации</param>
        /// <param name="id">Уникальный идентификатор спрайта</param>
        /// <param name="density">Плотность спрайта</param>
        /// <returns>ЗАгруженный спрайт</returns>
        public sprite load(long id, Bitmap pic, positionParams position, double density,
                           Color?replacement = null, animationParams animation = null)
        {
            //Итоговый спрайт
            sprite ex = null;
            //Ширина одного кадра
            int frameWidth;
            //Координата начала нового кадра
            int x0;
            //Кадр, считанный из картинки
            List <framePixel> frame;

            try
            {
                //Если параметры анимации не указаны
                if (animation == null)
                {
                    //Проставляем дефолтные
                    animation = new animationParams();
                }

                //Инициализируем новый спрайт
                ex = new sprite(position.size, animation, id, density);

                //Если нужно менять цвет
                if (replacement.HasValue)
                {
                    //Генерируем рандомный цвет
                    rand = Color.FromArgb(r.Next(0, 256), r.Next(0, 256), r.Next(0, 256));
                }

                //Запоминаем инфу о замене цвета
                this.replacement = replacement;

                //Получаем ширину одного кадра
                frameWidth = pic.Width / animation.countFrames;
                //Начало первого кадра всегда в ноле
                x0 = 0;

                //Проходимся по всем кадрам
                for (int i = 0; i < animation.countFrames; i++)
                {
                    //Считываем все пиксели кадра
                    frame = loadFrame(x0, frameWidth, pic, position);
                    //Переходим к следующему кадру
                    x0 += frameWidth;

                    //Добавляем новый кадр в спрайт
                    ex.addFrame(frame.Count);
                    //Проходимся по всем считанным пикселям
                    for (int j = 0; j < frame.Count; j++)
                    {
                        //Добавляем пиксель в кадр
                        ex.setPixel(frame[i], i);
                    }
                }
                //Завершаем загрузку кадров
                ex.completeLoad();
            }
            catch { ex = null; }

            //Возвращаем спрайт
            return(ex);
        }