ria pc game
translate to English   translate to Chinese
fle game engine - движок для создания игр
fle game engine - движок для создания игр


Balls and holes PC game / Balls and Holes PC игра
Вакансии
Игродельня
Сегодня
24 марта 2019 18:58
Вход Регистрация Забыли пароль ?

Добавление статей на сайт под управлением megainformatic cms express
Сам тег body уже определен в шаблоне сайта, поэтому описывать его вторично также не нужно. Если Вы хотите добавить новую статью на свой сайт или изменить уже имеющиеся, для этого выполните такие действия:     &nbs
подробнее...

Теги создание сайтов, создание игр, дизайн, игры, информатика, уроки photshop, php, c++, музыка, delphi, cms, робосайт
Статьи сайта
megainformatic - Веселый Буквоежка - онлайн комикс - страница 3

megainformatic - Веселый Буквоежка - онлайн комикс - страница 4

megainformatic - Веселый Буквоежка - онлайн комикс - страница 5

megainformatic - Веселый Буквоежка - онлайн комикс - страница 6

megainformatic - Веселый Буквоежка - онлайн комикс - страница 7

megainformatic - Веселый Буквоежка - онлайн комикс - страница 8

megainformatic - Веселый Буквоежка - онлайн комикс - страница 9

megainformatic - Веселый Буквоежка - онлайн комикс - страница 10

megainformatic - Веселый Буквоежка - онлайн комикс - страница 11

megainformatic - Веселый Буквоежка - онлайн комикс - страница 12

megainformatic - Веселый Буквоежка - онлайн комикс - страница 13

megainformatic - Веселый Буквоежка - онлайн комикс - страница 14

megainformatic - Веселый Буквоежка - онлайн комикс - страница 15

megainformatic - Веселый Буквоежка - онлайн комикс - страница 16

megainformatic - Веселый Буквоежка - онлайн комикс - страница 17

megainformatic - Веселый Буквоежка - онлайн комикс - страница 18

megainformatic - Веселый Буквоежка - онлайн комикс - страница 19

megainformatic - Веселый Буквоежка - онлайн комикс - страница 20

megainformatic - Веселый Буквоежка - онлайн комикс - страница 21

megainformatic - Веселый Буквоежка - онлайн комикс - страница 22

megainformatic - Веселый Буквоежка - онлайн комикс - страница 23

megainformatic - Эмулятор ZX-Spectrum, БК-0010.01 и их работа в эмуляторе DosBox 0.74

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 1

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 2

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 3

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 4

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 5

megainformatic - первый независимый онлайн-журнал комиксов ККК Костя Коробкин Комикс номер 1 март 2016

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 6

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 7

megainformatic - Эмулятор БК-0010.01 версия 2.6 для Windows 9x/Me/2000/XP автор Юрий Калмыков 2002 год

megainformatic - api получения готового решения для решения различных задач возникающих при создании сайта

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 8

роман Eternity Вечность - автор Синицин Андрей megainformatic

роман Eternity Вечность - автор Синицин Андрей megainformatic - страница 2

роман Eternity Вечность - автор Синицин Андрей megainformatic - страница 3

роман Eternity Вечность - автор Синицин Андрей megainformatic - Windows Sockets 2, ping, Windows SDK 7, чем открыть hxs файл - страница 4

megainformatic - Размещение Вашей рекламы на нашем сайте

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 9

megainformatic - Костя Коробкин - В гостях у тёти Светы (kk as) - онлайн комикс - страница 10

роман Eternity Вечность - автор Синицин Андрей megainformatic - В чём отличие в применении символов & и * в языке c++ ? также продолжаем изучать Windows Sockets 2 и пример simple - страница 5

megainformatic - Костя Коробкин - В гостях у тёти Светы часть 2 Живые машины (kk as) - онлайн комикс - страница 11

megainformatic - игра Шарики на лифте Серия 1 Разгони Лифт / Balls on Lift Level 1 Run The Lift версия 0.9.2 05.10.2016 / version 0.9.2 05.10.2016

megainformatic - Костя Коробкин - В гостях у тёти Светы часть 2 Живые машины (kk as) - онлайн комикс - страница 12

роман Eternity - страница 6 + решение по анимации закрывающихся дверей лифта

megainformatic - Сообщить об ошибке

