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


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

megainformatic - Веселый Буквоежка - онлайн комикс - страница 16
Веселый Буквоежка - онлайн комикс - страница 16 представляем Веселый Буквоежка - онлайн комикс. Да вот и они, собственной персоной.
подробнее...

Теги создание сайтов, создание игр, дизайн, игры, информатика, уроки photshop, php, c++, музыка, delphi, cms, робосайт
Статьи сайта
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 - Популяризация Современных Научных Знаний и Размышления на околонаучные темы. СОДЕРЖАНИЕ

megainformatic - Популяризация Современных Научных Знаний и Размышления на околонаучные темы. Энергетический кокон

megainformatic - Модуль галерей для любой cms

megainformatic - Портфолио выполненных проектов сайтов и приложений

megainformatic - Мои Музыкальные Миры - страница 2

megainformatic - megainformatic cms rs

megainformatic - модуль Падающий снег

megainformatic - проект Open Shop

megainformatic - Рисуем красивую девушку всего за 6 шагов

megainformatic - Галерея красивых рисованных девушек

megainformatic - НОВОГОДНЕЕ ОБРАЩЕНИЕ СОЗДАТЕЛЯ webinformatic К ЖИТЕЛЯМ ПЛАНЕТЫ интернет

megainformatic - Отзывы оставленные пользователями как впечатление о проделанной работе или что-либо понравившееся на сайте

подробнее

cj megainformatic - Я пишу музыку для души и для продажи

Зачем я пишу музыку ? Когда я это делаю я преследую 2 цели:

1) Выразить свои чувства, передать настроение или изменить его в лучшую сторону. Т. е. я пишу чтобы душевно успокоиться и обновиться.

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

Что лучше писать свою музыку или слушать чужую ?

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

Я веду речь про крупные сайты музыкальных стоков (audio stock) где можно найти музыку самого разного качества и направленности.

Когда музыки очень много, возникает вопрос: а зачем писать еще ? Ведь итак уже её целое море, океан, лавина.

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

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

Поэтому оба этих варианта - создание и прослушивание - это два взаимодополняющих друг друга элемента.

И если Вы хотите чего-то достичь, то как минимум нужно пытаться, а опускать руки - не стоит.

Самое интересное тут вот что - всё о чём мы говорим на самом деле уже может не быть таким актуальным, а вот когда приходит момент когда мы делаем очередной шаг, а не просто думаем или говорим про это, вот тогда уже наступает настоящий МОМЕНТ ИСТИНЫ - например, с течением времени может оказаться, что мелкие сайты, где мало музыки, но она приемлемого качества и является авторской, станут более актуальными нежели сайты крупных аудио стоков.

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

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

Однако не растрачивайте силы впустую. Не пишите музыку, которая вам самому не нравится. Не публикуйте её там, где нет или не ожидается никакого отклика - ни денежного ни духовного.

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

Кстати напоследок ссылка на мои свежие треки - Лето-осень 2014 cj megainformatic - native reactions - Естественные реакции

Спасибо вам, читающим данную статью и слушающим музыку.

подробнее

     
  Набор разработчика игр - Нечто: Необъяснимое - в плену желаний  
     
 

Как создать игру ? - Программируем сами.

Рассмотрение программирования игр под DirectX 9c на C++ с использованием среды разработки MSVS 2005 или выше.

 
     
  [содержание] [назад] [страница 1] [далее]  
     
  Vertices - Вершины - страница 1  
     
 

Итогом вставки новой созданной иконки должно стать для Вас сохранение изменений в проект (кнопка Save All на панели инструментов MSVS) и выполнением сборки проекта - по клавише [F7]. Еще раз напомню, что для сборки отладочной версии Debug нужно выбрать соответствующую конфигурацию проекта - в панели инструментов есть соответствующий выпадающий список.

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

 
     
 

Если Вы уже вдоволь наигрались с проектом CreateDevice - сохраняем все внесенные изменения и закрываем проект File > Close Solution.

Переходим к примерам Vertices, Matrices, Lights, Textures, Meshes

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

В примере Vertices рассматривается как работать с вершинами в 3d-пространстве.

