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


Balls and holes PC game / Balls and Holes PC игра
Вакансии
Игродельня
Сегодня
18 февраля 2019 5:19
Теги создание сайтов, создание игр, дизайн, игры, информатика, уроки photshop, php, c++, музыка, delphi, cms, робосайт
Статьи сайта
megainformatic - Как создать игру ? - Программируем сами - Изучаем и модифицируем пример CreateDevice

megainformatic - Как создать игру ? - Программируем сами - пример CreateDevice страница 2

megainformatic - Как создать игру ? - Программируем сами - пример CreateDevice страница 3

megainformatic - Как создать игру - Vertices - Вершины - страница 1

megainformatic - Как создать игру - пример Matrices

megainformatic - Уроки Photoshop - Чудеса

megainformatic - Уроки Photoshop - Чудеса - Коллаж от нуля

megainformatic - Уроки Photoshop - Чудеса - Коллаж от нуля - страница 2

megainformatic - Уроки Photoshop - Чудеса - Коллаж от нуля - страница 3

megainformatic - Уроки Photoshop - Чудеса - Коллаж от нуля - страница 4

megainformatic - Купить Уроки Photoshop - Чудеса

megainformatic - Уроки Photoshop

megainformatic - Уроки Photoshop - Рисуем волка из мультфильма

megainformatic - Уроки Photoshop - Рисуем волка из мультфильма стр 2

megainformatic - Уроки Photoshop - Рисуем волка из мультфильма стр 3

megainformatic - Уроки Photoshop - Рисуем волка из мультфильма стр 4

megainformatic - Уроки Photoshop - Анимируем волка из мультфильма

megainformatic - Уроки Photoshop - Анимируем волка из мультфильма стр 2

megainformatic - Уроки Photoshop - Анимируем волка из мультфильма стр 3

megainformatic - Уроки Photoshop - Анимируем волка из мультфильма стр 4

megainformatic - Эмулятор игры Ну, Погоди!

megainformatic - Оплата заказа через Сбербанк

megainformatic - Пример игры с исходным кодом Donuts3D

megainformatic - Как создать игру ВЕСЕЛЫЙ БУКВОЕЖКА - программируем сами

megainformatic - Как создать игру ВЕСЕЛЫЙ БУКВОЕЖКА - создаем игровую оболочку

megainformatic - Открытый Полный Исходный код игры Дорога в Город

megainformatic - Как создать игру - Веселый Единственный Буквоежка - программируем основу будущей игры

megainformatic - Как создать игру - Веселый Единственный Буквоежка - выводим заставку

megainformatic - Как создать игру - Веселый Единственный Буквоежка - игровое меню

megainformatic - Как создать игру - Веселый Единственный Буквоежка - движение и анимация героя

Как Создать игру ВЕБ - Веселый Единственный Буквоежка - Программируем сами

Как Создать игру ВЕБ - Веселый Единственный Буквоежка - Программируем сами

megainformatic - Примеры моих работ

megainformatic - Музыкальные темы

megainformatic - Уроки Photoshop - Чудеса

megainformatic - Купить Уроки Photoshop - Чудеса

megainformatic - Онлайн Обучение, Репетитор

megainformatic - Уроки Photoshop - Рисуем и Анимируем

megainformatic - Уроки Photoshop - Рисуем и Анимируем - Урок 1 - Старт

megainformatic - Уроки Photoshop - Рисуем и Анимируем на AllSoft.ru

megainformatic - DirectX 9c - Изучаем пример MultAnimation

megainformatic - megainformatic cms Система Управления Контентом

megainformatic - Темы для WordPress

megainformatic - Что нужно для создания собственного сайта ?

megainformatic - Макет дизайна Вашего сайта

скачать megainformatic cms

megainformatic - Итоги 2010 года

megainformatic - Что нужно для создания собственного сайта ?

megainformatic - как создать инсталлятор для собственной cms

megainformatic - Новости - страница 2

Нововведения в megainformatic cms

Web Администрирование

Уроки Верстки

Система автоматизированной е-майл рассылки

Система автоматизированной е-майл рассылки

megainformatic - Выгрузка файла на сайт

подробнее

Creating game on fle game engine - Simple game / Создание игры на fle game engine - Simple game

Урок # 16 - simple game 3d



read paper in english

На предыдущих страницах урока 1 simple game мы подробно ознакомились со всеми вопросами, которые могут возникнуть при создании самой минимально необходимой функциональности, которая присутствует в любой игре: использование спрайтов, игровых объектов, создание игровой сцены (уровня, комнаты), управление перемещением, системы координат экранная и векторная, загрузка и перемещение (скроллинг) для сцены (уровня, комнаты), декорирование внешнего вида, проверка столкновений (коллизий), простейший AI (искуственный интеллект) управляющий NPC (игровыми объектами, которыми управляет программа, а не игрок), начисление игрового счёта, и наконец воспроизведение в игре звуков и музыки.

Однако все, что мы рассматривали, относилось в основном к созданию 2d игр. Игра также была 2d. Несомненно, что 2d игры создавать проще, поскольку не нужно знать особенности программирования 3d графики и прочих нюансов, касающихся плотной работы с 3d. Кто-то останавливается на 2d играх и дальше уже не двигается. Если же Вам интересно продолжить свой путь и узнать основы на которых строится создание 3d игр - тогда дальнейшее повествование Вас заинтересует.

Creating game on fle game engine - Simple game 3d / Создание игры на fle game engine - Simple game 3d





Содержание

страница 1 - Спрайты

страница 2 - Объекты

страница 3 - Наложение объектов