Balls on Lift Table of Records / Шарики на лифте Таблица рекордов

megainformatic - Костя Коробкин - В гостях у тёти Светы часть 2 Живые машины (kk as) - онлайн комикс - страница 13

Balls on Lift / Шарики на лифте - Как создать игру - серия уроков - Рисуем шарик / How make the game - series of lessons - draw ball

Balls on Lift / Шарики на лифте - Как создать игру - серия уроков - Содержание / How make the game - series of lessons - Index

Balls on Lift / Шарики на лифте - Как создать игру - серия уроков - Разные шарики / How make the game - series of lessons - Different balls

Balls on Lift / Шарики на лифте - Как создать игру - серия уроков - Анимация прыжков шарика / How make the game - series of lessons - Animation ball jumps

Balls on Lift / Шарики на лифте - Как создать игру - серия уроков - Создание фона заднего плана / How make the game - series of lessons - Creating background for back plane

Balls on Lift / Шарики на лифте - Как создать игру - серия уроков - Вставка созданной графики, звуков и музыки в игру - Inserting created graphics, sounds and music in the game.

Balls on Lift / Шарики на лифте + Как создать игру - бесплатная игра + комплект уроков о том, как создавать контент для игры - спрайты, фоны, звуки, музыку, и вставить его в игру - How to create a game - free game + package of lessons on how to create content for the game - sprites, backgrounds, sounds, music, and insert it into the game

Balls on Lift / Шарики на лифте + Как создать игру - бесплатная игра + комплект уроков о том, как создавать контент для игры - спрайты, фоны, звуки, музыку, и вставить его в игру - How to create a game - free game + package of lessons on how to create content for the game - sprites, backgrounds, sounds, music, and insert it into the game

подробнее

     
 

Основы IDirectMusic8 в среде Delphi6-7

Введение

Воспроизведение музыки в формате *.mid (midi) можно осуществить при помощи интерфейса IDirectMusic.

Подробности о использовании данного интерфейса можно прочесть в документации по DirectX8.1 SDK. Целью данного примера является

- демонстрация работы с интерфейсом на объектном Паскале в среде Delphi 6-7;

- описание того, как используя минимум знаний по Microsoft Visual Studio (MSVS) 7 (или 2003 и выше) и знания Delphi 6-7 написать чистое WinAPI-приложение и загрузить окно формы из файла ресурсов (*.res) скомпилированного в среде MSVS.

Вашему вниманию предлагаются базовые уроки представляющих оригинальные уроки взятые из DX SDK 8.1 и адаптированные к применению в Delphi 6-7. Для версий Delphi выше 7 могут потребоваться модификации кода!

Примечание: длинных описаний и пояснений к урокам пока не даю - все что здесь есть - это в основном исходный код и исполнимый откомпилированный файл. Чтобы детально разобраться в технологии Вам понадобится DX SDK 8 или выше, Delphi 7 (или 6 или выше) и много много терпения и упорства.

Обзор урока

PlayAudio

Пример основан на оригинальном примере PlayAudio на C++ из DX SDK 8.1. Реализацию смотри внутри файла с исходным кодом.

Показано как создать окно приложения в Delphi 6-7 без VCL и загрузить его из ресурсного файла (*.res) сгенерированного в Microsoft Visual Studio 7 (2003 или выше).

В контексте данного примера интерес представляет не столько использование IDirectMusic для загрузки и воспроизведения midi-файла, реализация и так понятна, т.к. всё основано на оригинальном С++ примере с конверсией на Delphi плюс ряд дополнительных исходников, которые Вы найдете в архиве С ОБЩИМ КОДОМ, сколько принцип написания WinAPI-приложения и создания окна из ресурсного файла *.res.

Для создания WinAPI-приложения и использования окон, загружаемых из ресурсных файлов Вам понадобится не только Delphi (6-7 или выше), но и Microsoft Visual Studio 7, 2003 или выше.

Для создания ресурсного файла Запустите MSVS. Откройте оригинальный проект DX8 из папки DX SDK на С++, который Вы
хотите конвертировать на Delphi 6, 7 или выше. Скомпилируйте проект C++. В папке Debug или Release
(в зависимости от типа конфигурации проекта - отладочный (Debug) или Окончательный (Release)) найдите файл *.res и скопируйте его в папку с проектом на Delphi. Для просмотра конфигурации проекта выберите пункт меню Project > * Properties... , где вместо * стоит имя текущего открытого Вами проекта. В открывшемся диалоговом окне в поле Configuration можно посмотреть (или изменить) текущую конфигурацию проекта -