Теперь уже наше приложение будет выполнять более полезную работу - выведет на экран разноцветный треугольник.

 
     
  пример Vertices  
     
  По сравнению с предыдущим примером CreateDevice здесь уже рассматривается как создается и инициализируется вершинный буфер для модели треугольника. Треугольник хоть и плоский, но это уже модель, в примере Matrices показано как создать его вращение вокруг своей оси (по оси Y).  
     
 

Функция wWinMain включает использование новой функции -

// Create the vertex buffer
if( SUCCEEDED( InitVB() ) )
{

//...

}

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

// Enter the message loop
MSG msg;
ZeroMemory( &msg, sizeof( msg ) );
while( msg.message != WM_QUIT )
{
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else
Render();
}

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

 
     
 

Функция InitVB

HRESULT InitVB()
{
// инициализируем вершины создаваемого треугольника

//заметьте, что цвет каждой вершины в формате AARRGGBB задается именно здесь!

//о формате задания цвета и определении конкретного цвета мы говорили в уроке - CreateDevice страница 2
CUSTOMVERTEX vertices[] =
{
{ 150.0f, 50.0f, 0.5f, 1.0f, 0xffff0000, }, // x, y, z, rhw, color
{ 250.0f, 250.0f, 0.5f, 1.0f, 0xff00ff00, },
{ 50.0f, 250.0f, 0.5f, 1.0f, 0xff00ffff, },
};

// Создаем вершинный буфер. Здесь мы выделяем достаточно памяти для вершин
// (из буфера по-умолчанию) для хранения 3 вершин в собственном формате. Мы также
// определяем FVF, так что вершинный буфер знает, какие данные он хранит.

if( FAILED( g_pd3dDevice->CreateVertexBuffer( 3 * sizeof( CUSTOMVERTEX ),
0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )
{
return E_FAIL;
}

// Теперь мы заполняем вершинный буфер. Для этого вызываем Lock() для VB
// для получения доступа к вершинам. Этот механизм необходим, поскольку
// буферы могут располагаться в памяти графического адаптера.

VOID* pVertices;
if( FAILED( g_pVB->Lock( 0, sizeof( vertices ), ( void** )&pVertices, 0 ) ) )
return E_FAIL;
memcpy( pVertices, vertices, sizeof( vertices ) );
g_pVB->Unlock();

return S_OK;
}

 
     
 

Функция Cleanup теперь включает освобождение объекта вершинного буфера.

Функция Render включает новый код для рисования модели треугольника -

// начало сцены
if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
{
// Рисуем треугольник из вершин в буфере. Процесс включает несколько

// шагов. Мы передаем вершины в поток, поэтому первое - это определение
// источника для этого потока, это и есть наш вершинный буфер. Затем
// нам нужно позволить D3D узнать какой вершинный шейдер использовать.

// Полнофункциональные, настраиваемые вершинные шейдеры - это
// отдельная тема для разговора, но в большинстве случаев вершинный шейдер -
// просто FVF (Flexible Vertex Format), так что D3D узнает какой тип вершин
// мы применили. Наконец, Мы вызываем функцию DrawPrimitive() которая

// выполняет фактическое рисование
// нашей геометрии (в данном примере - всего лишь 1 треугольник).

g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof( CUSTOMVERTEX ) );
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 );

// конец сцены
g_pd3dDevice->EndScene();
}

 
     
  Функция MsgProc не включает обработки сообщения WM_PAINT, потому что все d3d-приложения должны выполнять отрисовку находясь в состоянии Idle.  
     
 

Обратите внимание также на начало модуля Vertices.cpp

//-----------------------------------------------------------------------------
// Глобальные переменные
//-----------------------------------------------------------------------------

LPDIRECT3D9 g_pD3D = NULL; // используется для создания D3DDevice
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; // наше устройство отрисовки
LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL; // буфер для хранения вершин

// структура определяющая собственный тип вершин
struct CUSTOMVERTEX
{
FLOAT x, y, z, rhw; // преобразованная позиция вершины
DWORD color; // цвет вершины
};

// наш настраиваемый тип вершин FVF, который определяет какой тип вершин

