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


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

Урок 3 Создание Win32-приложений. Создание меню и простых диалоговых окон.
  Разбираем конструкции языка C++ на примере работы в Microsoft Visual Studio 2008  
подробнее...

Теги создание сайтов, создание игр, дизайн, игры, информатика, уроки photshop, php, c++, музыка, delphi, cms, робосайт
Статьи сайта
megainformatic - Тестирование подключения к платежной системе с использованием скрипта эмулятора

megainformatic - Модуль для регистрации пользователя на сайте

megainformatic - Код для модуля регистрации пользователя на сайте

megainformatic - Быстрый подсчёт ключевых слов в статье

megainformatic - Модуль подсчёта ключевых слов в статье

megainformatic - Онлайн-сервис для подсчёта статистики ключевых слов

megainformatic - Пишем слайдер на javascript с нуля

megainformatic - Логика работы слайдера на javascript

megainformatic - Пишем свою соц. сеть - модуль предложений для webjob

megainformatic - Пишем свою соц. сеть - модуль предложений для webjob - часть реализации для личного кабинета

megainformatic - Пишем свою соц. сеть - Реализация файлового хранилища предложений в csv-файле

megainformatic - Тестирование подключения к платежной системе ЕДИНЫЙ КОШЕЛЕК (w1.ru) с использованием скрипта эмулятора

megainformatic - Пишем свою cms - шаг 1

megainformatic - Пишем свою cms - шаг 2

megainformatic - Пишем свою cms - шаг 3

megainformatic - бесплатная флеш игра freeway fury 2 - разработчик Serius Games

megainformatic - бесплатные флеш игры сторонних разработчиков

megainformatic - Как я осваивал Flash

megainformatic - Список уроков на тему создания flash приложений и игр

megainformatic - Как я осваивал Flash - шаг 2 - Основы создания простейших flash - игр

проект портала Идеи Комфорта

megainformatic - игра Веселый Буквоежка

megainformatic - игра Веселый Буквоежка

megainformatic - Использование cron, crontab и планировщика задач

megainformatic - Совместное использование jquery и mootools или других js-фреймворков

megainformatic - Модуль content php performer для megainformatic cms

megainformatic - Пишем компактный слайдер

megainformatic - Что нужно знать для создания сайта ?

megainformatic - Что нужно знать для создания сайта ? Глава 2 - Кодировки и DOCTYPE

megainformatic - Что нужно знать для создания сайта ? Глава 3 - Идём дальше - нанизываем новый код - где объявляются стили css и код javascript

megainformatic - Что нужно знать для создания сайта ? Содержание

megainformatic - Что нужно знать для создания сайта ? css - стили

megainformatic - preg_match или Использование регулярных выражений в php

megainformatic - статьи Тимонина Андрея - Flash. Содержание

megainformatic - статья Тимонина Андрея - Flash. Подготовка к работе.

megainformatic - статья Тимонина Андрея - Flash. Hello world.

megainformatic - статья Тимонина Андрея - Flash. Экспорт SWC библиотеки.

megainformatic - Тимонин Андрей - Несколько слов о себе

megainformatic - статьи Тимонина Андрея - уроки из области веб программирования, создания казуальных игр

megainformatic - статья Тимонина Андрея - Обеспечиваем доступ к объекту из любой точки программы. Singleton

megainformatic - статья Тимонина Андрея - Хронология работы программы. Создаем Лог

megainformatic - статья Тимонина Андрея - Поиск файлов. Получаем список файлов каталога.

megainformatic - статья Тимонина Андрея - Исключения. Создаем класс обработки исключений.

megainformatic - статья Тимонина Андрея - States. Создаем менеджер состояний игры.

megainformatic - статья Тимонина Андрея - Регистрация. Часть 1. Создаем страничку регистрации на сайте.

megainformatic - статья Тимонина Андрея - Регистрация. Часть 2. Создаем обработчик, и заносим информацию о пользователе в Б.Д.

megainformatic - статья Тимонина Андрея - Таймер. Выводим время игры.

megainformatic - статья Тимонина Андрея - DirectX9. Создаем основной класс обработки графики.

megainformatic - статья Тимонина Андрея - DirectX9. Создаем первое приложение.

megainformatic - Что нужно знать для создания сайта ? float - использование в css - стилях