окно конфигурации проекта MSVS

Из среды Delphi просмотр скомпилированного файла ресурсов можно осуществлять
редактором Image Editor входящим в комплект среды Delphi. Он используется для
редактирования изображений находящихся внутри файлов-ресурсов (например иконок приложения - 32х32 и 16х16). Редактор можно запустить из среды Delphi - Tools > Image Editor

К сожалению Dialog (окно Диалога) отредактировать средствами Image Editor не удастся. Для этого
используйте MSVS, а сам диалог сохраняется в файле *.res проекта С++ при его компиляции.
Из Delphi - проекта загрузка диалога будет происходить именно из этого (или другого, указанного Вами) файла-ресурса строкой кода - {$R *.res} , где вместо * нужно проставить конкретное имя файла-ресурсов.

Остальное найдете внутри файла с исходным кодом.

 
     
  Архив PlayAudio.rar - 61 Кб - 61 Kb  
     
  Внимание! Для нормальной работы и компиляции Вам потребуется архив С ОБЩИМ КОДОМ (762 Кб). - ОБЩИЙ КОД - 585 Кб  
     
     
подробнее

Модуль отзывов/комментариев для вашего сайта

Модуль отзывов/комментариев для вашего сайта
comments
Приобрести комплект megainformatic cms express files + модуль comments


Стоимость: 500 руб.


Пример работы модуля комментариев Вы можете видеть на данной странице (см. кнопку ОСТАВИТЬ КОММЕНТАРИЙ)



Демонстрация работы системы



Необходимый атрибут любого современного сайта - возможность оставлять отзывы или комментарии к статьям, товарам, страницам.

С другой стороны - при использовании модулей отзывов на сайте, становится актуальной защита от нежелательных комментариев носящих характер спама.

В этой связи в данном модуле комментариев реализована возможность оставить комментарий с подтверждением е-майл по специальному ключу.

Ключ гарантирует, что оставивший комментарий как минимум указал настоящий е-майл, что уже говорит в пользу желательного комментария.

В завершение - отзывы и комментарии попадают в открытый доступ только после их модерации. Это исключает публикацию всякой посторонней информации.

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

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



Модуль может применяться в составе систем класса megainformatic cms, а также на других cms, с учётом их особенностей.

В комплект входит готовая cms - megainformatic cms express files + модуль комментариев и описание с инструкцией по подключению к сайту.

ВАЖНЫЕ ОСОБЕННОСТИ

- компактность - модуль представлен в виде 1 скрипта php;

- минимальные изменения необходимые для встраивания в сайт;

- автономное хранилище для комментариев не требующее изменений в базе данных сайта;

- возможность интеграции с другими системами;

- защита от спама - комментарии проходят проверку по ключу и премодерацию;

- полностью открытый исходный код на php;

- логирование всех оставленных комментариев (т. к. среди спама может оказаться и полезный комментарий);

- простой вариант под ключ - вы получаете готовый к работе сайт с подключенным модулем комментариев, для установки не требуется использование баз данных - достаточно скопировать все файлы на хостинг (в любую папку) и внести всего 2 изменения в файл конфигурации, после чего сайт и модуль комментариев готовы к работе;

подробнее


[к содержанию] [другие статьи Тимонина Андрея]

DirectX9. Создаем первое приложение.

автор: Тимонин Андрей

дата публикации на сайте Мега Информатик: 18.11.2012

Добро пожаловать в цикл моих уроков посвященных программированию.

На написание этой статьи меня вдохновил блог о создании игр с нуля, который можно посмотреть по следующей ссылке mindillusion.ru.

Здесь мы продолжаем работать с Direct X9 и создадим свое приложение на основе созданного нами класса.

Результат наших действий будет такой, как на скриншоте.

И так, перейдем к делу... Для начала, нам необходимо создать окно. Используем Win32 Api фунции. Мой базовый класс для упрощения создания таких приложений.