// используется для их описания
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)

 
     
  Чтобы проверить насколько Вам ясно как работать с вершинами - попробуйте вывести вместо треугольника - квадрат. Цвета вершин также измените.  
     
  изображение модели квадрата  
     
 

Сначала посмотрите на приведенный рисунок и определите как были описаны координаты для треугольника:

150.0f, 50.0f - это вершина, отмеченная на рисунке цифрой 1,

250.0f, 250.0f - вершина номер 2 и

50.0f, 250.0f - вершина номер 3. Заметьте, что вершины определены в порядке обхода по-часовой стрелке. Это правило для определения видимых граней модели. Если вершины оказываются повернуты к экрану той гранью, где они следуют против часовой стрелки, то такая грань считается невидимой для зрителя стороной и не отрисовывается !

 
     
 

Теперь можно легко определить вершины для нашего квадрата -

CUSTOMVERTEX vertices[] =
{
{ 50.0f, 50.0f, 0.5f, 1.0f, 0xffff0000, },

{ 250.0f, 50.0f, 0.5f, 1.0f, 0xff00ff00, },

{ 250.0f, 250.0f, 0.5f, 1.0f, 0xff00ffff, },

{ 50.0f, 250.0f, 0.5f, 1.0f, 0xff00ffff, },
};

 
     
 

Однако даже правильно изменив количество вершин с 3 на 4 и правильно указав это число в строке кода