страница 4 - Код - Настройка параметров Scene Editor fge и написание кода для вывода спрайта шарика в вашем первом игровом приложении

страница 5 - Отображаем прыгающий шарик

страница 6 - Загрузка игровой сцены

страница 7 - Перемещения игровой сцены

страница 8 - Закрываем часть сцены от пустот при помощи черной текстуры с прорезью, ограничиваем перемещение сцены

страница 9 - Реализуем корректное попадание в ямы и около ям - определяем границы спрайтов ям и спрайта прыгаюшего шарика

страница 10 - Проверка столкновений

страница 11 - Игровой счёт, звуки, музыка

урок #2 страница 1 - Создание новых сцен для игры simple game, расширенная версия simple game extended

13. Скроллинг больших локаций

14. использование переменных в игре на c++ directx 9c

15. Мульти анимация







Чем же так отличается 2d от 3d, что его гораздо сложнее программировать ?

Ответ прост: работа с 3d требует гораздо более качественной математической подготовки, нежели знания по 2d. Аспекты 3d достаточно обширны и могут сбить с толку или попросту отпугнуть большим объемом информации, который надо сразу же знать уже на начальном этапе работы.

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

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

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

Что умеет делать это приложение: можно управлять 3d камерой - перемещаться по осям x, y, z. Вращать камеру в любом направлении. Ну и конечно есть код, который отвечает за создание и перемещение кубиков, вывод плоского пола и наконец туман, который реализуется средствами directx 9c ну совсем просто. В качестве бонуса есть проигрывание mp3 музыкальных треков. :)

Туман время от времени меняет свой цвет. Кубики падают, достигнув определенных пределов исчезают и создаются снова. Ну а Вам, нужно будет узнать следующие аспекты, чтобы понять как работает простое 3d приложение:

a) Инициализация для работы с 3d;

b) трансформации 3d объектов: перемещения, вращения, масштаб;

c) Собственно чем отличается управление камерой от управления любыми другими игровыми объектами (кубиками, полом);



На перспективу:

d) Как создать 3d загружаемую сцену, создаваемую в редакторе 3d сцен (SceneEditor);

e) Простейший игровой процесс похожий на simple game, но уже в 3d.



Итак, приложение наше будет называться game craft, а туман я использовал, потому что хотел имитировать некую подводную сцену. Давным давно я начинал изучение directx именно с того, что создавал подводные сцены для будущего проекта Тайны Морских глубин.

Ответ на вопросы a и c можно получить из цикла статей game craft - Game craft - игровая камера в d3d9 - приложении

Теоретические и практические основы создания 3d игр

Новый сон Зеленого.


Предвкушение.

Когда Зеленый погрузился в сон, он увидел странные вещи.

Сначала себя, но почему-то красного, потом себя же - но уже зеленого.

Еще были какие-то непонятные существа на двух ногах. Они говорили.

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

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

А потом ... из него вылетел самый большой зеленый шар и превратился
в ... Зеленого.

Иногда когда видишь такие вот странные сны, но понимаешь, что
видишь себя как бы со стороны, то ощущаешь что-то необыкновенное.

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

И то что кажется одним, на самом деле может таить в себе
совсем другое.

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

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

Мешать.

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

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

Почему ?

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

Когда ты идешь вперед по заранее заданному плану, ты думаешь:
да, вот будет так. Сейчас одно, затем другое и т. д. и т. п.
Но нет. План есть план, а реальность всегда вносит свои
коррективы.

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

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

И твои мечты постепенно становятся реальностью.
Помогают тебе.

Когда Зеленый был одинок и грустен. Когда у него не было
друзей. Ему было плохо. Но вот все изменилось. Он сам изменился.

На его планете все не так привычно как на Земле. Местные жители
способны пользоваться не только физическими энергиями, но и
нематериальными.

Например силой своей мысли они способны перемещать предметы
и даже перемещаться сами.

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

Также и Зеленый совсем не удивлялся тому как его сородичи
быстро перемещались в пространстве по своим неотложным делам.

Все происходило лишь силой мысли ...

Холодный ветер подул из окна и он шагнул навстречу другой реальности.
Упал в этот новый мир.

Дверь была открыта. Он вошел в неё и пошел вперед не оглядываясь.

Впереди была неизвестность.

[назад] [далее к содержанию]



подробнее

KKK Коллекционное издание: Веселый Буквоежка Комикс + Костя Коробкин Комикс + Нечто: Необъяснимое в плену желаний 2 начало



KKK Коллекционное издание: Веселый Буквоежка Комикс + Костя Коробкин Комикс + Нечто: Необъяснимое в плену желаний 2 начало



KKK Коллекционное издание: Веселый Буквоежка Комикс + Костя Коробкин Комикс + Нечто: Необъяснимое в плену желаний 2 начало



KKK Коллекционное издание: Веселый Буквоежка Комикс + Костя Коробкин Комикс + Нечто: Необъяснимое в плену желаний 2 начало



Выпуск 70 KKK Коллекционное издание: Веселый Буквоежка Комикс + Костя Коробкин Комикс + Нечто: Необъяснимое в плену желаний 2 начало



350 руб.


Включает:

6 комиксов - Веселый Буквоежка, Костя Коробкин Как я провел лето, Костя Коробкин С новым годом, Костя Коробкин Секретный проект, Костя Коробкин в гостях у тёти Светы, Костя Коробкин в гостях у тёти Светы часть 2 Живые машины.

Нечто: Необъяснимое 2 в плену желаний - начало.

220 авторских музыкальных mp3 треков.

Размер дистрибутива: 1,85 Гб