class BaseWindowClass {
protected:
WNDCLASS baseWndClass;
HWND baseHWindow;
MSG baseMessage;

float dx, dy; //смещение координат Direct3D относительно координат окна
float clientWidth, clientHeight; //длина и высота окна

public:
//конструктор
BaseWindowClass();
//деструктор
virtual ~BaseWindowClass();

/*Этот метод создает окно.
Параметры:
hInstance - идентификатор приложения
szTitle - заголовок приложения
iWidth - ширина окна
iHeight - высота окна
*/
bool Create(HINSTANCE hInstance, LPCWSTR szTitle,
DWORD iStyle = WS_OVERLAPPEDWINDOW | WS_VISIBLE,
int iWidth = CW_USEDEFAULT,
int iHeight = CW_USEDEFAULT);
//оконная процедура
static LRESULT CALLBACK WndProc(HWND hWindow, UINT iMessage,
WPARAM wParam, LPARAM lParam);
//Этот метод запускает цикл обработки сообщений
void Run();
//Этот метод выполняет обработку сообщений
virtual bool MessageHandler(UINT iMessage, WPARAM wParam,
LPARAM lParam);
//Абстрактный метод. Предназначен для рисования в окне.
//Вызывается в цикле сообщений.
virtual void Render(float ElapseTime) = 0;
virtual void FrameMove(float ElapseTime)=0;

//этот метод выполняет инициализацию Direct3D
bool initD3D();
//этот метод настраивает устройство Direct3D
void setMatricesAndRenderStates();

};

А теперь посмотрим на реализацию методов.

BaseWindowClass::BaseWindowClass() {}

//-----------------------------------------------------------------------

BaseWindowClass::~BaseWindowClass()
{

//удаляем класс окна
UnregisterClass(L"BaseWindow", baseWndClass.hInstance);
}

Создание окна осущесттвляется таким образом.

bool BaseWindowClass::Create(HINSTANCE hInstance, LPCWSTR szTitle,
DWORD iStyle, int iWidth, int iHeight)
{
//заполняем структуру с параметрами класса окна
baseWndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
baseWndClass.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_SPACE));
baseWndClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
baseWndClass.hInstance = hInstance;
baseWndClass.lpfnWndProc = WndProc;
baseWndClass.lpszClassName = L"Base Window";
baseWndClass.lpszMenuName = NULL;
baseWndClass.cbClsExtra = 0;
baseWndClass.cbWndExtra = 0;
baseWndClass.style = 0;

//пробуем зарегистрировать класс окна
if(!RegisterClass(&baseWndClass))
{
//если не получилось, генерируем исключение
Space::ExceptionBase e(CLASSREGISTRATIONERROR, L"Не могу зарегистрировать класс");
throw e;
}

//пробуем создать окно
baseHWindow = CreateWindow(L"Base Window", szTitle, iStyle,
CW_USEDEFAULT, CW_USEDEFAULT,
iWidth, iHeight, NULL, NULL,
hInstance, (void*)this);
//в случае неудачи генерируем исключение
if(baseHWindow == NULL)
{
Space::ExceptionBase e(WINDOWCREATIONERROR, L"Не могу создать окно");
throw e;
}
//пробуем установить заданный текст в заголовке окна
if(!SetWindowText(baseHWindow, szTitle))
{
//если не получилось, генерируем исключение
Space::ExceptionBase e(SETTITLEERROR, L"Не могу изменить текст в заголовке окна");
throw e;
}

return 0;
}

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

Операционная система Windows общается со своими клиентскими приложениями посредством сообщений. А значит, нам необходимо обрабатывать эти сообщения и между делом выводить наше, сформированное в заднем буфере изображение на канву окна.

CALLBACK Функция WndProc выглядит у нас таким образом

LRESULT CALLBACK BaseWindowClass::WndProc(HWND hWindow,
UINT iMessage, WPARAM wParam, LPARAM lParam)
{
//создаем указатель на данный экземпляр класса
BaseWindowClass *baseWnd = NULL;
bool beProcessed = false;

//обрабатываем принятое сообщение
switch(iMessage)
{
//это сообщение отправляется при создании окна
case WM_NCCREATE:
//изменяем атрибут данного окна на значение, указанное в параметре
//(lParam) сообщения (указатель на данные, которые используются для
//создания окна)
SetWindowLong(hWindow, GWL_USERDATA,
(long)(LPCREATESTRUCT(lParam)->lpCreateParams));
break;
default:
//определяем указатель на данный экземпляр класса
baseWnd = (BaseWindowClass*)GetWindowLong(hWindow,
GWL_USERDATA);
if(baseWnd != NULL)
{
//вызываем обработчик сообщений данного класса
beProcessed = baseWnd->MessageHandler(iMessage,
wParam, lParam);
}
break;
}
//если принятое сообщение не было обработано...
if(beProcessed == false)
{
//... выполняем стандартную обработку
return DefWindowProc(hWindow, iMessage, wParam, lParam);
}
return 0;
}