megainformatic - Уроки Fruity Loops Studio (FL Studio) - урок 2 - пишем свою композицию COLD

megainformatic - Уроки Fruity Loops Studio (FL Studio) - урок 3 - экспериментируем с композицией COLD

megainformatic - Что нужно знать для создания сайта ? Стандартные шрифты для сайта

megainformatic - Что нужно знать для создания сайта ? ASC II Коды символов

megainformatic - Уроки Fruity Loops Studio (FL Studio) - урок 4 - пишем первый вариант композиции COLD

megainformatic - Популяризация Современных Научных Знаний и Размышления на околонаучные темы. СОДЕРЖАНИЕ

подробнее

Поговорим о компьютерной музыке

подробнее

     
 
Урок 3 Оконный и полноэкранный режимы работы D3D-приложения
 
О том, что потребуется для данного урока читайте в основном разделе - уроки delphi directx 8.1
 
Далее у читателя подразумевается наличие базовых знаний языка Delphi.
 
[назад] [страница 2] [далее] [к содержанию]
 
Опираясь на код приложения, который Вы создали в предыдущем уроке рассмотрим особенности, которые Вам нужно учесть при реализации работы в оконном/полноэкранном режимах
 
В первую очередь для проверки правильности созданного кода управления от DirectInput попробуйте добавить показ/отключение показа FPS. Для этого Вам нужно заглянуть в исходный код игры "Ну, Погоди!" и реализовать работу методов CountFPS, ShowFPS
 

Обратите внимание, что код метода TD3DGameApp.CreateInputObjects

должен выглядеть следующим образом -

procedure TD3DGameApp.CreateInputObjects;
begin
SetDefaultDefKeys;
m_DXInput := TDXInput.Create(Self);
m_DXInput.ActiveOnly := False;
// задает использование DirectInput всегда, независимо от активности приложения
m_DXInput.Exclusive := False;
//эксклюзивный режим нужен только тогда, когда Вы хотите использовать собственный //курсор мыши, прорисовываемый средствами Direct3D
end;

В качестве действия ShowFPSTrigger внутри DefineDefaultKeys нужно задать какую-либо клавишу.

вызов метода ShowFPS нужно добавить внутри UpdateInput

 
Теперь переходим непосредственно к рассмотрению особенностей переключения между оконным/полноэкранным режимами.
 

Индикатор активности приложения m_bIsActive устанавливается в методе TD3DGameApp.MsgProc

при получении системного сообщения WM_ACTIVATEAPP

m_bIsActive := BOOL(wParam);

 

Однако если Ваше приложение основано на классе TForm и использует для старта класс TApplication (как это имеет место в нашем случае), то данный метод (MsgProc) не получает данного сообщения в момент активации.

Вместо этого активацию нужно выполнить реализовав для класса TForm обработчики событий OnActivate и OnDeactivate-

procedure TMainForm.FormActivate(Sender: TObject);
begin
if g_d3dApp <> nil then
g_d3dApp.m_bIsActive := True;
end;

