|
||||
Сегодня ни для кого ни секрет, что сайт - это ваш собственный робот, который будет вам приносить пользу и прибыль. Используя продуманные и простые решения, проверенные нами на собственном опыте Вы действительно можете реализовать свои идеи и даже самые смелые мечты. Представляем вам - megainformatic cms admin Она проста, компактна и надежна в использовании. Это - |
||||
Административная часть сайта и основа вашей будущей социальной сети - megainformatic cms admin Особенности: - очень компакта и быстра в работе и развертывании сайта; - открытый исходный код на php; - быстрая и простая установка; - подробное описание возможностей; - может использоваться как самостоятельная система для управления сайтом, так и в полном составе megainformatic cms той версии которую вы используете или планируете использовать: |
||||
Нет ничего проще, чтобы реализовать ваш личный сайт. Получив в своё распоряжение эту систему Вы получаете собственный готовый сайт и панель управления этим сайтом. Имея дистрибутив, распакуйте его и скопируйте полученные файлы на свой хостинг. Создайте посредством phpMyAdmin базу данных и разверните базу данных сайта в соответствии с инструкцией. Ваш сайт готов к работе !!! |
||||
Если возможности megainformatic cms admin, вам кажутся ограниченными и Вы хотите чего-то большего - обратите внимание на следующие продукты - |
||||
megainformatic cms e-shop | ||||
megainformatic cms e-mailer | ||||
Удачи вам в создании собственного виртуального интернет-пространства !!! | ||||
автор: Тимонин Андрей
дата публикации на сайте Мега Информатик: 18.11.2012
Добро пожаловать в цикл моих уроков посвященных программированию.
Эта статья будет посвящена исключениям и обработке исключительных ситуаций.
В любом языке, как и в жизни, существуют правила. А если есть правила, значит должны быть и ситуации, которые выбиваются и существуют вне этих правил. Эти ситуации называются исключениями (exceptions). Именно про них и пойдет речь в этой статье.
Обратимся к теории. Для работы с исключениями используется контролируемый блок try. Чтобы сгенерировать исключение можно воспользоваться оператором trow внутри блока try или функций, вызываемых в этом блоке. После блока try размещаются один или несколько блоков обработки исключений catch. Смотрим пример.
try{
//фрагмент кода
}
сatch( Type)
{
//действия по обработке исключения типа Type
}
catch(…)
{
//действия по обработке прочих исключений исключения
}
Как все это работает? В блоке try{ } помещаем код, где может возникнуть ошибка. В блоке сatch( Type){ } - что необходимо сделать в исключительной ситуации, например сообщить пользователю, что в программе произошла ошибка по такому-то поводу.
Для рассмотрения ошибок конкретного типа использется вариант блока сatch( Type){ }. Вместо слова Type указываете конкретный тип. Смотрим пример.
сatch( int)
{
//действия по обработке исключения типа int
}
сatch(char *)
{
//действия по обработке исключения типа char
}
Если необходимо обрабатывать исключения разных типов можно написать универсальный блок сatch
catch(…)
{
//действия по обработке прочих исключений исключения
}
А теперь поговорим, что происходит, когда вызываем оператор trow.
trow Err();
При обращении к этому оператору создается копия параметра виде статического объекта, которая существует до тех пор, пока не будет обработано исключение. Ищется подходящий обработчик catch, в качестве параметра которого указано необходимое исключение. В данном случае catch (Err& ). Если такого не находится, вызывается catch(…).
Давайте попробуем написать класс исключений.
class ExceptionBase {
private:
int errorCode; //код ошибки
wchar_t *errorMessage;//текст сообщения
public: //конструктор по умолчанию
ExceptionBase() : errorCode(0) {errorMessage = L"no description"}
//конструктор копирования
ExceptionBase(ExceptionBase& eb);
//конструктор с кодом и текстом сообщения
ExceptionBase(int eC, const wchar_t *eM);
//деструктор
virtual ~ExceptionBase();
//оператор присваивания
ExceptionBase& operator=(ExceptionBase& eb);
int getErrorCode(); //получает код ошибки
const wchar_t* getErrorMessage();
operator int();
operator const wchar_t*();
};
Вот такой получился класс. Конструктор копирования и оператор присваивания нужны для передачи
объекта в оператор catch. Смотрим на реализацию.
//exception.cpp
#include “exception.h”
//конструктор копирования
ExceptionBase::ExceptionBase(ExceptionBase& eb)
{
errorCode = eb.getErrorCode();
//определяем сколько занимает наша строка
int len = wcslen(eb.getErrorMessage());
//выделяем необходимый размер памяти пула
errorMessage = new wchar_t[len + 1];
//копируем строку сообщения
wcscpy(errorMessage, eb.getErrorMessage());
}
ExceptionBase::ExceptionBase(int eC, const wchar_t *eM)
{
errorCode = eC;
int len = wcslen(eM);
errorMessage = new wchar_t[len + 1];
wcscpy(errorMessage, eM);
}
//деструктор
ExceptionBase::~ExceptionBase()
{
//освобождаем выделенную память пула
if(errorMessage != NULL)
delete [] errorMessage;
}
ExceptionBase& ExceptionBase::operator=(ExceptionBase& eb)
{
//защитимся от самоприсваивания
if(this == &eb)
return *this;
delete [] errorMessage;
//занесем новое значение кода
errorCode = eb.getErrorCode();
//сформируем новую строку сообщения
int len = wcslen(eb.getErrorMessage());
errorMessage = new wchar_t[len + 1];
wcscpy(errorMessage, eb.getErrorMessage());
return *this;
}
//получим код ошибки
int ExceptionBase::getErrorCode()
{
return errorCode;
}
//получим текст сообщения
const wchar_t* ExceptionBase::getErrorMessage()
{
return errorMessage;
}
//приводя к типу int получаем код ошибки
ExceptionBase::operator int()
{
return errorCode;
}
//приводя к типу wchar_t* получаем строку сообщения
ExceptionBase::operator const wchar_t*()
{
return errorMessage;
}
};
Вот такой код получился. Его можно использовать как базовый класс в иерархии,
но мы не будем усложнять.А лучше посмотрим как его следует использовать.
//гдето в коде
ExceptionBase err(GETDISPLAYMODEERROR,L"Не могу определить параметры дисплея");
throw err;
И дисплей тоже может не определяться :). Таким образом мы создали объект и вызвали исключение оператором throw.
А так будет выглядеть блок try
try
{
...
}
//ловим исключения, и выводим сообщения об ошибках
catch(ExceptionBase err)
{
MessageBox(NULL, (const wchar_t*)err, L"Ошибка", MB_ICONERROR);
}
catch(...)
{
MessageBox(NULL, L"Неизвестная ошибка", L"Ошибка", MB_ICONERROR);
}
На этом статью заканчиваю. Надеюсь, эта информация была вам интересна.
C уважением, Андрей.
![]() |
||
Рисуем волка из мультфильма. Показанная техника рисования применялась при создании мультфильма в эмуляторе электронной игры ИМ-02 "Ну, Погоди!", которую можно посмотреть на сайтах Мега Информатик |
||
30/10/2008 | ||
Как нарисовать персонажа в Photoshop? Попробуем изобразить вот такого волка - |
||
![]() ![]() |
||
[щелкнув по изображению раскрашенного волка можно открыть вариант в натуральную величину] | ||
Можно ли в Photoshop создать иллюзию такой среды, когда можно свободно творить также как мы это обычно делаем на бумаге? Обычно при рисовании персонажей (героев компьютерных игр, комиксов, мультфильмов и т. п.) удобнее сначала изобразить желаемое на бумаге, а затем отсканировав, доработать в Photoshop. При наличии современных графических планшетов проблема вообще отпадает. Но если ни сканера ни тем более планшета под рукой нет, а кроме того есть лишь компьютер и Photoshop, то можно попробовать сделать это сразу же в самом Photoshop. Об идеях, которые лежат в основе такого рисования и рассказано далее. |
||
Итак, некоторое представление о том, каким будет будущий персонаж уже есть. Попробуем воссоздать свое воображение в Photoshop. | ||
1 правило: для создания нового изображения учтите какой конечный размер Вы хотите получить. Чем крупнее будет Ваш персонаж, тем еще в несколько раз крупнее надо создать будущее полотно для персонажа. Почему? Потому что так у Вас будет запас качества: изображение которое имеет большой размер можно уменьшить и качество при этом только уличшится. В противоположность этому - увеличивая маленькое изображение мы получим более размытое и нечеткое. |
||
Начнем. Персонажа, который попадал бы в размеры текстуры 128х128 нужно рисовать в новом изображении размером 512х512, а еще лучше 1024х1024. | ||
Photoshop > File > New > | ||
![]() |
||
Установите параметры показанные на этом рисунке, и пусть Вас не удивляет, что изображение квадратное. Квадрат и взятые в данном случае размеры оптимальны тем, что попадают в категорию размеров стандартных текстур, а они как известно бывают размером 32х32, 64х64, 128х128, 256х256, 512х512, 768х768, 1024х1024, 2048х2048 и больше. При этом из квадратного изображения очень легко выделить прямоугольную часть, а вот если у Вас будет прямоугольник и Вы задумаете использовать его внутри текстуры, то Вам всё равно придется дополнять его до квадрата. Поэтому лучше сделать это сразу, не откладывая на потом. |
||
Поскольку фон мы взяли прозрачный (Transparent - см. рисунок), то созданный персонаж в дальнейшем можно будет очень легко вставить на любой другой фон. | ||
Теперь сделаем первый набросок. Нашим инструментом будет кисть - | ||
![]() |
||
Параметры для неё для начала задайте такие - | ||
![]() |
||
Цвет, которым будете рисовать подберите по своему вкусу. Для этого щелкните мышью на изображении цвета переднего плана (на рисунке фиолетовый прямоугольник обведенный зеленым кружком), | ||
![]() |
||
в появившемся окне задайте нужный цвет и нажмите ОК. Я например выбрал цвет #511DA7 | ||
![]() |
||
Который чем-то напоминает цвет пасты обычной шариковой ручки | ||
Мысленно отметим основные элементы и их расположение - | ||
![]() |
||
Теперь изобразим голову - это наш первый набросок, поэтому не пытайтесь сразу же нарисовать красиво, главное - почувствуйте связь между движениями мышью и тем что получается при этом на экране | ||
![]() |
||
Это начало - немного подбородка, волос и левое ухо | ||
![]() |
||
добавляем нос | ||
![]() |
||
завершаем контуры носа, добавляем волосы около подбородка, прорисовываем ухо | ||
![]() |
||
глаза, рот | ||
![]() |
||
зрачки, прорисовываем рот, контуры волос на лбу | ||
[далее] | ||
[Все уроки] | ||
![]() |
||||||
Введение в программирование игр на С++ для платформы DirectX 9 Первый старт |
||||||
Данный небольшой урок является введением в программирование игр на C++ для DirectX 9 Вам нужно иметь установленную среду Microsoft Visual Studio 2005 или 2008 (можно триал), и DirectX SDK 9 версии, или лучше самой последней - DirectX SDK August 2008. |
||||||
[назад] [далее] [к содержанию] | ||||||
Запускаем Microsoft Visual Studio (далее просто MSVS для краткости), из папки с установленным DirectX SDK (далее просто DX) открываем папку с каким-либо проектом внутри папки Samples, например DXSDK_Aug2008\Samples\C++\Direct3D\SkinnedMesh |
||||||
Для правильной сборки примера Вам нужно будет внести в проект небольшие дополнения | ||||||
В окошке Solution Explorer нажимаем кнопочку проекта Skinned Mesh | ||||||
![]() |
||||||
Выбираем пункт меню Project > Properties | ||||||
![]() |
||||||
Нужно открыть узел C/C++ и для пункта General в строке Additional Include Directories указать абсолютный или относительный путь к папке из DXSDK_Aug2008\Include. Мы выполнили указание пути к папке с заголовочными файлами, необходимыми для компиляции dx-приложения. | ||||||
аналогично для узла Linker, пункт General в строке Additional Library Directories указать путь к папке DXSDK_Aug2008\Lib\x86. Это делается для указания пути к библиотекам dx которые потребуются при сборке directx приложения | ||||||
Жмем ОК, выполняем сборку Build > Build Solution | ||||||
В папке проекта SkinnedMesh появится папка Debug содержащая отладочную откомпилированную версию exe-файла | ||||||
Для изменения на Release выбирайте конфигурацию Release, снова задавайте пути к папкам заголовков и библиотек и снова выполняйте сборку | ||||||
![]() |
||||||
При этом готовый модуль будет помещен в папку Release | ||||||
Вы справились с первым, самым самым начальным уроком программирования directx на c++ | ||||||
Далее мы познакомимся с тем, как расширить пример и внести в него свои коррективы | ||||||
[назад] [далее] [к содержанию] |