Цикл обработки сообщений, пока не поймаем событие закрытия окна.

void BaseWindowClass::Run()
{
MSG msg;
ZeroMemory( &msg, sizeof(msg) );
//входим в цикл обработки сообщений
while( msg.message!=WM_QUIT )
{
//читаем очередное сообщение
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{
//обрабатываем его
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else
{
float ElapseTime;
ElapseTime = Space::getElapsedTime();

//перерисовываем окно
FrameMove(ElapseTime);

Space::Graphics& gr = Space::Graphics::get();
if (!FAILED(gr.StartRender(0x00000000)))
{
Render(ElapseTime);
// закончили рендер
gr.EndRender();
}
else
gr.Reset();
}
}
}

Окно создано, события обрабатываются, осталось только создать наше Direct3D устройство и настроить матрицы проекций. Смотрим далее.

//этот метод выполняет инициализацию Direct3D и объектов игры
bool BaseWindowClass::initD3D()
{
//определяем размер клиентской части окна
RECT clientRect;
GetClientRect(baseHWindow, &clientRect);
//определяем смещение координат Direct3D относительно оконных координат
dx = (float)((clientRect.right - clientRect.left)/2);
dy = (float)((clientRect.bottom - clientRect.top)/2);
//сохраняем размер окна
clientWidth = dx * 2;
clientHeight = dy * 2;

// Инициализируем графику
if (!Space::Graphics::get().Init(baseHWindow, clientWidth, clientHeight))
return FALSE;

return TRUE;
}

Устройство создано, осталось его настроить.

//этот метод настраивает устройство Direct3D
void BaseWindowClass::setMatricesAndRenderStates()
{
Space::Graphics& gr = Space::Graphics::get();

//начинаем рендер. Очищаем буфер кадра и заливаем черным цветом
if (!FAILED(gr.StartRender(0x00000000)))
{
// настраиваем рендер-стейты
gr.SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);

//отключаем освещение
gr.SetRenderState(D3DRS_LIGHTING, FALSE);

//устанавливаем режим отображения как сплошной
gr.SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);
gr.SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);

//разрешаем Z буфер
gr.SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);

//настроим Z буфер на запись
gr.SetRenderState(D3DRS_ZWRITEENABLE, TRUE);

D3DXMATRIX mat, matViewProj, matProj, matView;
D3DXMatrixIdentity(&mat);

//определяем размер клиентской части окна
RECT clientRect;
GetClientRect(baseHWindow, &clientRect);
//определяем смещение координат Direct3D относительно оконных координат
dx = (float)((clientRect.right - clientRect.left)/2);
dy = (float)((clientRect.bottom - clientRect.top)/2);
//сохраняем размер окна
clientWidth = dx * 2;
clientHeight = dy * 2;

// матрицы вида и проекции
D3DXMatrixTranslation(&matView, 0, 0, 0);
D3DXMatrixOrthoLH(&matProj, clientWidth, -clientHeight, 0, 10);

// получаем матрицу вида/проекции
D3DXMatrixMultiply(&matViewProj, &matView, &matProj);

// настраиваем фильтрацию текстуры
gr.SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
gr.SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
gr.SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);

// включаем альфа-блендинг
gr.SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
gr.SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
gr.SetRenderState( D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA );
}

}

У нас получился абстрактный класс. Для его использование необходимо его конкретизировать и перегрузить виртуальные методы. У нас виртуальными являются

FrameMove и Render. У меня получился такой класс.