procedure TMainForm.FormDeactivate(Sender: TObject);
begin
if g_d3dApp <> nil then
g_d3dApp.m_bIsActive := False;
end;

 

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

 
Прежде всего отметим, что код примера SwitchScreenModesInVCL основывается на примере VCLTex из Delphi DirectX SDK Алексея Баркового (http://www.clootie.ru). Особенности касающиеся работы с текстурами удалены, внимание уделено лишь переключениям режимов Полноэкранный/Оконный в приложении на основе VCL и особенностям использования DX8_DIUtil8.pas (модуль для работы с DirectInput8 из Delphi) с классом CD3DApplication.
 
Как и в наших предыдущих уроках код приложения построен на основании двух классов. Первый класс производный от - TForm из VCL, второй подобен TD3DGameApp, но происходит от CD3DApplication из модуля D3DApp.pas библиотеки с общим кодом.
 

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

Какие же?

 

Прежде всего, если Вы заглянете в код SwitchScreenModesInVCL внутри модуля SwitchModesUnit.pas,

то обнаружите новый класс - TAbstractApp. Этот класс используется как переходное звено между классом приложения CD3DApplication не являющимся TForm и объектом TDXInput, требующим для своего использования именно такого класса.

Происходит всё довольно просто. Внутри класса CMyD3DApplication производного от CD3DApplication объявляется поле соответствующего типа, а в методе OneTimeSceneInit вызывается создание данного поля и задание для него указателя на обработчик окна данного класса.

Код внутри самого класса выполняет запоминание ссылки на оконную процедуру класса, а сама она выполняет не что иное, как вызов метода MsgProc класса CMyD3DApplication.

Используя объект FAbstractApp при создании объекта TDXInput достигается требуемый эффект. Класс TDXInput извлекает нужные ему параметры из объекта FAbstractApp, а приложение работает как ни в чем не бывало.

Если Вы посмотрите на код примеров из предыдущих уроков, то там класс TD3DAbstractApp является базовым для класса TD3DGameApp.

Такие сложности были связаны с тем, что модуль DX8_DIUtil8.pas был разработан на основе аналогичного кода из библиотеки DelphiX. Эта библиотека хоть и уже несколько устарела, послужила основой для данного модуля, поскольку не удалось разрешить некоторые проблемы, связанные с использованием оригинальных файлов для DirectInput8 из DirectX SDK на C++ при конверсии примеров на Delphi.

Получился компромисс.

 

Для примера SwitchScreenModesInVCL была выполнена следующая подготовка:

класс формы TAppForm, объект g_AppForm.

На форме располагаются

MainDisplayPanel: TPanel

и

ToggleFullscreen: TButton;

последняя применяется вместо пункта меню TMainMenu переключения режимов (для простоты).

 

Код выполняющий собственно переключение оконного/полноэкранного режимов - это обработчик события по нажатию на кнопку ToggleFullscreen

Этот же код вызывается при срабатывании действия DirectInput c именем ChangeWindowModeKey и

внутри FullScreenWndProc - для переключения в оконный режим по нажатию [Esc]ape

 

Этот метод - CD3DApplication.ToggleFullscreen

как видим часть класса CD3DApplication и реализован внутри D3DApp.pas

 

Внутри данного метода происходят следующие интересные вещи:

получаем информацию о адаптере, устройстве и режиме

pAdapterInfo := @m_Adapters[m_dwAdapter];
pDeviceInfo := @pAdapterInfo^.devices[pAdapterInfo^.dwCurrentDevice];
pModeInfo := @pDeviceInfo^.modes[pDeviceInfo^.dwCurrentMode];

используемом для формирования изображения D3D-приложения.

Если устройство не поддерживает оконный режим, то остаемся в полноэкранном режиме

Переключаем текущее состояние с оконного на полноэкранное (или наоборот)

Выполняем настройку для возможного изменения размеров рабочей области окна

Выставляем параметры отображения

Учитываем изменившиеся размеры окна

Располагаем окно в нужной позиции поверх всех остальных

 
Это лишь краткое описание того, что на самом деле происходит в коде (подробнее см. сам код примера)
 
Сравним это с тем, что имеет место в примере FullscreenMode (для Вас он уже есть в готовом виде, в конце данного урока), а пока нужно рассмотреть особенности внутри метода TD3DGameApp.SwitchDisplayModes
 

здесь информацию об адаптере, устройстве и режиме мы берем из -

полей записанных внутри класса TD3DGameApp, а поскольку это только размеры окна, то информация собственно об адаптере, устройстве и режиме на первый взгляд и не требуется

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

Какой текущий видеорежим использовался во время старта приложения?

Это мы можем узнать из метода TD3DGameApp.CreateDisplayObjects

 

Здесь видно, что для оконного режима не заданы размеры для

m_d3dpp.BackBufferWidth := m_dwScreenWidth;
m_d3dpp.BackBufferHeight := m_dwScreenHeight;

в D3DApp.pas (CD3DApplication.Initialize3DEnvironment) они задаются,

как задается и m_d3dpp.hDeviceWindow := m_hWnd;

причем как для оконного, так и для полноэкранного

 

аналогично поступим и в нашем примере

возвращаемся к методу TD3DGameApp.SwitchDisplayModes

ошибка происходит в методе m_pd3dDevice.Reset( m_d3dpp );

и ясно почему - не учитывается обработчик окна для оконного и полноэкранного режимов, а также заданные размеры окна в этих режимах.

Как это происходит в примере SwitchScreenModesInVCL ?

TAppForm.FormShow

fMyApp.m_hWnd := m_hwndRenderWindow;
fMyApp.m_hWndFocus := m_hwndRenderFullScreen;

Далее можно просмотреть где в коде CD3DApplication встречаются вхождения на m_hWnd и m_hWndFocus

 

Также интерес вызывает параллельный вопрос:

если m_hWnd и m_hWndFocus разные обработчики, а при создании TDXInput указывается лишь один из них, то как это скажется на работе устройств DirectInput?

 

Итак, что мы имеем в коде SwitchScreenModesInVCL ?

TAppForm.FormShow >

CMyD3DApplication.Create - всё предельно просто и ясно.

для полноэкранного режима создается отдельное окно - m_hwndRenderFullScreen

fMyApp.m_hWnd := m_hwndRenderWindow;
fMyApp.m_hWndFocus := m_hwndRenderFullScreen;

 

CD3DApplication.Create_ >

BuildDeviceList - сбор данных о дисплейном адаптере и установка режима 640х480 16 бит

т. к. m_hWnd уже <> 0, то в качестве окна используется fMyApp.m_hWnd := m_hwndRenderWindow; (см. TAppForm.FormShow)

 
FOldWndProc задаем для текущего окна
 

if (m_hWndFocus = 0) then
m_hWndFocus:= m_hWnd;

окно фокуса также иное

 

сохраняем свойства окна, запускаем таймер, инициализируем сцену и 3D-среду (Environment)

CD3DApplication.Initialize3DEnvironment - остановимся подробнее также на данном методе

здесь мы видим как определяется текущий видеорежим (заданный в BuildDeviceList)

проводится настройка изменений размеров

настраиваются следующие параметры отображения -

будет ли режим оконным

m_d3dpp.Windowed := pDeviceInfo^.bWindowed;

{...}

m_d3dpp.hDeviceWindow := m_hWnd; //независимо от оконный/полноэкранный!!!

if (m_bWindowed) then //размеры буфера подготовки кадра, его формат
begin
m_d3dpp.BackBufferWidth := m_rcWindowClient.right - m_rcWindowClient.left;
m_d3dpp.BackBufferHeight := m_rcWindowClient.bottom - m_rcWindowClient.top;
m_d3dpp.BackBufferFormat := pAdapterInfo^.d3ddmDesktop.Format;
end else
begin
m_d3dpp.BackBufferWidth := pModeInfo^.Width;
m_d3dpp.BackBufferHeight := pModeInfo^.Height;
m_d3dpp.BackBufferFormat := pModeInfo^.Format;
end;

устройство создается как

// Create the device
hr := m_pD3D.CreateDevice(m_dwAdapter, pDeviceInfo^.DeviceType,
m_hWndFocus, pModeInfo^.dwBehavior, m_d3dpp,
m_pd3dDevice);
//т. е. при создании устройства ему передается обработчик окна фокуса

 

Пример FullscreenMode(18 Кб)

[downloads:11]

Прежде чем открывать пример из среды Delphi и компилировать Вам понадобится расположить в папке примера файлы D3DX81ab.dll и DXErr81ab.dll (их найдете в дистрибутиве игры "Ну, Погоди!" или в папке с исходным кодом, можно также в архиве с общим кодом)

Взять из дистрибутива игры "Ну, Погоди!" папку Media\texures

Взять из исходного кода игры "Ну, Погоди!" папку common находящуюся внутри папки projects\2d_games\NuPogodi\source

Только после этого пример будет нормально компилироваться и работать!!!

Об этом уже неоднократно упоминалось, а также написано внутри readme.txt приложенном к архиву данного примера, но еще раз напоминаю, чтобы не возникало вопросов.

 

имеет следующие особенности

TMainForm.InitD3DApp - данный метод вызывается при показе формы окна приложения однократно пока g_d3dApp = nil.

Внутри него происходит создание объекта g_d3dApp, создание окна для полноэкранного режима

Метод TD3DGameApp.Create_ - внутри данного метода лишь задаются размеры окна для структур

m_rcWindowBounds и m_rcWindowClient

и вызывается метод начальной инициализации сцены

Внутри TD3DGameApp.CreateDisplayObjects

m_d3dpp.hDeviceWindow := m_hWnd; //указывает на обработчик окна формы приложения

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

hr := pD3D.CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
m_hWndMain, D3DCREATE_HARDWARE_VERTEXPROCESSING,
m_d3dpp, m_pd3dDevice );

 