Системные требования: directx 9, Windows XP / Windows 7 / Windows 8 / Windows 10

около 2,04 Гб свободного места на жестком диске.



Полный список композиций:

sunrain_3.mp3
sunrain_3_mix_live_nature_2.mp3
sunrain_5.mp3
techno_1.mp3
terrible_beauty_v5.mp3
terrible_beauty_v7.mp3
think_about_stars.mp3
true.mp3
unbelievable_short.mp3
unbelievable_short_.mp3
undesire.mp3
unknowner_1.mp3
unknowner_2.mp3
unknowner_3.mp3
unknowner_4.mp3
unknowner_5.mp3
unknowner_6_cj_megainformatic.mp3
virtual_travel_3.mp3
virtual_travel_7.mp3
virtual_travel_8.mp3
virtual_travel_12.mp3
virtual_travel_14.mp3
walker_im_fly_3.mp3
when_i_dance.mp3
when_well.mp3
when_well_.mp3
when_well_2.mp3
when_well_5.mp3
when_well_6.mp3
when_well_7.mp3
when_well_8.mp3
when_well_9.mp3
wide_stairs.mp3
wide_stairs_2.mp3
wide_stairs_2_mix_agpl.mp3
win_tune_theme_4.mp3
win_tune_theme_5.mp3
win_tune_theme_6.mp3
winter_night.mp3
world_is_fight_3.mp3
world_is_fight_3_mixdown.mp3
you_mind_3.mp3
you_mind_3_v2.mp3
you_mind_song_v6.mp3
za_oknom_4.mp3
bg.mp3
endless4.mp3
grass2.mp3
open_new3.mp3
sowl_4.mp3
sowl_3.mp3
electro3.mp3
new_year2.mp3
road4.mp3
road5.mp3
road9.mp3
topic.mp3
all_changes_desire_for_beauty4.mp3
all_changes_desire_for_beauty5.mp3
creation7.mp3
hello.mp3
all_good_parallel_lines.mp3
allegory.mp3
allegory_4.mp3
antistress.mp3
as_monito_9.mp3
aspiring.mp3
autumn_bee.mp3
autumn_bee_2.mp3
autumn_bee_3.mp3
autumn_bee_4.mp3
balance.mp3
bird.mp3
bird_2.mp3
bird_3.mp3
bird_4.mp3
blue_far.mp3
blues_epic.mp3
blues_epic_3.mp3
bol.mp3
cake.mp3
cake_2.mp3
cake_3.mp3
cake_4.mp3
cake_5.mp3
call_rain_call_sun_shaman_2.mp3
calm.mp3
carambulina.mp3
casual_reality.mp3
clear_white_winter.mp3
computer_program.mp3
crystal_clarity.mp3
dance_of_divinity_6.mp3
desires_and_actions.mp3
desires_and_actions_2.mp3
dont_ask_about_anything.mp3
dreams_ocean.mp3
effect_optimisma_2.mp3
effect_optimisma_3.mp3
effect_optimisma_4.mp3
evidence.mp3
evidence_2.mp3
face_and_grace.mp3
face_and_grace_2.mp3
face_and_grace_3.mp3
faith.mp3
fast.mp3
fine_and_terry_longway_cont_theme_ver_from.mp3
fine_and_terry_longway_part2.mp3
fine_and_terry_longway_v3.mp3
first_step_3.mp3
first_step_song_probe_1.mp3
five_axel.mp3
fun_1_3.mp3
fun_2.mp3
fun_3.mp3
fun_sun.mp3
fun_sun_2.mp3
girl_in_white_by_cj_megainformatic.mp3
gold_autumn_girl.mp3
gold_autumn_girl_2.mp3
gold_autumn_girl_3.mp3
great_life_2.mp3
great_p3.mp3
great_p3_v2.mp3
great_p4.mp3
great_p5_redance.mp3
great_remake_by_flex.mp3
greatest_hits.mp3
greatest_hits_4.mp3
high_quality.mp3
high_quality_2.mp3
high_quality_3.mp3
high_quality_4.mp3
high_quality_4_lim.mp3
high_quality_5.mp3
in_a_fary_tale.mp3
incredibly_obvious_2.mp3
incredibly_obvious_3.mp3
incredibly_obvious_5.mp3
intro_old_village_chrome.mp3
kanzas_city.mp3
kanzas_city_2.mp3
kanzas_city_3_extended.mp3
knight_errant.mp3
knight_errant_2.mp3
knight_errant_3.mp3
knight_errant_4.mp3
knight_errant_5.mp3
knight_errant_6.mp3
kvadro.mp3
laskovoe_leto.mp3
laskovoe_leto_2.mp3
lifting.mp3
light_wave.mp3
live_nature.mp3
live_nature_2.mp3
lovely_place.mp3
moroznoe_utro_4_9.mp3
moved_2.mp3
nat_double.mp3
nat_double_3.mp3
nat_double_4.mp3
nat_double_5.mp3
nat_double_6.mp3
native_reality.mp3
native_reality_v2_cut.mp3
neo_sphere.mp3
new_page.mp3
now_2.mp3
now_3.mp3
nwnnw.mp3
oh_no_balet!.mp3
oh_no_balet!_5.mp3
old_village_chrome_repattern.mp3
open_new3_1.mp3
other_alternative.mp3
other_alternative_2.mp3
other_alternative_3.mp3
outside_dream.mp3
outside_dream_2.mp3
outside_dream_4.mp3
outside_dream_5.mp3
passionate.mp3
pink_far.mp3
plan_2.mp3
plan_fly_snow.mp3
plumber.mp3
poisonous_grove.mp3
polka_tech_v2.mp3
random_pause.mp3
random_pause_2.mp3
receipte_da.mp3
redundancy.mp3
redundancy_2.mp3
redundancy_3.mp3
remote_love.mp3
run_3.mp3
sad_autumn.mp3
sad_autumn_2.mp3
sea_sun_sand_2_mixdown.mp3
sea_sun_sand_3.mp3
sea_sun_sand_4.mp3
search5.mp3
search7.mp3
simple_alternative.mp3
soneo.mp3
soneo_2.mp3
soneo_3.mp3
sonic_weapon.mp3
spring_day.mp3
spring_sun.mp3
spring_theme_1.mp3
spring_theme_1_2.mp3
spring_theme_1_v2.mp3
standup.mp3
stem.mp3
stem_2.mp3
step_left_step_right_4.mp3
step_left_step_right_5.mp3


