IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
3DSprite.dba, Библа для создания менюшек и интерфесов
Sha/|/|an
сообщение 9.11.2004, 17:24
Сообщение #1


Digital Mystery
***

Группа: Пользователи
Сообщений: 1887
Регистрация: 1.9.2004
Пользователь №: 8



3DSprite.
(Жмите правой кнопкой мыши с скачивайте файл, а от он откроет сам текст.)

Поместите этот файл в корневой каталог вашего проекта. Затем в самом начале напишите следующий код:

Код
Dim MD(66000)
Dim MC(66000)
Dim MCR(66000)
Dim MR(66000)
#INCLUDE "3DSprite.dba"


После этого будут доступны следующие ф-ции:
  • MakeSprite(Obj, Tex, X#, Y#, SX#, SY#, ghost, transp) - создание 3Д спрайта номер Obj, с текстурой Tex, в координатах X#, Y# и размером SX#, SY#, в 3Д-пространстве, при отдалении от камеры в 4 единицы.
    X# и Y# можно высчитать так (для разрешения экрана 1024 х 768):
    X# = ((X - 512)/64)*0.4
    Y# = ((384 - Y)/64)*0.4
    Размеры высчитываются тем же способом ((/64)*0.4). Центр спрайта находится в ценре. Центр координат, кстати, находится в центра экрана. Положение и размеры 3Д спрайтов не зависят от разрешения экрана. Они всегду будет одного размера, только качество будет хуже при разрешениях, отличных от разрешения спрайта. Если ghost = 1, то спрайт будет полупрозрачным. Если transp = 1, то участки спрайта, окрашеного в ключевой цвет (set image colorkey) не будут прорисовываться на экране.
    Если вы пытаетесь создать уже существующий спрайт, то он будет затекстурирован и отображен на экране. Ошибки не будет.
  • PositionSprite(Obj, X#, Y#) - установка спрайта Obj в точку X#, Y#.
  • TextureSprite(Obj, Tex) - текстурирование спрайта Obj, текстурой Tex.
  • TShowSprite(Obj, Tex) - включает в себя действие предыдущей ф-ции а также делает спрайт видимым (иногда так удобнее и меньше тормозов)
  • HideSprite(Obj) - скрывает спрайт Obj с экрана
  • ShowSprite(Obj) - показывает спрайт Obj на экране
  • Ghost(Obj) - делает спрайт Obj полупрозрачным
  • UnGhost(Obj) - убирает полупрозрачность спрайта Obj
  • MouseMove(Obj) - возвращает 1, если мышка находится над спрайтом Obj
  • MouseMoveA(Obj, sx, sy) - возвращает 1, если мышка находится в пределах прямоугольника, заданого смещением sx и sy от его центра
  • MouseMoveB(Obj, x1, y1, x2, y2) - возвращает 1, если мышка находится в пределах прямоугольника, заданого 2-мя точками
  • MouseDown(Obj) - возвращает 1, если нажата левая кнопка мыши и 2, если правая. Разумеется, только тогда, когда мышка находится над спрайтом Obj
  • MouseDownA(Obj, sx, sy) и MouseDownB(Obj, x1, y1, x2, y2) - аналогично с MouseMove
  • MousePress(Obj) - возвращает 1, если пользователь кликнул на спрайт (нажал и отпустил кнопку) левой кнопкой мыши и 2, если правой.
Пока это все функции. Если вам понравится эта библа, то я ее буду улучшать. Например добавлю круглые спрайты (когда область его реагирования с мышкой - круг) и произвольные (т.е. форма будет описываться несколькими точками - неправильным многоугольником). Возможно добавлю контроллы (как в ООП), например текстовые поля, списки и т.д. и скины для них моно будет указывать свои.

И еще несколько советов по созданию меню и интерфеса:
  • Всегда используйте текстуры, размерами, являющиеся степенью 2-ки!! Тогда не будет корявых, искаженным надписей, все будет точно так, как вы нарисовали в редакторе. И без разницы, что вы используете - плашки или спрайты. Если ближайшая степень 2-ки слишком большая для вашего спрайта (текстуры для плашки), то все равно лучше использовать ее и закрасить ненужные области в черный цвет, а плашку сделать больше.
  • Спрайтовое меню можно нормально делать только в ДБПро. В ДБКлассик будут тормоза уже при 10-15 спрайтах.
  • Все номера текстур и объектов держите в переменных. Тогда, даже если вы через пару месяцев сядите за старый проект, вы все поймете.
  • Плашки по умолчанию темнее, чем текстуры нарисованные в редакторе. Если вы хотите чтобы все было нормально, то тогда желаетльно разсположить какой-нидь (можно и нулевой) источник света типа Point в положение камеры. Цвет света - белый.

Пока все. И еще! Для новичков: помните, что 3Д-спрайт - ни что иное, как 3Д плашка! И номера их не должны конфликтовать с номерами 3Д объектов.

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


--------------------
exclusive reality for you...
Перейти в начало страницы
 
+Цитировать сообщение
Kolyanoid
сообщение 9.11.2004, 18:58
Сообщение #2


. . .-= SPK Games =-. . . Модератор v3.2 alpha . . Linuxoid v0.5
***

Группа: Администраторы
Сообщений: 3521
Регистрация: 1.9.2004
Из: Москва
Пользователь №: 15



Цитата
желаетльно разсположить какой-нидь (можно и нулевой) источник света типа Point в положение камеры. Цвет света - белый.

В таких случиях лучше просто сделать объект нечувствительным к свету, туману и освещению сцены через SET OBJECT. Эффект тот же, но без лишних тормозов и кусков кода в цикле smile.gif


--------------------
Мои координаты:
  • Jabber: kolyanoid@jabber.ru
  • Почта: kolyanoid [at] mail333.com
  • Вконтакте: id64896
«Есть только две бесконечные вещи: Вселенная и глупость. Хотя насчет Вселенной я не уверен». (Альберт Эйнштейн)
Перейти в начало страницы
 
+Цитировать сообщение
uxu
сообщение 9.11.2004, 22:22
Сообщение #3


Активный участник
***

Группа: Пользователи
Сообщений: 42
Регистрация: 22.10.2004
Пользователь №: 109



<<<COOL>>>
Перейти в начало страницы
 
+Цитировать сообщение
Sha/|/|an
сообщение 10.11.2004, 15:39
Сообщение #4


Digital Mystery
***

Группа: Пользователи
Сообщений: 1887
Регистрация: 1.9.2004
Пользователь №: 8



Ну ё... а где восторженные отзывы?? laugh.gif Так мне развивать эту идею или нет?

Цитата
<<<COOL>>>

А как это понимать? wink.gif

Цитата
В таких случиях лучше просто сделать объект нечувствительным к свету, туману и освещению сцены через SET OBJECT. Эффект тот же, но без лишних тормозов и кусков кода в цикле

Что-то я обь этом не подумал.. Но у моего способа есть преимущества! Можно сделать, чтобы кнопки отдавали зеленоватым или каким-то другим цветом. Можно сделать это в цикле, будет красиво!


--------------------
exclusive reality for you...
Перейти в начало страницы
 
+Цитировать сообщение
Kolyanoid
сообщение 10.11.2004, 16:20
Сообщение #5


. . .-= SPK Games =-. . . Модератор v3.2 alpha . . Linuxoid v0.5
***

Группа: Администраторы
Сообщений: 3521
Регистрация: 1.9.2004
Из: Москва
Пользователь №: 15



Цитата
Что-то я обь этом не подумал.. Но у моего способа есть преимущества! Можно сделать, чтобы кнопки отдавали зеленоватым или каким-то другим цветом. Можно сделать это в цикле, будет красиво!

Выкрутился, блин smile.gif Твой способ хорош, если нужна динамическая смена цвета (оттенка). Во всех остальных случаях - SET OBJECT smile.gif


--------------------
Мои координаты:
  • Jabber: kolyanoid@jabber.ru
  • Почта: kolyanoid [at] mail333.com
  • Вконтакте: id64896
«Есть только две бесконечные вещи: Вселенная и глупость. Хотя насчет Вселенной я не уверен». (Альберт Эйнштейн)
Перейти в начало страницы
 
+Цитировать сообщение
Sha/|/|an
сообщение 10.11.2004, 21:40
Сообщение #6


Digital Mystery
***

Группа: Пользователи
Сообщений: 1887
Регистрация: 1.9.2004
Пользователь №: 8



В следующйю версию 3dsprite добавлю и эту фишку (динамическая подсветка и set object). smile.gif


--------------------
exclusive reality for you...
Перейти в начало страницы
 
+Цитировать сообщение
uxu
сообщение 11.11.2004, 23:10
Сообщение #7


Активный участник
***

Группа: Пользователи
Сообщений: 42
Регистрация: 22.10.2004
Пользователь №: 109



Клево Моледец ) Счас конечнго Слабовато..... надо работать !!!
Перейти в начало страницы
 
+Цитировать сообщение
Sha/|/|an
сообщение 13.11.2004, 23:10
Сообщение #8


Digital Mystery
***

Группа: Пользователи
Сообщений: 1887
Регистрация: 1.9.2004
Пользователь №: 8



Спасибо!
Знаю, что слабовато, но я на это потратил не больше 20 мин. К тому же это "побочный" продукт. smile.gif Я его и не планировал делать... smile.gif) А теперь, наверно, доведу до ума.