TD3DGameApp.SwitchDisplayModes

{...}

AdjustWindowForChange; //важный метод, если его не использовать (попробуйте закомментировать),

то сквозь изображение полноэкранного режима "проблескивают" элементы рабочего стола.

m_d3dpp.hDeviceWindow := m_hWnd; //указывает на обработчик окна формы приложения, все сообщения будут посылаться ему даже при полноэкранном режиме

m_pd3dDevice.Reset - работает корректно именно при верном использовании обработчиков окон в указателях, особенно важно, что при создании устройства был указан обработчик окна полноэкранного режима (попробуйте заменить на обработчик окна формы с расположенном на нём TPanel, что имеет место в нашем случае и данный метод сразу же будет давать ошибку во время попытки переключения в полноэкранный режим) - приложение просто будет закрываться в связи с ошибкой

 
TD3DGameApp.CheckForLostFullscreen - метод ForceWindowed и его реализация опущены для некоторого упрощения кода
 
FullScreenWndProc - оконная процедура полноэкранного режима, если хотите узнать почему в полноэкранном режиме нет курсора мыши и как его установить - загляните сюда. Здесь же видно по какому сообщению (клавише) осуществляется выход из полноэкранного режима
 

И еще напоследок ряд замечаний, которые не имеют прямого отношения к теме данного урока, но будут всё же интересны