подробнее

     
  [Назад] [Все уроки] [Далее]  
     
 

12/06/2008 Воспроизведение файлов в форматах *.it, *.xm, *.s3m, *.mod

продолжение...

 
[назад]
 

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

procedure TfrmMain.FormClose

 
FMUSIC_StopAllSongs(); //останавливаем все играющие звуковые файлы
for Index := 0 to MAX_SONGS - 1 do
begin
if FSongs[Index].Module <> nil then
begin
FMUSIC_FreeSong(FSongs[Index].Module);
//освобождаем ресурсы памяти от трекерских файлов и
end
else if FSongs[Index].Stream <> nil then
begin
FSOUND_Stream_Stop(FSongs[Index].Stream);
//файлов-потоков (таких как wav, mp2, mp3, ogg и подобных)
FSOUND_Stream_Close(FSongs[Index].Stream);
end;
end;
FSpectrum.Free;
//удаляем объект спектрального анализатора

FMOD_Unload; //и выгружаем библиотеку fmod.dll из памяти

 

Мы выяснили что должно происходить во время старта и уничтожения приложения.

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

 

загрузка - procedure TfrmMain.btnLoadClick

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

SongCount := lbxFiles.Items.Count;

if SongCount = MAX_SONGS then
begin
Application.MessageBox(PChar(Format('Limit of %d songs reached', [MAX_SONGS])), 'Load error', MB_OK or MB_ICONHAND);
Exit;
end;

 

Для очередного элемента открытых файлов -

Пробуем открыть файл как трек, а затем как поток

Stream := nil;
Module := FMUSIC_LoadSong(PChar(dlgOpen.Files[Index]));
if Module = nil then
begin
Stream := FSOUND_Stream_Open(PChar(dlgOpen.Files[Index]), FSOUND_NORMAL or FSOUND_LOOP_NORMAL, 0, 0);
end;

Если никак не удалось - снова предупреждение

if (Module = nil) and (Stream = nil) then
begin
Application.MessageBox(FMOD_ErrorString(FSOUND_GetError), 'Load error', MB_OK or MB_ICONHAND);
Continue;
end;

 

Если трек загрузился, то установить громкость для данного трека на максимум, а шаг панорамы на 15%

if Module <> nil then
begin
FMUSIC_SetMasterVolume(Module, 255);
if (FMUSIC_GetType(Module) = FMUSIC_TYPE_MOD) or (FMUSIC_GetType(Module) = FMUSIC_TYPE_S3M) then
FMUSIC_SetPanSeperation(Module, 0.15); // 15% crossover
end;

 

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

FSongs[SongCount].Module := Module;
FSongs[SongCount].Stream := Stream;
FSongs[SongCount].Playing := False;

lbxFiles.Items.Add(ExtractFileName(dlgOpen.Files[Index])); //эта особенность актуальна лишь для примера testbed.dpr
lbxFiles.ItemIndex := SongCount;
//имя файла добавляется в список и текущим в списке становится данный файл

 

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

{...}

lbxFilesClick(nil);

 

выгрузка мелодии из памяти -

procedure TfrmMain.btnDeleteClick

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

Index := lbxFiles.ItemIndex;
if Index < 0 then
Exit;

btnStopClick(nil);

 

а затем удаляем его -

lbxFiles.Items.Delete(Index);
// сдвигаем нижележащие элементы на освободившуюся позицию
if lbxFiles.Items.Count > 0 then
begin
if Index < lbxFiles.Items.Count - 1 then
begin
for Index2 := Index to lbxFiles.Items.Count - 2 do
FSongs[Index2] := FSongs[Index2 + 1];
end;
if Index < lbxFiles.Items.Count then
lbxFiles.ItemIndex := Index
else
lbxFiles.ItemIndex := lbxFiles.Items.Count - 1;
end;
lbxFilesClick(nil); //оcвежаем параметры для нового текущего файла

 

Воспроизведение мелодии -

procedure TfrmMain.btnPlayClick

Выбранная мелодия останавливается, если она уже играла

Index := lbxFiles.ItemIndex;

if Index < 0 then
Exit;

if FSongs[Index].Playing then
btnStopClick(Sender);

Включаем воспроизведение текущей мелодии списка

if FSongs[Index].Module <> nil then
begin
FSongs[Index].Playing := FMUSIC_PlaySong(FSongs[Index].Module);
if not FSongs[Index].Playing then
Application.MessageBox(FMOD_ErrorString(FSOUND_GetError), 'Play song', MB_OK or MB_ICONHAND);
end

 

или потока, если это поток