--------------------
exclusive reality for you...
Перейти в начало страницы
 
+Цитировать сообщение
uxu
сообщение 14.11.2004, 14:26
Сообщение #9


Активный участник
***

Группа: Пользователи
Сообщений: 42
Регистрация: 22.10.2004
Пользователь №: 109



Если Сделаешь очень удобную ,, заметно облегчающую разработку менюшек то Я ДУМАЮ ТЕБЯ НЕ ЗАБУДУТ....
Вот ))
Перейти в начало страницы
 
+Цитировать сообщение
Sha/|/|an
сообщение 14.11.2004, 21:28
Сообщение #10


Digital Mystery
***

Группа: Пользователи
Сообщений: 1887
Регистрация: 1.9.2004
Пользователь №: 8



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

А сделать я собираюсь не только для менюшек. Но я для навороченых интерфесов, в том числе и для софта! smile.gif Удобно ведь использовать контролы в ДБ, заменяя только текстурки!


--------------------
exclusive reality for you...
Перейти в начало страницы
 
+Цитировать сообщение
Sir Lesro
сообщение 23.11.2004, 17:58
Сообщение #11


Активный участник
***

Группа: Пользователи
Сообщений: 89
Регистрация: 15.11.2004
Из: Калмыкия, Элиста
Пользователь №: 131