if( FAILED( g_pd3dDevice->CreateVertexBuffer( 4 * sizeof( CUSTOMVERTEX ),
0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )

И указав количество отрисовываемых примитивов в функции Render в строке -

g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 2 );

в количестве 2 вместо 1

 
     
  Результатом будет -  
     
  попытка рисования квадрата 1  
     
  А всё дело в том, что D3D-приспособлен понимать только треугольные грани - состоящие из треугольников. Это сделано из-за того, что три вершины образующие треугольную грань всегда находятся в одной плоскости и следовательно так проще обсчитывать прорисовку сложных моделей.  
     
  Значит нам, для создания модели квадрата, состоящего из 2х треугольных граней нужно использовать не 4, а 6 вершин -  
     
 

CUSTOMVERTEX vertices[] =
{
{ 50.0f, 50.0f, 0.5f, 1.0f, 0xffff0000, },

{ 250.0f, 50.0f, 0.5f, 1.0f, 0xff00ff00, },

{ 250.0f, 250.0f, 0.5f, 1.0f, 0xff0000ff, },

{ 250.0f, 250.0f, 0.5f, 1.0f, 0xff00ffff, },

{ 50.0f, 250.0f, 0.5f, 1.0f, 0xffffff00, },

{ 50.0f, 50.0f, 0.5f, 1.0f, 0xff0000ff, },


};

 
     
  попытка рисования квадрата 2  
     
  Важен и порядок, в котором определена вторая тройка вершин. Если они будут определены в другом порядке, то вторая грань (второй треугольник) выведен не будет. Попробуйте изменить порядок второй тройки вершин и убедитесь в этом сами.  
     
  На рисунке также отчетливо видно какая из вершин в какой цвет окрашена, так что будет более понятно где и какая вершина. На первых порах задайте для каждой из вершин свой цвет - тогда легче будет увидеть где нужная вершина.  
     
     
     
     
     
  [содержание] [назад] [страница 3] [далее]  
     
подробнее

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

В предыдущей статье - Пишем слайдер на javascript с нуля

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

Сейчас мы рассмотрим логику работы класса timedSlideShow

Как я уже упоминал в статье - Пишем слайдер на javascript с нуля

Логика описана в файле - timed.slideshow.js

Прокомментирую код, который Вы можете там увидеть.

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

// объявляем класс
var timedSlideShow = Class.create();

// описываем реализацию класса
timedSlideShow.prototype = {
// описываем реализацию функции initialize - инициализации
initialize: function(element, data) {

// текущая итерация
this.currentIter = 0;
// последняя итерация - будет нам служить для того, чтобы скрыть уже показанную картинку
this.lastIter = 0;
// максимально допустимая итерация - это индекс последней доступной картинки в массиве картинок нашего слайд-шоу
this.maxIter = 0;
// id контейнера всех html-элементов слайд-шоу - в нашем примере описаны в блоке div с id = mySlideshow
this.slideShowElement = element;
// массив данных, содержащих описания элементов слайд-шоу - в нашем примере этот массив находится в переменной mySlideData
this.slideShowData = data;
/* по-порядку: флаг показывающий, что инициализация уже сделана; контейнер для хранения массива элементов;
временная задержка в миллисекундах, определяющая скорость смены изображений в слайдере;
ссылка на статью; область показа информации об отображаемом изображении (подпись, описание)

*/
this.slideShowInit = 1;
this.slideElements = Array();
this.slideShowDelay = 4000;
this.articleLink = "";
this.slideInfoZone = "";

/* по-порядку: устанавливаем стиль отображения для блока слайд-шоу - блочный;
создаем элемент ссылка - вида <a href=""></a> для свойства ссылка ;
даем имя класса свойству ссылка - global
присоединяем этот элемент, как дочерний к объекту element
значение ссылки href пока выставляем в пустое значение - ""
*/
element.style.display="block";

this.articleLink = document.createElement('a');
this.articleLink.className = 'global';
element.appendChild(this.articleLink);
this.articleLink.href = "";
/* по-порядку: определяем длину блока данных;
выполняем цикл, перебирая все элементы начиная от i = 0 до последнего;
создаем div для переменной currentImg;
даем свойству className значение slideElement;
выставляем атрибуты отображения: позицию absolute, left и top отступы в 0, внешние отступы margin 0;
бордюр 0, фоновая картинка из массива data для данного элемента i из вложенного массива с индексом 0;
положение фоновой картинки - по горизонтали и вертикали - центр;
*/
this.maxIter = data.length;
for (i=0 ; i < data.length ; i++ )
{
var currentImg = document.createElement('div');
currentImg.className = "slideElement";
currentImg.style.position="absolute";
currentImg.style.left="0px";
currentImg.style.top="0px";
currentImg.style.margin="0px";
currentImg.style.border="0px";
currentImg.style.backgroundImage="url('" + data[i][0] + "')";
currentImg.style.backgroundPosition="center center";

/* по-порядку: вставляем созданный блок для currentImg в блок articleLink;
выставляем полупрозрачность, используя класс fx.Opacity из библиотеки mootools;
полупрозрачность в 0;
и вставляем блок изображения в массив slideElements с индексом i;
*/
this.articleLink.appendChild(currentImg);
currentImg.currentOpacity = new fx.Opacity(currentImg, {duration: 400});
currentImg.setStyle('opacity',0);
this.slideElements[parseInt(i)] = currentImg;
}

/* по-порядку: создаем блок div для загружаемого элемента loadingElement;
даем классу стиля соответствующее имя;
добавляем созданный элемент как дочерний в объект articleLink;
для slideInfoZone - информационной области слайдера поступаем аналогично;
и еще выставляем полупрозрачность opacity в 0;

вызываем метод doSlideShow;
*/
this.loadingElement = document.createElement('div');
this.loadingElement.className = 'loadingElement';
this.articleLink.appendChild(this.loadingElement);

this.slideInfoZone = document.createElement('div');
this.slideInfoZone.className = 'slideInfoZone';
this.articleLink.appendChild(this.slideInfoZone);
this.slideInfoZone.style.opacity = 0;

this.doSlideShow();
},
/* по-порядку: метод вызываемый при уничтожении объекта класса слайд-шоу;
создаем переменную со значение имени класса-стиля (класс, который описывается в стилях css) для element;
создаем в переменной newElement блок div ;
даем ему полученное имя класса-стиля;
в родительском элементе заменяем старый элемент новым;
*/
destroySlideShow: function(element) {
var myClassName = element.className;
var newElement = document.createElement('div');
newElement.className = myClassName;
element.parentNode.replaceChild(newElement, element);
},
/* по-порядку: метод запуска слайд-шоу - ;
скрываем показ загружаемого элемента;
последний элемент получает значение максимального за вычетом единицы;
текущий - 0;
инициализация - не выполнена;
непрозрачность текущего элемента - 1;
создаем обработчик для вызова метода showInfoSlideShow при событии по таймеру и выставляем интервал в 1000 миллисекунд;
аналогичный обработчик для метода hideInfoSlideShow, но с другим интервалом - this.slideShowDelay-1000;
и для метода nextSlideShow - аналогично с указанным интервалом для this.slideShowDelay ;
*/
startSlideShow: function() {
this.loadingElement.style.display = "none";
this.lastIter = this.maxIter - 1;
this.currentIter = 0;
this.slideShowInit = 0;
this.slideElements[parseInt(this.currentIter)].setStyle('opacity', 1);
setTimeout(this.showInfoSlideShow.bind(this),1000);
setTimeout(this.hideInfoSlideShow.bind(this),this.slideShowDelay-1000);
setTimeout(this.nextSlideShow.bind(this),this.slideShowDelay);
},
/* по-порядку: метод показа следующего изображения слайд-шоу ;
последняя итерация получает значение текущей ;
текущая увеличивается на 1 ;
если текущая больше или равна максимальной, то ;
текущая в 0 ;
последняя - в максимальную за минусом 1 ;
флаг инициализации в 0 ;
привязка вызова метода doSlideShow к обработчику this
*/
nextSlideShow: function() {
this.lastIter = this.currentIter;
this.currentIter++;
if (this.currentIter >= this.maxIter)
{
this.currentIter = 0;
this.lastIter = this.maxIter - 1;
}
this.slideShowInit = 0;
this.doSlideShow.bind(this)();
},
/* по-порядку: метод выполнения слайд-шоу;
инициализировано ли слайд-шоу ?;
да - создаем объект Image ;
если изображение уже однажды предзагружено - запускаем слайд-шоу;
источник для предзагруженного изображения берем из slideShowData[0][0];

нет - если текущая итерация != 0, то выставляем событие для изменения непрозрачности onComplete на созданную функцию, внутри которой непрозрачность выставляется в 0 для предыдущего элемента;
для текущего элемента непрозрачность выставляем в диапазон изменения от 0 до 1;
если текущая итерация == 0, то непрозрачность текущего в 1, ;
непрозрачность предыдущего должна меняться от 1 до 0;
выставляем вызовы методов showInfoSlideShow, hideInfoSlideShow, nextSlideShow по событиям от таймера при заданных интервалах;
*/
doSlideShow: function() {
if (this.slideShowInit == 1)
{
imgPreloader = new Image();
imgPreloader.onload=function(){
setTimeout(this.startSlideShow.bind(this),10);
}.bind(this);
imgPreloader.src = this.slideShowData[0][0];
} else {
if (this.currentIter != 0) {
this.slideElements[parseInt(this.currentIter)].currentOpacity.options.onComplete = function() {
this.slideElements[parseInt(this.lastIter)].setStyle('opacity',0);
}.bind(this);
this.slideElements[parseInt(this.currentIter)].currentOpacity.custom(0, 1);
} else {
this.slideElements[parseInt(this.currentIter)].setStyle('opacity',1);
this.slideElements[parseInt(this.lastIter)].currentOpacity.custom(1, 0);
}
setTimeout(this.showInfoSlideShow.bind(this),1000);
setTimeout(this.hideInfoSlideShow.bind(this),this.slideShowDelay-1000);
setTimeout(this.nextSlideShow.bind(this),this.slideShowDelay);
}
},
/* по-порядку: метод показа инфо-области для слайд-шоу;
удаляем дочерний элемент;
создаем див;
создаем стиль для инфо-области на основе класса fx.Styles mootools;
непрозрачность в 0;
создаем блок h2;
вставляем в него подпись для текущего изображения слайдера в инфо-области;
и делаем полученный объект дочерним для инфо-области;
для описания создаем блок p;
и аналогично добавляем туда текст описания;
для объекта ссылки articleLink.href указываем корректную ссылку;
для инфо-области задаем имя класса стиля;
определяем нормальную высоту блока slideInfoZone;
задаем изменение непрозрачности и высоты в заданных пределах: непрозрачность от 0 до 0.7, высота от 0 до нормальной;
*/
showInfoSlideShow: function() {
this.articleLink.removeChild(this.slideInfoZone);
this.slideInfoZone = document.createElement('div');
this.slideInfoZone.styles = new fx.Styles(this.slideInfoZone);
this.slideInfoZone.setStyle('opacity',0);
var slideInfoZoneTitle = document.createElement('h2');
slideInfoZoneTitle.innerHTML = this.slideShowData[this.currentIter][2]
this.slideInfoZone.appendChild(slideInfoZoneTitle);
var slideInfoZoneDescription = document.createElement('p');
slideInfoZoneDescription.innerHTML = this.slideShowData[this.currentIter][3];
this.slideInfoZone.appendChild(slideInfoZoneDescription);
this.articleLink.appendChild(this.slideInfoZone);
this.articleLink.href = this.slideShowData[this.currentIter][1];
this.slideInfoZone.className = 'slideInfoZone';
this.slideInfoZone.normalHeight = this.slideInfoZone.getStyle('height', true).toInt();
this.slideInfoZone.styles.custom({'opacity': [0, 0.7], 'height': [0, this.slideInfoZone.normalHeight]});
},
/* метод скрытия инфо-области - просто выставляем пределы изменения непрозрачности от 0.7 до 0;
*/
hideInfoSlideShow: function() {
this.slideInfoZone.styles.custom({'opacity': [0.7, 0]});
}
};

/* функция инициализации слайд-шоу - создаем экземпляр класса timedSlideShow в переменной slideshow;
*/
function initTimedSlideShow(element, data) {
var slideshow = new timedSlideShow(element, data);
}
/* функция добавления обработчика нового события в обработчик события при загрузке страницы onLoad (window.onload);
старый обработчик запоминаем в переменной;
если тип обработчика не функция выставляем его на новую функцию func, ;
если же функция - создаем новую - включающую вызов старой и новой функций обработчика;
*/
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
oldonload();
func();
}
}
}
Уф, Мы с Вами проделали большую работу: я по комментированию кода слайдера, а Вы по чтению данной статьи :)))