class RenderWindow : public BaseWindowClass
{
private:

//этот метод освобождает все созданные объекты
void ReleaseAll();

public:
//конструктор
RenderWindow(void);
//деструктор
virtual ~RenderWindow(void);
//обработчик сообщений пользователя
virtual bool MessageHandler(UINT iMessage, WPARAM wParam,
LPARAM lParam);
//этот метод рисует очередной кадр
virtual void Render(float ElapseTime);
virtual void FrameMove(float ElapseTime);

void CreateScene();

};

Что прописывать в конкретном методе, решать вам. А я покажу, как я создавал этот класс в стандартной функции main - главной функции приложения.

//точка входа в программу
INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst,
LPSTR szCmdLine, INT iCmdShow)
{
try
{
std::setlocale( LC_ALL, ".ACP" );
//создаем экземпляр класса игры
RenderWindow game;
//создаем окно
game.Create(hInst, L"Pandora 1.0b",WS_CAPTION|WS_SYSMENU /*WS_OVERLAPPEDWINDOW*/ | WS_VISIBLE,
800, 600);
//инициализируем Direct3D
game.initD3D();
//устанавливаем матрицы и настраиваем параметры отображения сцены
game.setMatricesAndRenderStates();
game.CreateScene();
//запускаем цикл обработки сообщений
game.Run();
}
//ловим исключения, и выводим сообщения об ошибках
catch(Space::ExceptionBase err)
{
MessageBox(NULL, (const wchar_t*)err, L"Ошибка", MB_ICONERROR);
}
catch(...)
{
MessageBox(NULL, L"Неизвестная ошибка", L"Ошибка", MB_ICONERROR);
}
return 0;
}

 

На этой позитивной ноте я статью заканчиваю. С уважением, Андрей.

 

[к содержанию] [другие статьи Тимонина Андрея]

подробнее

     
  Уроки Photoshop - Рисуем и анимируем  
     
  Уроки Photoshop - Рисуем и анимируем  
 
 
     
  [содержание]  
     
  Урок 1 - Старт - PSD, BMP, JPG, TGA, Контуры, Обесцвечивание  
     
 

Вот Мы с Вами начали наш первый урок. Вы уже наверное посмотрели титульную заставку, которая есть на этой странице и задались вопросом: А как же всё это сделано ? Отвечу - это всё было нарисовано от руки обычной мышкой.

Как ?

 
     
  Давайте попробуем. За основу возьмём пока главного героя - Веселого Буквоежку (ВБ).  
     
   
     
  Создаем новое изображение, размер пока зададим 512 x 512 пикселей.  
     
   
     
  Задаем единицы измерения - пиксели (pixels), проставляйте значения, цвет подложки (заднего плана) можно задать пока Transparent (прозрачный). Как видите на рисунке Ваши действия обозначены цифрами от 1 до 6  
     
   
     
 

Остальное нужно оставить без изменений или задать как на рисунке. Resolution - разрешение вашей картинки (пиксель/дюйм) по-умолчанию стоит 72, оставьте как есть или сделайте 300 - как у меня. Color Mode - обязательно RGB Color - чтобы мы могли работать с цветным 24 битным изображением.

1) Почему разрешение имеено 300 точек на дюйм ?

2) Почему изображение будет 24 битным ?

 
     
 

Жмём ОК и слушаем ответ на вопросы -

1) Разрешение влияет на картинку, выводимую на печать, т. е. если Вы планируете вашу картинку после её создания напечатать, то получите именно столько точек на дюйм, сколько это указано, на фактический размер картинки (512х512, который мы уже задали в пикселях), это никак не влияет, но 300 в данном случае - для печати достаточно хорошее значение;

2) Если мы задаем режим RGB Color / 8 bit - это значит каждому пикселю нашего изображения уделяется в памяти 3 х 8 = 24 бит, поскольку R (Red), G (Green) и B (Blue) - его составляющие красного, зеленого и синего будут занимать по 8 бит каждый, а в совокупности это и дает изображение 24 бит на пиксель.

Если еще прикинуть что само изображение будет 512 х 512 пиксель или = 262144 пикселей, и каждый пиксель - это 3 байта (24 бита, 8 бит - это 1 байт), то вся информация о картинке в памяти будет занимать -

262144 х 3 байт = 786432 байт.

1024 байт - это 1 Килобайт (Кб), значит наша картинка будет иметь размер - 768 Кб.

Попробуйте сохранить и проверьте какой получился размер.

 
     
 

У меня получился другой размер файла, скажите Вы. Почему ?