TD3DGameApp.DrawGameView

метод

// Erase the screen
m_pd3dDevice.Clear( 0, nil, D3DCLEAR_TARGET or D3DCLEAR_ZBUFFER,
FillColor, 1.0, 0 );

вызывается вне BeginScene ... EndScene

влияет ли это на производительность?

 

При попытке использовать код, выводящий изображение текстуры в примере SwitchScreenModes по аналогии с примером FullscreenMode не удается добиться такого же вида текстуры в рабочем окне, как в примере FullscreenMode. Почему?

 

 

Вот и сам пример SwitchScreenModes. (13 Кб)

[downloads:12]

Если Вы всё поняли и во всём разобрались, а также нашли ответы на поставленные 2 вопроса, значит данную тему можно считать усвоенной и двигаться дальше.

 
[ответы на поставленные вопросы] - для самопроверки
 
[назад] [страница 2] [далее] [к содержанию]
 
 
     
     
     
     
подробнее

     
 

Основы 3D-программирования DirectX8.1 в Delphi 6-7: теоретические и практические основы создания игр

 
     
  [статьи] [как создать игру ну, погоди!] [к содержанию]  
     
 

Подводная лодка и подводный мир

В данном уроке построенном в форме упражнений Вы попробуете разобраться в том как

Подводные миры
 

- имитировать подводную сцену при помощи тумана;

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

 

Для изучения методик Вам потребуется скачать:

- архив с общим кодом -


[downloads:10]
(если Вы его еще не скачали в предыдущем уроке)

- исходный код данного примера (32 Кб)



[downloads:22]

- медиа-файлы (модели, текстуры, шейдеры) - (676 Кб)



[downloads:23]
 

Краткое описание приложения: данное приложение предсталяет WinAPI-приложение для использования библиотеки DirectX 8.1. Для обращения к функциям библиотеки d3dx8.lib используется ее dll-аналог - D3DX81ab.dll

Файл DXErr81ab.dll представляет дополнительную библиотеку для вывода сообщений об ошибках приложения.

Поскольку Ваше приложение будет обращаться к этим библиотекам, необходимо разместить эти файлы в той же папке, что и исполнимый файл (*.exe) Вашего DirectX-приложения на Delphi.

 

Краткий обзор исходного кода модуля Main.pas:

класс приложения CSubmarineD3DApp производится от CD3DApplication (префикс типа C вместо T - как принято в Delphi - дань традициям заложенным в исходном коде на C++).

В конструкторе constructor CSubmarineD3DApp.Create; инициализируются все основные поля класса приложения, здесь же устанавливается цвет тумана - m_dwFogColor := D3DCOLOR_ARGB(255, 58, 180, 197);

 
Инициализация самого класса CD3DApplication происходит в коде модуля проекта - submarine.dpr путём вызова метода d3dApp.Create_
 