else if FSongs[Index].Stream <> nil then
begin
FSongs[Index].Channel := FSOUND_Stream_Play(FSOUND_FREE, FSongs[Index].Stream);
FSongs[Index].Playing := FSongs[Index].Channel >= 0;
if not FSongs[Index].Playing then
begin
Application.MessageBox(FMOD_ErrorString(FSOUND_GetError), 'Play stream', MB_OK or MB_ICONHAND);
end

 

если звуковой поток уже играет, то включить воспроизведение стерео, громкость на максимум

else
begin
FSOUND_SetPan(FSongs[Index].Channel, FSOUND_STEREOPAN);
FSOUND_SetVolume(FSongs[Index].Channel, 255);
end;

 

Остановка воспроизведения -

procedure TfrmMain.btnStopClick

Определяем текущую мелодию

Index := lbxFiles.ItemIndex;

if Index < 0 then
Exit;

Если это трекерский модуль - применяем команду остановки для него

if FSongs[Index].Module <> nil then
FMUSIC_StopSong(FSongs[Index].Module)

если это потоковое аудио - применяем другую команду остановки
else if FSongs[Index].Stream <> nil then
FSOUND_Stream_Stop(FSongs[Index].Stream);

Текущий канал потока - неопределен, индикатор проигрывания сброшен
FSongs[Index].Channel := -1;
FSongs[Index].Playing := False;

 

Регулировка громкости текущей мелодии -

Если не установка регулятора глобальной громкости

if not FSettingMasterVolume then
begin

Определяем текущую композицию
Index := lbxFiles.ItemIndex;
if Index > -1 then
begin

для модуля применяем свою команду
if FSongs[Index].Module <> nil then
begin
FMUSIC_SetMasterVolume(FSongs[Index].Module, trkMasterVolume.Position);
lblSongMasterVolume.Caption := Format('%3.3d', [trkMasterVolume.Position]);
//это актуально для элемента управления

//регулятором
end
else if FSongs[Index].Stream <> nil then

для потока - свою
begin
FSOUND_SetVolume(FSongs[Index].Channel, trkMasterVolume.Position);
lblSongMasterVolume.Caption := Format('%3.3d', [trkMasterVolume.Position]);
//это актуально для элемента управления

//регулятором
end;
end;
end;

 

Регулировка текущего воспроизводимого паттерна в трекерском модуле -

переход к предыдущему паттерну порядка воспроизведения -

procedure TfrmMain.btnPrevOrderClick(Sender: TObject);
var
Index: Integer;
Order: DWORD;
begin

считываем текущий модуль
Index := lbxFiles.ItemIndex;
if Index < 0 then
Exit;

если это трекерский модуль - считываем текущий индекс элемента порядка воспроизведения и уменьшаем его на 1
if FSongs[Index].Module = nil then
Exit;
Order := FMUSIC_GetOrder(FSongs[Index].Module);
if Order > 0 then
FMUSIC_SetOrder(FSongs[Index].Module, Order - 1);
end;

 

для переключения на следующий паттерн всё аналогично кроме строк -

т.е. приращаем индекс на +1

if Order < FMUSIC_GetNumOrders(FSongs[Index].Module) then
FMUSIC_SetOrder(FSongs[Index].Module, Order + 1);

 

внутри метода периодической работы таймера представлены ряд интересных команд -

procedure TfrmMain.tmrMainTimer(Sender: TObject);
var
Index: Integer;
begin

для игрового проекта это по большому счету не особо нужная информация, но все-таки полезна
lblCPU.Caption := Format('%.1f%%', [FSOUND_GetCPUUsage]);
//например можно определять загруженность процессора
lblChannels.Caption := Format('%3.3d', [FSOUND_GetChannelsPlaying]);
//музыкой и количество занятых звуковых каналов

//это полезно, т.к. для музыки не существует такого понятия как FPS, зато вышеуказанные параметры могут служить в какой-то мере для целей оценки быстродействия работающего проекта
Index := lbxFiles.ItemIndex;
if Index > -1 then
begin
ShowSpectrum;
ShowDynamicSongInfo(Index);
//данный метод будет полезен с точки зрения наблюдения за текущей позицией воспроизведения
if FMUSIC_IsFinished(FSongs[Index].Module) and chkPlaylist.Checked then
//если мелодия кончилась и установлен индикатор работы в режиме плей-листа - т.е. списка воспроизведения, то переход к следующей мелодии
begin
btnStopClick(nil);
Inc(Index);
if Index >= lbxFiles.Items.Count then
Index := 0;
lbxFiles.ItemIndex := Index;
lbxFilesClick(nil);
btnPlayClick(nil);
end;
end;
{ ... }

end;

 

Конфигурирование - выбор драйвера и параметров фильтрации -

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

С точки зрения наших задач заслуживает внимания метод модуля config.pas -

Считываются параметры установленные в окне формы конфигуратора и применяются к объекту FSOUND.

procedure TfrmConfig.btnOkClick(Sender: TObject);
var
Flags: Cardinal;
begin
FSOUND_SetOutput(OutputTypes[cbxOutputType.ItemIndex]);
FSOUND_SetDriver(cbxOutputDevice.ItemIndex);
FSOUND_SetMixer(TFSoundMixerTypes(cbxMixerType.ItemIndex));
Flags := 0;
if chkSoftwareMIDI.Checked then
Flags := Flags or FSOUND_INIT_USEDEFAULTMIDISYNTH;
if chkGlobalFocus.Checked then
Flags := Flags or FSOUND_INIT_GLOBALFOCUS;
FSOUND_Init(OutputRates[cbxOutputRate.ItemIndex], 128, Flags);
end;

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