Причин несколько - 1) пока у нас пустое изображение, нужно хотя бы залить например сплошным цветом и сохранить еще раз;

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

Ого, размер файла стал даже больше чем 768 Кб.

Потому что еще должна храниться где-то служебная информация - размеры изображения, его описание и прочее. Поэтому размер файла увеличен. К тому же, если Вы сохраняете в формате PSD - это рабочий формат, всех ваших файлов, то тут еще будет много дополнительной информации - о слоях, стилях, шрифтах, оформлении и прочем, что естественно влияет на размер файла.

Но вот если Вы выберите для сохранения формат файла BMP, 24 бит, то в результате получите именно то, о чём я говорил.

 
     
 

Файл BMP (Bitmap) - это точная копия того, как хранится изображение в памяти без каких-либо преобразований. Однако этот формат не используйте для своих изображений.

Рабочие изображения храните в формате PSD - при этом Вы не потеряете ничего из того, что делали - слоёв, оформления и прочих особенностей (BMP их не сохраняет).

Итоговые изображения - законченные и готовые к использованию также не сохраняйте в BMP - они получаются очень большие по размеру и долго обрабатываются. Вместо этого рекомендую использовать более удобный и надежный формат - JPG. По-сути это тот же BMP, но здесь можно хранить файл, выбрав приемлемое качество сжатия. Таким образом Вы достигнете сразу двух целей: получите конечный файл готовый к публикации и размер его будет значительно меньше, чем аналогичный файл BMP, даже если Вы сохраните в JPG с максимальным качеством (12).

 
     
 

Таким образом, в ходе наших с Вами уроков Вы будете работать преимущественно с файлами в форматах PSD, JPG и TGA.

Это еще что за формат ?

Формат TGA похож на BMP, но удобен тем, что позволяет задействовать дополнительный канал - альфа-маску, может использовать некоторую степень сжатия и главное - идеально подходит для игр, там где Вам понадобятся анимированные спрайты с прозрачным фоном.

Эти три базовых формата мы и будем применять в наших уроках.

 
     
  Итак, это было немного теоретических сведений, которые Вам еще пригодятся, но продолжим наш урок.  
     
  Давайте возьмём картинку нашего героя, вставим в созданное нами изображение, сделаем его черно-белым (чтобы было легче обводить) и на отдельном слое, вооружившись кистью просто обведем контуры.  
     
  Открываем картинку fle_1.jpg из Photoshop, выбираем пункт меню Select > All чтобы выделить всё изображение в картинке  
     
   
     
  Далее выбираем Edit > Copy, переключаемся на новое, созданное нами изображение и снова выбираем Edit > Paste  
     
   
     
  Мы видим, что на новом слое Layer 2, который до сих пор был пустым появилось наше изображение.  
     
  Теперь создаем новый слой и рисуем на нём -  
     
   
     
  Вернемся на слой Layer 2 и обесцветим изображение на нём -  
     
   
     
  Щелкаем слой Layer 3, выбираем подходящий цвет, кисть и её параметры и обводим по контуру  
     
   
     
   
     
  чтобы было удобнее обводить воспользуйтесь инструментом Zoom Tool и увеличьте нужный участок картинки. Обратите внимание! Обводим на слое Layer 3 !!! Иначе наши контуры сольются с картинкой (если обводите на Layer 2)  
     
   
     
  Размеры кисти задайте порядка 3 пикселей, края твёрдые и осторожно обводите мышью контуры.  
     
   
     
  В результате у Вас должно получиться что-то подобное -  
     
   
     
  Теперь если скроем слой оригинал (по-которому мы ориентировались при обводке), то увидим наш результат. Именно такой цвет для обводки был выбран не случайно - Вам гораздо легче видеть те участки, которые Вы уже обвели, а которые - еще нет.  
     
   
     
  Маленькая хитрость - когда рисуете контуры в увеличенном изображении нажимайте клавишу [Пробел] и двигайте изображение мышью, нажав еще и левую кнопку мыши.  
     
  Ну и поскольку реальные картинки всегда бывают обведены черным, а не пурпурным цветом, то исправим этот момент -  
     
   
     
   
     
  [содержание]  
     
  Уроки Photoshop - Рисуем и анимируем  
 
 
     
     
  Другие уроки можно посмотреть в разделе Статьи  
     
 