Т.к. класс CD3DApplication описан в модуле D3DApp8.pas, то заглянув в метод function CD3DApplication.Create_ Вы и узнаете какие методы вызываются во время инициализации вашего D3D-приложения:

{... здесь мы опускаем код, необходимый для инициализации Direct3D8, построения списка устройств и создания окна приложения}

// запускается DX-Timer - для организации вызовов периодических процессов D3D-приложения - это основной движущий процесс любого DirectX-приложения!

DXUtil_Timer(TIMER_START);

// первоначальная инициализация сцены Вашего 3D-приложения

OneTimeSceneInit;

// все остальные необходимые инициализации: InitDeviceObjects, RestoreDeviceObjects, InvalidateDeviceObjects,
DeleteDeviceObjects. Также обратите внимание на англоязычные комментарии (Если знаете английский :))

Initialize3DEnvironment;

 

Теперь Вам должно быть понятно откуда вызываются основные методы нашего приложения (InitDeviceObjects, RestoreDeviceObjects, InvalidateDeviceObjects, DeleteDeviceObjects).

Методы Render для отрисовки статичных объектов сцены и метод FrameMove для анимированных объектов вызываются в методе function CD3DApplication.Render3DEnvironment. Этот метод в свою очередь вызывается из function CD3DApplication.Run.

function CD3DApplication.Run вызывается в модуле проекта - submarine.dpr путём вызова d3dApp.Run

 
Обработка сообщений системы (а не событий в классе TForm!!!) производится в методе function CSubmarineD3DApp.MsgProc. Почему? Вспомните - наше приложение WinAPI, т.е. без использования VCL. Именно поэтому!
 

Интерес представляет также содержимое метода d3dApp.Run, заглянув в который Вы увидите

...

// Render a frame during idle time (no messages are waiting)
if (m_bActive and m_bReady) then
begin
if FAILED(Render3DEnvironment) then
SendMessage(m_hWnd, WM_CLOSE, 0, 0);
end;

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

 
Это был краткий обзор примера.
 
[статьи] [как создать игру ну, погоди!] [к содержанию]
 
 
 
 
 
     
     
     
     
     
подробнее

     
 

Здравствуйте уважаемые любители музыки и звука, т.е. меломаны! С появлением компьютеров и мощного программного обеспечения Вы можете без преувеличения создать домашнюю профессиональную студию звукозаписи! Было бы желание и необходимые знания. Если первое у Вас уже есть, то второе, т.е. знания по созданию музыки и звука средствами современных программ на ПК, можно почерпнуть из многих источников, в том числе и на сайте Мега Информатик.

 
     
 
Вся информация представлена в виде уроков. В данной серии уроков описывается работа в программах Sound Forge 7.0 и ModPlug Tracker 1.16 для создания собственных сэмплов и музыки.
   
Урок 1: Синтез звука средствами Sound Forge 7.0 Описываются методы 4-х операторного FM-синтеза сэмплов.
   
Урок 2: Синтез звука (часть 2) Описывается настройка огибающих операторов и другие параметры FM-синтеза сэмплов
   
Урок 3: Введение в трэкерскую музыку. Описываются азы трэкерской музыки, здесь же можно скачать дистрибутив программы ModPlug Tracker 1.16.
   
Урок 4: Введение в Mod Plug Tracker 1.16 Пока мы изучали Impulse Tracker и адаптировали его под WinXP жизнь не стояла на месте. Появился новый удобный трэкер под Windows, сочетающий лучшие черты Impulse, Scream, Fast и Pro Trackers. К тому же, распространяемый бесплатно! Скачать его можно здесь. А познакомиться с созданием музыки в нем можно читая статьи нашего сайта.
   
Урок 5: Первая композиция в Mod Plug Tracker Описывается создание композиции в ModPlug Tracker 1.16
   
Урок 6: Ввод нот Описываются принципы создания композиций в Impulse Tracker 2.14
   
Урок 7: Первая мелодия Более детально раскрываются принципы работы с Impulse Tracker 2.14
   
Урок 8: Настройка параметров сэмплов Показана настройка параметров сэмплов, даются принципы написания профессиональных трэков с живыми примерами.
   