Интересно. Будем пользоваться. Спасибо. smile.gif


--------------------
Программа делает то, что вы приказали ей сделать, а не то, что вы хотели, чтобы она сделала.
"Третий закон Грира"
Перейти в начало страницы
 
+Цитировать сообщение
Sir Lesro
сообщение 24.11.2004, 13:24
Сообщение #12


Активный участник
***

Группа: Пользователи
Сообщений: 89
Регистрация: 15.11.2004
Из: Калмыкия, Элиста
Пользователь №: 131



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


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


HideGroup(id) - прячет группу кнопок меню с идентификатором id и делает ее неактивной

ShowGroup(id,x,y) - выводит на экран меню(группу кнопок) с идентификатором id и делает ее активной, x y - можно убрать, если меню будет находиться всегда на одном месте.

function GroupActive(id) - возвращает 1, если группа(id) активна, 0 - неактивна

function GroupUpper(id) -возвращает номер(id) группы меню находящейся выше меню id

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

Еще можно придумать и другие(типа DeleteGrop(id)). Это должны основными.


--------------------
Программа делает то, что вы приказали ей сделать, а не то, что вы хотели, чтобы она сделала.
"Третий закон Грира"
Перейти в начало страницы
 
+Цитировать сообщение
uxu
сообщение 25.11.2004, 17:57
Сообщение #13