Я надеюсь описанная информация была Вам полезной.

Чтобы не быть голословным, хочу сказать, что Вы можете приобрести готовый модуль для слайдера, который включает весь описанный функционал,
плюс функционал на php для загрузки списка изображений для слайдера из текстового файла-списка, а также небольшую cms, которая покажет
Вам пример работающего сайта с уже подключенным слайдером -
Модуль слайдера + megainformatic cms express files

Спасибо за внимание !!!

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

подробнее

     
  Уроки Photoshop  
     
 

Как создать игру ? - Программируем сами.

Рассмотрение программирования игр под DirectX 9c на C++ с использованием среды разработки MSVS 2005 или выше.

 
     
  [содержание] [назад] [страница 2] [далее]  
     
  Изучаем и модифицируем пример CreateDevice - страница 2  
     
 

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

Программа CreateDevice достаточно проста. Основая цель: создание окна приложения и подключение к функциям DirectX.

Вариантов тут немного: изменить внешний вид приложения или изменить способ подключения к функциям DirectX.

 
     
 

Во внешнем виде приложения CreateDevice можно изменить следующее:

- размеры и заголовок окна, набор кнопок в окне заголовка;

- создать иконку приложения;

- изменить цвет рабочей области;

Способов подключения к функциям DirectX на самом деле всего 2, да больше просто и не нужно.

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

 
     
 