Файл fmod.dll размещаем в папке проекта, в настройках проекта указываем ссылку на интерфейсы в delphi-исходниках - fmod375;

В секции interface

uses

добавляем ссылку на fmodtypes

В секции implementation

uses

добавляем ссылки на fmod, fmoderrors

 

Внутри класса приложения объявляем 2 метода -

//music functions
procedure InitMusicLib;
procedure FreeMusicLib;

 

Пишем реализацию данных методов -

procedure TD3DGameApp.InitMusicLib;
var
Index: Integer;
begin
FMOD_Load(nil);

{ Check version numbers }
if FMOD_VERSION > FSOUND_GetVersion then
begin
MessageBox(g_d3dApp.m_hWnd, PChar(Format('API version %3.2f is newer than DLL version %3.2f', [FMOD_VERSION, FSOUND_GetVersion])), 'Version mismatch', MB_OK or MB_ICONERROR);
Halt;
end;

{ Initialize FSOUND }
try
if not FSOUND_SetOutput(FSOUND_OUTPUT_DSOUND) then
raise Exception.Create('FSOUND_SetOutput failed');
if not FSOUND_SetDriver(0) then
raise Exception.Create('FSOUND_SetDriver failed');
if not FSOUND_SetMixer(FSOUND_MIXER_QUALITY_AUTODETECT) then
raise Exception.Create('FSOUND_SetMixer failed');
if not FSOUND_SetHWND(g_d3dApp.m_hWnd) then
raise Exception.Create('FSOUND_SetHWND failed');
except
MessageBox(g_d3dApp.m_hWnd, FMOD_ErrorString(FSOUND_GetError), 'Initialization', MB_OK or MB_ICONHAND);
raise;
end;

if not FSOUND_Init(22050, 128, 0) then
begin
MessageBox(g_d3dApp.m_hWnd, FMOD_ErrorString(FSOUND_GetError), 'FSOUND_Init', MB_OK or MB_ICONHAND);
Halt;
end;

{ Initialize song list to empty }
for Index := 0 to MAX_SONGS - 1 do
begin
FSongs[Index].Module := nil;
FSongs[Index].Stream := nil;
FSongs[Index].Channel := -1;
end;

FTrackNumber := 0;
FNumTracks := 0;

LoadPlaylist(DefaultThemes); //данный метод будет реализован далее (см. ниже)

end;

 

procedure TD3DGameApp.FreeMusicLib;
var
Index: Integer;
begin
FMUSIC_StopAllSongs;
for Index := 0 to MAX_SONGS - 1 do
begin
if FSongs[Index].Module <> nil then
begin
FMUSIC_FreeSong(FSongs[Index].Module);
end
else if FSongs[Index].Stream <> nil then
begin
FSOUND_Stream_Stop(FSongs[Index].Stream);
FSOUND_Stream_Close(FSongs[Index].Stream);
end;
end;

FreePlayList; //данный метод будет реализован далее (см. ниже)

FMOD_Unload;
end;

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

Я организую вызов данных методов внутри TD3DGameApp.CreateSoundObjects и TD3DGameApp.DestroySoundObjects.

Где будете делать это Вы - решать Вам. Можете поступить аналогично. Следует иметь в виду, что метод InitMusicLib должен вызываться только после того, как окно приложения будет создано и обработчик окна - m_hWnd в нашем случае обретет своё действительное значение - в противном случае будут только ошибки... ошибки... и ошибки...

 

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

Загрузка списка мелодий из текстового файла const DefaultThemes = 'Media\Music\muzon_themes.txt'; -

Код уже должен быть Вам знаком по предыдущему повествованию, особо нового ничего нет

procedure TD3DGameApp.LoadPlaylist(PlayList: string);
var
Index: Integer;
Module: PFMusicModule;
Stream: PFSoundStream;
SongCount: Integer;
begin

создаем список строк будущего плей-листа и загружаем
FTMSPlayList := TStringList.Create;
try
FTMSPlayList.LoadFromFile(PlayList);
except
MessageBox(g_d3dApp.m_hWnd, PChar('Playlist '+PlayList+' not found!'),
'Playlist load Error', MB_OK or MB_ICONHAND);
end;

SongCount := FTMSPlayList.Count;

предупредить, если мелодий в списке больше допустимого!

if SongCount = MAX_SONGS then
begin
MessageBox(g_d3dApp.m_hWnd, PChar(Format('Limit of %d songs reached',
[MAX_SONGS])), 'Load error', MB_OK or MB_ICONHAND);
Exit;
end;

загружаем файлы списка в массив FSongs

for Index := 0 to SongCount - 1 do begin
Stream := nil;
Module := FMUSIC_LoadSong(PChar(FTMSPlayList[Index]));
if Module = nil then
begin
Stream := FSOUND_Stream_Open(PChar(FTMSPlayList[Index]),
FSOUND_NORMAL or FSOUND_LOOP_NORMAL, 0, 0);
end;

if (Module = nil) and (Stream = nil) then
begin
MessageBox(g_d3dApp.m_hWnd, FMOD_ErrorString(FSOUND_GetError),
'Load error', MB_OK or MB_ICONHAND);
Continue;
end;

if Module <> nil then
begin
FMUSIC_SetMasterVolume(Module, 255);
if (FMUSIC_GetType(Module) = FMUSIC_TYPE_MOD)
or (FMUSIC_GetType(Module) = FMUSIC_TYPE_S3M) then
FMUSIC_SetPanSeperation(Module, 0.15); // 15% crossover
end;

FSongs[Index].Module := Module;
FSongs[Index].Stream := Stream;
FSongs[Index].Playing := False;
end;
end;

 