Активный участник
***

Группа: Пользователи
Сообщений: 42
Регистрация: 22.10.2004
Пользователь №: 109



.
Такого рода возможности не помешают !
Перейти в начало страницы
 
+Цитировать сообщение
Sha/|/|an
сообщение 27.11.2004, 19:40
Сообщение #14


Digital Mystery
***

Группа: Пользователи
Сообщений: 1887
Регистрация: 1.9.2004
Пользователь №: 8



Sir Lesro, хорошая идея! Так и сделаю. Можно еще сделать объекты-контейнеры. При добавлении другого объекта в контейнер он автоматически привязывается к группе контейнера. Если скрыть контейнер, то и все дочерние объекты тоже скроются. Я сейчас (точнее на прошлых выходных.. smile.gif ) делал TextBox. Почти сделал. Надо еще только сам ввод добавить. Впринципе структура будет напоминать ООП язык, например VB или Delphi. Кстати, когда сделаю текстовое поле и кнопку выложу дему.


--------------------
exclusive reality for you...
Перейти в начало страницы
 
+Цитировать сообщение
Sir Lesro
сообщение 1.12.2004, 11:09
Сообщение #15


Активный участник
***

Группа: Пользователи
Сообщений: 89
Регистрация: 15.11.2004
Из: Калмыкия, Элиста
Пользователь №: 131



Цитата(Sha/|/|an @ Nov 27 2004, 07:40 PM)
Sir Lesro, хорошая идея! Так и сделаю. Можно еще сделать объекты-контейнеры. При добавлении другого объекта в контейнер он автоматически привязывается к группе контейнера. Если скрыть контейнер, то и все дочерние объекты тоже скроются.


Ждем... Ты же будешь не против если мы твой код в нашей тех-демке успользуем? rolleyes.gif Можем, конечно и сами написать, но сейчас голова другим занята. Стратегию ж пишем. cool.gif


--------------------
Программа делает то, что вы приказали ей сделать, а не то, что вы хотели, чтобы она сделала.
"Третий закон Грира"
Перейти в начало страницы
 
+Цитировать сообщение
Sha/|/|an
сообщение 2.12.2004, 16:12
Сообщение #16


Digital Mystery
***

Группа: Пользователи
Сообщений: 1887
Регистрация: 1.9.2004
Пользователь №: 8



Цитата
Ждем... Ты же будешь не против если мы твой код в нашей тех-демке успользуем?  Можем, конечно и сами написать, но сейчас голова другим занята. Стратегию ж пишем. 

Если бы был против, то я бы, даже если и сказал бы о нем, но не стал бы выкладывать его в сеть.


--------------------
exclusive reality for you...
Перейти в начало страницы
 
+Цитировать сообщение
Sir Lesro
сообщение 9.12.2004, 13:36
Сообщение #17


Активный участник
***

Группа: Пользователи
Сообщений: 89
Регистрация: 15.11.2004
Из: Калмыкия, Элиста
Пользователь №: 131



Цитата(Sha/|/|an @ Dec 2 2004, 04:12 PM)
Если бы был против, то я бы, даже если и сказал бы о нем, но не стал бы выкладывать его в сеть.
*


Спросил просто, из-за пиличия. cool.gif


--------------------
Программа делает то, что вы приказали ей сделать, а не то, что вы хотели, чтобы она сделала.
"Третий закон Грира"
Перейти в начало страницы
 
+Цитировать сообщение

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 21.9.2017, 22:37
 X 
Ссылки на работы форумчан:
1. Cайт по использованию 3D технологий
в образовании

2. 15 Defense. Underwater Battle

3. GlaZ в Steam Greenlight