Решим поставленную задачу.

Размеры и текст заголовка окна представляют из себя параметры функции CreateWindow, которая находится в коде функции wWinMain

 
     
  // Create the application's window
HWND hWnd = CreateWindow( L"D3D Tutorial", L"D3D Tutorial 01: CreateDevice",
WS_OVERLAPPEDWINDOW, 100, 100, 300, 300,
NULL, NULL, wc.hInstance, NULL );
 
     
  Другими словами окно имеет имя: D3D Tutorial, текст в заголовке окна "D3D Tutorial 01: CreateDevice", координаты x, y и размеры width, height окна  
     
 

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

Как видите всё очень просто.

 
     
 

Набор кнопок в заголовке окна -

Набор кнопок в заголовке окна

 
     
  Эти кнопки находятся в правой части окна - слева-направо - кнопка сворачивания, кнопка максимизации во весь экран, кнопка закрытия.  
     
 

Большинство игровых приложений требует для своей работы размеров окна, соответствующих одному из стандартных разрешений экрана, например 800х600,

изменение размера, кроме изменения разрешения экрана, не допустимо, поэтому если Ваша игра будет работать в оконном режиме, а это обязательно требуется на стадии отладки, требуется запретить кнопку максимизации, а также запретить изменение размеров окна.

 
     
 

