/// <summary> /// Конструктор класса /// </summary> public spriteL() { //Инициализируем дефолтные значения filename = null; replace = null; position = new positionParams(); animation = new animationParams(); id = -1; density = 1; }
/// <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); }