Метод FreePlaylist выглядит совсем просто -

procedure TD3DGameApp.FreePlaylist;
begin
FreeAndNil(FTMSPlayList);
end;

 

Воспроизводим и останавливаем нужный трэк или поток по его номеру в массиве FSongs -

procedure TD3DGameApp.PlayItem(Index: Integer);
begin
if (Index < 0) or (Index > FTMSPlayList.Count-1) then
Exit;


if FSongs[Index].Playing then
StopItem(Index);

if FSongs[Index].Module <> nil then
begin
FSongs[Index].Playing := FMUSIC_PlaySong(FSongs[Index].Module);
if not FSongs[Index].Playing then
MessageBox(g_d3dApp.m_hWnd, FMOD_ErrorString(FSOUND_GetError),
'Play song', MB_OK or MB_ICONHAND);
end
else if FSongs[Index].Stream <> nil then
begin
FSongs[Index].Channel := FSOUND_Stream_Play(FSOUND_FREE,
FSongs[Index].Stream);
FSongs[Index].Playing := FSongs[Index].Channel >= 0;
if not FSongs[Index].Playing then
begin
MessageBox(g_d3dApp.m_hWnd, FMOD_ErrorString(FSOUND_GetError),
'Play stream', MB_OK or MB_ICONHAND);
end
else
begin
FSOUND_SetPan(FSongs[Index].Channel, FSOUND_STEREOPAN);
FSOUND_SetVolume(FSongs[Index].Channel, 255);
end;
end;
end;

procedure TD3DGameApp.StopItem(Index: Integer);
begin
if (Index < 0) or (Index > FTMSPlayList.Count-1) then
Exit;

if FSongs[Index].Module <> nil then
FMUSIC_StopSong(FSongs[Index].Module)
else if FSongs[Index].Stream <> nil then
FSOUND_Stream_Stop(FSongs[Index].Stream);
FSongs[Index].Channel := -1;
FSongs[Index].Playing := False;
end;

 

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

Сначала реализуем удаление -

 
procedure TD3DGameApp.DeleteSong(Index: Integer);
var
Index2: Integer;
begin
if (Index < 0) or (Index > FTMSPlayList.Count-1) then
Exit;

StopItem(Index);
FTMSPlayList.Delete(Index);
// Move all following items up one position
if FTMSPlayList.Count > 0 then
begin
if Index < FTMSPlayList.Count - 1 then
begin
for Index2 := Index to FTMSPlayList.Count - 2 do
FSongs[Index2] := FSongs[Index2 + 1];
end;
end;
end;

 

Теперь добавление -

function TD3DGameApp.AddSong(Filename: string): Integer;
var
Module: PFMusicModule;
Stream: PFSoundStream;
SongCount: Integer;
begin
SongCount := FTMSPlayList.Count;

if SongCount = MAX_SONGS then
begin
MessageBox(g_d3dApp.m_hWnd, PChar(Format('Limit of %d songs reached',
[MAX_SONGS])), 'Load error', MB_OK or MB_ICONHAND);
result := -1;
Exit;
end;


Stream := nil;
Module := FMUSIC_LoadSong(PChar(Filename));
if Module = nil then
begin
Stream := FSOUND_Stream_Open(PChar(Filename),
FSOUND_NORMAL or FSOUND_LOOP_NORMAL, 0, 0);
end;

if (Module = nil) and (Stream = nil) then
begin
MessageBox(g_d3dApp.m_hWnd, FMOD_ErrorString(FSOUND_GetError),
'Load error', MB_OK or MB_ICONHAND);
result := -1;
Exit;
end;

if Module <> nil then
begin
FMUSIC_SetMasterVolume(Module, 255);
if (FMUSIC_GetType(Module) = FMUSIC_TYPE_MOD)
or (FMUSIC_GetType(Module) = FMUSIC_TYPE_S3M) then
FMUSIC_SetPanSeperation(Module, 0.15); // 15% crossover
end;

result := FTMSPlayList.Add(Filename);

FSongs[result].Module := Module;
FSongs[result].Stream := Stream;
FSongs[result].Playing := False;

end;

 

Регулируем громкость - значения громкости 0 - тишина, 255 - максимум

procedure TD3DGameApp.Volume(SongIndex: Integer; Value: Byte);
begin
if (SongIndex < 0) or (SongIndex > FTMSPlayList.Count-1) then
Exit;

if FSongs[SongIndex].Module <> nil then
FMUSIC_SetMasterVolume(FSongs[SongIndex].Module, Value)
else if FSongs[SongIndex].Stream <> nil then
FSOUND_SetVolume(FSongs[SongIndex].Channel, Value);

end;

 

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

function TD3DGameApp.Go2NextPattern(SongIndex: Integer): Integer;
begin
result := -1;

if (SongIndex < 0) or (SongIndex > FTMSPlayList.Count-1) then
Exit;

if FSongs[SongIndex].Module = nil then
Exit;
result := FMUSIC_GetOrder(FSongs[SongIndex].Module);
if result < FMUSIC_GetNumOrders(FSongs[SongIndex].Module) then begin
result := result + 1;
FMUSIC_SetOrder(FSongs[SongIndex].Module, result);
end;
end;

function TD3DGameApp.Go2PrevPattern(SongIndex: Integer): Integer;
begin
result := -1;

if (SongIndex < 0) or (SongIndex > FTMSPlayList.Count-1) then
Exit;

if FSongs[SongIndex].Module = nil then
Exit;
result := FMUSIC_GetOrder(FSongs[SongIndex].Module);
if result < FMUSIC_GetNumOrders(FSongs[SongIndex].Module) then begin
result := result - 1;
FMUSIC_SetOrder(FSongs[SongIndex].Module, result);
end;
end;

 

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