Небольшой урок по php - Использование checkbox

казалось бы - что может быть проще - обычный checkbox - - но оказывается надо учитывать несколько особенностей для корректной работы с этим элементом управления на ваших Web-страничках

 
     
  Создадим файл checkbox.php и вставим в него такой код -  
     
  <HTML>
<HEAD>
<TITLE>Просмотр списка статей</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">
</HEAD>
<BODY>

<div style="width: 990px; margin: 0 auto; background: #777777;">
<div style="width: 900px; margin: 0 auto; background: #aaaaaa;">

<?php

/* Особенность работы checkbox'а

если чекбокс установлен - при отправке данных формы передается его значение value
если чекбокс не установлен - при отправке данных формы не передается ничего !!!

*/

echo "Флажок ";
$published = 1;
$checked = '';

if ( $_POST['published-1'] == 1 )
{
$checked = 'checked = "checked"';
//$published = 1;
echo "установлен";
}
else {
$checked = '';
//$published = 0;
echo "сброшен";
}


$num = 1;

echo "<form name='save_changes' action = 'checkbox.php' method = 'POST'>";
echo "<input type=\"checkbox\" ".$checked." name=\"published-".$num."\" value=\"".$published."\">";
echo "<input type = 'submit' value = 'Сохранить изменения'>
</form>";


?>
</div>
</div>

</BODY>
</HTML>

 
     
  Если Вы совсем не курсе где и как должны выполняться php файлы том вам нужно ознакомиться со статьей - Введение в php  
     
  Рассмотрим что делает данный код  
     
 

echo "Флажок ";
$published = 1;
$checked = '';

Эти три строчки выводят надпись Флажок, а также создают 2 новые переменные со значениями 1 и '' - т. е. пустая строка

if ( $_POST['published-1'] == 1 )

 
     
 

Проверяем было ли отправлено в форму методом пост поле published-1 со значением равным 1,

если да -

$checked = 'checked = "checked"';
//$published = 1;
echo "установлен";

Переменную $checked заполняем строкой представляющей атрибут checked для чекбокса при котором чекбокс на странице будет выведен как помеченный галочкой.

Также выводим фразу - установлен - будет понятно что флажок был установлен

иначе -

else {
$checked = '';
//$published = 0;
echo "сброшен";

атрибут checked не задаем, выводим фразу - сброшен

 
     
 

$num = 1;

эта переменная будет задавать часть имени нашего чекбокса

 
     
 

echo "<form name='save_changes' action = 'checkbox.php' method = 'POST'>";
echo "<input type=\"checkbox\" ".$checked." name=\"published-".$num."\" value=\"".$published."\">";
echo "<input type = 'submit' value = 'Сохранить изменения'>
</form>";

выводим форму, которая выводит чекбокс с атрибутом checked заданным в переменной $checked, именем состоящим из слова published тире - и переменной $num и значением value которое подставляется из переменной $published,
также выводим кнопку сохранить изменения

 
     
 

Это чудо работает таким образом - если зададим состояние чекбокса и нажмём кнопку <Сохранить изменения>, то фраза Флажок установлен или сброшен - будет показывать состояние чекбокса.

Но вот само состояние чекбокса надо выставлять через созданную нами переменную $checked

как видите после нажатий кнопки <Сохранить изменения> чекбокс своё состояние теряет, а должен сохранять.

Как это исправить ?

Легко - находим самую первую строчку начала php кода -

echo "Флажок ";
$published = 1;
$checked = '';

и закомментируем строку

//$checked = '';

после проверки выясняем, что теперь чекбокс сохраняет своё состояние :)

Работающий пример на php смотрите тут - checkbox.php

ВОТ и ВСЁ на сегодня. Ждите новых уроков.

 
     
  Другие уроки можно посмотреть в разделе Статьи  
     
megainformatic live chat
Начать беседу
X
 

Оставленные комментарии



fle game engine - движок для создания игр
fle game engine - движок для создания игр


Something: Unexplained 2 captive of desires / Нечто: Необъяснимое 2 в плену желаний
Костя Коробкин Комикс Коллекционное издание - 6 комиксов, 81 страница, 220 mp3 треков
megainformatic Размещение баннерной рекламы у нас
Время загрузки: 0,0827