Примеры трэков от автора Представлены оригинальные авторские композиции, написанные в Impulse Tracker 2.14 в 1999-2001 гг. Они может понравятся Вам, а может и нет, но в любом случае - они могут послужить Вам хорошим примером создания композиций. Кроме того, в них Вы найдете сэмплы, которых хватит Вам для создания своих композиций на первых порах в процессе изучения Impulse Tracker!
 
     
 

[Еще уроки >>]

 
     
     
  Выгрузка файла на сайт со страницы сайта  
     
 

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

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

 
     
  Для начала нужно разместить на некоторой странице сайта форму для выгрузки файла.  
 

Укажите файл который нужно выгрузить

 
  Сам код формы выглядит следующим образом -

 
     
  Форма обязательно должна содержать атрибут enctype="multipart/form-data" и метод отправки данных для формы должен быть описан как method="post" Атрибут enctype="multipart/form-data" указывает MIME-тип отправляемых формой данных (Multipurpose Internet Mail Extensions), а метод отправки post единственно возможный для передачи файлов, т. к. методом get можно отправлять лишь небольшие объёмы информации, а передать файл невозможно в принципе.

Далее мы просто указываем какой скрипт action="papers/sitecre/upload_file/upload_file.php" должен выполняться для обработки отправляемых формой данных, а также указываем имя и ID для формы.

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

Заметим, что размер выгружаемого файла ограничивается не данным значением, а настройками заданными для php на стороне сервера. Следовательно скрипт, который выполняет обработку данного файла должен проверять его размеры и целостность.

Следующим пунктом указывается поле input с такими атрибутами - type="file" name="upload_file" accept="text/plain" Т. е. в данное поле будет загружен файл, обратиться к данным файла можно будет по указанному имени name, а атрибут accept указывает тип загружаемого файла - обычный текстовый. Правда данный атрибут поддерживается только некоторыми браузерами, поэтому его указание не обязательно.

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

 
     
  Теперь перейдём к пояснениям

function read( $cfile, $razd = "|" )
{
	$open = fopen( $cfile, "a+" );
	while (( $dan = fgetcsv( $open, 2048, $razd )) !== false )
	{
		$rec[] = $dan;
	}
	return $rec;
}
так мы запишем небольшую функцию, которая в данном случае будет открывать указанный ей файл с именем $cfile и обрабатывать его как CSV - т. е. текстовый формат представления табличных данных. В качестве разделителя используется указанный символ |. Данная функция полностью преобразует указанный CSV файл в массив.

$loc_ru = setlocale(LC_ALL, 'ru_RU@russia', 'ru_RU', 'rus_rus');

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

$csv_file_size = $_FILES['upload_file']['size'];

Этой строкой мы получаем из глобальной переменной $_FILES размер выгруженного файла

if ( $csv_file_size == 0 )

Далее следует проверка - если размер файла нулевой - снова выводим форму для выгрузки файла

Если размер больше нуля выполняем дальнейшую проверку

if ( $_FILES['upload_file']['error'] == UPLOAD_ERR_OK )

Успешно ли прошла выгрузка файла

Если успешно -

$our_file_extention_correct = FALSE;

$upload_file = $_FILES['upload_file']['name'];

echo 'Вы загрузили файл '.$upload_file;

echo 'Тип файла '.$_FILES['upload_file']['type'];

$csv_uploaded_serverside_filename = $_FILES['upload_file']['tmp_name'];

Сбрасываем флаг проверки расширения в false, запоминаем и выводим в браузер имя загруженного файла и его тип. Также запоминаем временное имя выгруженного файла на сервере.

 
  $dot_pos = strrpos($upload_file, ".");

Ищем точку в имени файла начиная с конца строки.

if ( $dot_pos !== FALSE )

Если точка найдена -

$file_extention = substr($csv_import_emails_file, -3);

Выбираем последние три символа из имени файла

if ( $file_extention == "csv" || $file_extention == "CSV" )

$csv_file_extention_correct = TRUE;


И сравниваем с нужным нам расширением

if ( !$csv_file_extention_correct )

{

echo 'Неверный тип файла, попробуйте еще раз !Назад';

}

Если расширение неверное - выводим сообщение об этом

Оставшийся код выполняет окончательную обработку информации в файле - в данном примере выводит описания из выгруженного файла на страницу

 
     
     
     
     
     
megainformatic live chat
Начать беседу
X
 

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



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


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