var
Index: Integer;
begin
SS_CPUUsage := Format('%.1f%%', [FSOUND_GetCPUUsage]);
SS_Channels := Format('%3.3d', [FSOUND_GetChannelsPlaying]);

if CurrentSongIndex > -1 then
begin
if FMUSIC_IsFinished(FSongs[CurrentSongIndex].Module) and PlaylistMode then
begin
StopItem(CurrentSongIndex);
Index := CurrentSongIndex;
Inc(Index);
if Index >= FTMSPlayList.Count then
Index := 0;
CurrentSongIndex := Index;
PlayItem(Index);
end
else if FMUSIC_IsFinished(FSongs[CurrentSongIndex].Module) and
not PlaylistMode then begin
PlayItem(CurrentSongIndex);
end;
end;

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

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

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

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

 
     
  [Назад] [Все уроки] [Далее]  
     
подробнее

     
 
megainformatic cms seo

Продвижение Вашего сайта - megainformatic cms seo

Для входа на сайт используйте логин: admin и пароль: admin

megainformatic cms seo - это компактное решение для создания вашего первого сайта и его продвижения. Данная версия использует базы данных my sql. Система устанавливается на ваш хостинг в считанные минуты .

Скопируйте все файлы на ваш хостинг и создайте базу данных - сайт готов к работе !!!

В комплект входят 6 готовых шаблонов, и набор модулей для административной и фронтальной частей сайта:

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

а также модули для продвижения сайта:

- мета; - карта сайта;


 

Заказать megainformatic cms admin

 
     
 

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

Два основных инструмента продвижения - это улучшение индексации сайта поисковыми роботами - megainformatic cms seo

Содержит 2 основных компонента для реализации этих целей -

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

 
     
 

Сайт и продвижения сайта на - megainformatic cms seo

Особенности:

- компактность и быстрота в работе и развертывании сайта;

- открытый исходный код на php;

- быстрая и простая установка;

- подробное описание возможностей;

- может использоваться как самостоятельная система для управления сайтом, так и в полном составе megainformatic cms той версии которую вы используете или планируете использовать:

megainformatic cms express

megainformatic cms

megainformatic cms e-pro

megainformatic cms e-shop

megainformatic cms e-mailer

 
     
 

 

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

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

Подробнее об установке на хостинг можно почитать здесь

Ваш сайт готов к работе !!!

 
     
     
 

Если возможности megainformatic cms seo, покажутся Вам недостаточными и Вы захотите чего-то большего - обратите внимание на следующие продукты -

megainformatic cms e-pro

 
     
  megainformatic cms e-shop  
     
  megainformatic cms e-mailer  
     
  Удачи вам в создании собственного виртуального интернет-пространства !!!  
     
     
     

Модуль слайдера (slider)

megainformatic cms express files + модуль slider
Предлагаем вашему вниманию сайт под ключ на базе системы
megainformatic cms express files + модуль слайдера уже встроенный и подключенный.


Сайт разворачивается в течение 10 минут путём простого копирования файлов на ваш хостинг.
Не использует базы данных my sql.

Пример работы системы можно увидеть здесь - http://megainformatic.ru/varve/webprojects/modules/module_slider

В состав комплекта входит:

- система megainformatic cms express files;
- 4 шаблона сайта;
- подключенный модуль slider + 37 примеров статичных и анимированных баннеров;
- документация по интеграции и использованию слайдера;

Приобрести комплект megainformatic cms express files + модуль slider


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

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

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

Для баннеров можно описывать как внешние, так и внутренние ссылки. Все ссылки с баннеров имеют дополнительный параметр banner, что позволяет Вам однозначно определить, что посетитель перешел на данную страницу Вашего сайта по клику с баннера. Это чётко отслеживается в модуле посещаемости вашего сайта. Если у вас еще нет своего модуля для учета посещаемости то, можете обратить внимание на продукт - megainformatic cms stat kit

Принцип работы слайдера

Для показа собственных баннеров в слайдере используйте файл данных в папке модулей, в подпапке slider, в подпапке data. Все баннеры описываются в таком виде:

m_cms_epro.jpg;95;megainformatic cms e-pro;Робот - помощник по обработке заказов;

т. е. image filename; pageid; title; description;

где image filename - имя файла баннера;
pageid - id страницы либо можно указать внешнюю ссылку;
title и description - просто текстовые пояснения к показываемому баннеру.

Если Вам потребуется подключить модуль слайдера к другому сайту или даже к другой cms, то нужно учитывать следующие моменты:

1) В модуле index.php вашего сайта, либо в модуле, который вызывается до закрытия тега </head> вам нужно подключить заголовочные файлы модуля слайдера следующей командой

<?php include_once "имя_папки_модулей/имя_папки_модуля_слайдера/slider_includes.php"; ?>

2) В нужном месте шаблона сайта нужно вывести слайдер, например используя такой код -

<div id="gl_slider" style="text-align: center;">
<div id="gl_slider_container"><?php include_once "имя_папки_модулей/имя_папки_модуля_слайдера/slider.php"; ?></div>
</div>


Пример готово подключенного слайдера Вы найдёте внутри дистрибутива данного продукта megainformatic cms express files + модуль слайдера, либо может посмотреть демо здесь - http://megainformatic.ru/varve/webprojects/modules/module_slider

На нашем сайте Вы также можете видеть как работает данный слайдер, размещенный в футерной части сайта.

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

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



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


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