Эта цель достигается следующей строкой кода, которую нужно записать сразу после строки вызова функции CreateWindow -

// я закомментировал строку со старыми параметрами размеров окна

//и задал новые
HWND hWnd = CreateWindow( L"D3D Tutorial", L"D3D Tutorial 01: CreateDevice",
//WS_OVERLAPPEDWINDOW, 100, 100, 300, 300,
WS_OVERLAPPEDWINDOW, 0, 0, 800, 600,
NULL, NULL, wc.hInstance, NULL );

// сделал окно неизменяемых размеров, содержащее системное меню, кнопку закрытия и //минимизации

SetWindowLong( hWnd, GWL_STYLE,
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX);

 
     
 

Изменить цвет рабочей области также не составляет труда -

Находим функцию Render и изменяем строку кода

// Clear the backbuffer to a blue color
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB( 0, 0, 255 ), 1.0f, 0 );

на следующую

g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, 0xFF00FF00, 1.0f, 0 );

 
     
 

В этом случае окно будет заполняться зеленым цветом. Вообще код цвета определяется так

0xAARRGGBB,

где АА - значение от 0 до FF соответствующее цвету альфа-канала - непрозрачности - 0 - соответствует полной прозрачности, FF (255) - полной непрозрачности.

RR, GG, BB - соответственно определяют цветовые каналы Blue, Green и Red - т. е. интенсивность от 0 до FF синего, зеленого и красного составляющих цвета.

Задать любой нужный Вам цвет можно следующим образом -

Запустить Photoshop, вызвать диалог выбора цвета, щелкнув в панели инструментов цвет переднего либо заднего плана, выбрать желаемый цвет и посмотреть полученный код цвета -

 
     
  выбор цвета  
     
 

К значению #c7c048 Вам нужно добавить лишь желаемую полупрозрачность цвета, подставив значение от 00 до FF

в результате получим цвет 0xFFC7C048

 
     
  в результате получим цвет 0xFFC7C048  
     
  Нам осталось научиться создавать иконку для приложения, и включить её в приложение CreateDevice  
     
  Для создания иконки Вам потребуется Photoshop.  
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  [содержание] [назад] [страница 2] [далее]  
     

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


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

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

Другой вариант - написать на php специальный скрипт (модуль), который будет получать на вход файл контента анализируемой статьи, а на выходе будет выдавать статистику слов в этой статье.

Наиболее простой вариант работы с таким модулем - локальный

Т. е. Вы устанавливаете на свой компьютер локальный сервер (типа набора DENVER), а затем выполняете скрипт из браузера локально, обращаясь к локальному серверу localhost.

В этом случае на вход скрипта достаточно подать название файла анализируемой статьи в виде параметра ?pf=paper_file.txt

Чтобы продемонстировать работу такого скрипта (я назвал его keywords generator или кратко kg) перейдите по следующей ссылке - kg

Вы увидите результат обработки данной статьи, которую Вы в данный момент читаете :)))))

Вторым параметром - &v=10 Вы можете задать отображение только таких слов, количество которых в статье превышает заданное значение, т. е. в данном случае - 10

Например так - kg

Попробуйте вручную менять значение параметра &v=10 в адресной строке Вашего браузера и нажимая ENTER и увидите сами :)))))

В следующих статьях Мы с вами рассмотрим:

как написать скрипт подсчёта ключевых слов - скрипт подсчёта ключевых слов
и Вы воочию увидите модуль для сайта, который позволяет пользователю выгрузить файл контента статьи на сайт и получить по нему статистику встречаемости ключевых слов - своего рода онлайн-сервис ключевых слов :))))

Удачи ВАМ !!!

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

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



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


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