Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D

Ответ
 
Опции темы
Старый 31.08.2010, 15:01   #1006
Ganociy
Разработчик
 
Аватар для Ganociy
 
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений
(для 74 пользователей)
Ответ: Вопрос-Ответ (для новичков)

ВОт у меня ещё одна проблемка. В редакторе, который я делаю, я сделал функцию загрузки и расстановки моделей, в данном случае - это деревья
вот функция (стандартная).
Function CreateTree1()
a.Tree1=New Tree1
a\model=LoadMesh ("Data\Models\Trees\Tree1\Larch.b3d")
RotateEntity a\model,0,Rnd(360),0
PositionEntity a\model,PickedX(),PickedY(),PickedZ()
End Function

Понятно. Ничего хитрого. Пикнул на поверхность - создалось дерево. А вот я хочу создать например не одно дерево , а 50 деревьев. Знаю через команду For и т.д. Но проблема в том, что все эти 50 деревьев создаются на одной координате. Я хочу что бы в разных.Нет, я не малосоображающий к PickedX () прибавляем Rnd(-200,200), так же с PickedZ. А как сделать так, что бы через кнопку + увеличивать радиус расположения деревьев. Что бы нажал плюс, пикнул на поверхность, создались деревья, ну поняли... Как?
__________________
Самый первый и самый великий программист - это Бог.
(Offline)
 
Ответить с цитированием
Старый 31.08.2010, 15:33   #1007
St_AnGer
Элита
 
Аватар для St_AnGer
 
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений
(для 2,828 пользователей)
Ответ: Вопрос-Ответ (для новичков)

Хм... Первое что пришло на ум:

заведи две каких нить переменных (допустим mouse_downed, и size) равные нулю. При нажатии на кнопку пикаешь место. Пока держишь кнопку переменную size увеличиваешь на MouseYSpeed() (допустим что так, и введи ещё ограничение по размеру) и одновременно переменная mouse_downed пиравнивается к единице. После того как отпустил кнопку делаешь условие типа if (mouse_downed=1) then и в этом условии уже делаешь свой цикл for i=траляля to size и в нём создаёшь как хочешь деревья. В конце условия не забудь mouse_downed приравнять к нулю. Вот как то так, тупо но должно работать.

вот приблизительный код.
...
if mousedown(1) then
    if mousehit(1) then ... (пикаешь место)

    size = size + mouseyspeed()
    if size>25 then size = 25    

    mouse_downed = 1
end if

if mouse_downed = 1 then
    for i = траляля to size
         ...(создаёшь деревья)
    next
end if
...
Палками не бейте, написал первое что пришло в голову


UPD. ой, что то не так как то прочитал задание. Сделал увеличение радиуса мышкой, а не плюсом. Ну с плюсом будет приблизительно так же, только увеличиваться size будет не на MouseYSpeed, а на любую твою цифру при нажатии на плюс.

...
if mousedown(1) then
    ... (пикаешь место)

    if keyhit(какой там код у плюса не помню) then size = size + 1

    mouse_downed = 1
end if

if mouse_downed = 1 then
    for i = траляля to size
         ...(создаёшь деревья)
    next
end if
...
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.

Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2


Скачать Doom 2D: Remake v0.3.8a
(Offline)
 
Ответить с цитированием
Старый 31.08.2010, 15:58   #1008
Ganociy
Разработчик
 
Аватар для Ganociy
 
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений
(для 74 пользователей)
Ответ: Вопрос-Ответ (для новичков)

мне надо что б вся эта свара деревьев не на ОДНОЙ КООРДИНАТЕ СОЗДАВАЛАСЬ. А колличество создаваемых деревьев я знаю как делать.
Пример: Поставил кол. деревьев 1, пикнул, создалось дерево, Поставил кол. деревьев 5, создалось 5 деревьев в разных расстояниях. То есть по кнопке + увеличивается и колличество деревьев, и расстояние между ними. Любое расстояние. Хоть хаотичное.
__________________
Самый первый и самый великий программист - это Бог.
(Offline)
 
Ответить с цитированием
Старый 31.08.2010, 16:21   #1009
St_AnGer
Элита
 
Аватар для St_AnGer
 
Регистрация: 21.01.2010
Адрес: Россия, Рязанская область, г.Михайлов
Сообщений: 2,067
Написано 1,185 полезных сообщений
(для 2,828 пользователей)
Ответ: Вопрос-Ответ (для новичков)

а если к координате пика прибавить тот же Rnd(-size*10,size*10) допустим? Или если в цикле for делаешь, то допустим переменную цикла умноженную на size к координате пика прибавлять? вариантов миллион. Можешь ещё одну переменную завести, которая будет прибавляться уже в for'e, и её прибавлять к координате пика
__________________
Main PC:
Intel Core i5 4260U 1.44 GHz + LPDDR3 1x4096 1600 MHz + Intel HD Graphics 5000.

Asus Ёжик T101-MT:
Intel Atom N-570 1.66 Ghz + DDR2 2x1024 800 Mhz + Intel GMA 3150 128 Mb DDR2


Скачать Doom 2D: Remake v0.3.8a
(Offline)
 
Ответить с цитированием
Старый 31.08.2010, 17:20   #1010
Ganociy
Разработчик
 
Аватар для Ganociy
 
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений
(для 74 пользователей)
Ответ: Вопрос-Ответ (для новичков)

Ой! Благодарю! Очень помог! А то додуматься не мог=).
__________________
Самый первый и самый великий программист - это Бог.
(Offline)
 
Ответить с цитированием
Старый 01.09.2010, 20:37   #1011
Ganociy
Разработчик
 
Аватар для Ganociy
 
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений
(для 74 пользователей)
Ответ: Вопрос-Ответ (для новичков)

Да,вот ещё вопрос: как рисовать текстурами? В пример вам Казаки (надеюсь все играли и все знают редактор =))) ). Выбираешь инструмент рисование текстурами, пикаешь по поверхности, и на поверхности рисуется текстура. Знаю что как - то через UVW. Есть примеры? Или кто - нибудь объяснит как такой инструмент сделать.
Миниатюры
Нажмите на изображение для увеличения
Название: Пример.jpg
Просмотров: 624
Размер:	17.4 Кб
ID:	11113  
__________________
Самый первый и самый великий программист - это Бог.
(Offline)
 
Ответить с цитированием
Старый 01.09.2010, 23:27   #1012
Ganociy
Разработчик
 
Аватар для Ganociy
 
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений
(для 74 пользователей)
Ответ: Вопрос-Ответ (для новичков)

плиззз
__________________
Самый первый и самый великий программист - это Бог.
(Offline)
 
Ответить с цитированием
Старый 01.09.2010, 23:46   #1013
Dzirt
Элита
 
Аватар для Dzirt
 
Регистрация: 16.01.2008
Сообщений: 1,800
Написано 958 полезных сообщений
(для 3,833 пользователей)
Ответ: Вопрос-Ответ (для новичков)

коровья лепешка какая-то.
Ну самый простой способ это спрайтами(обычный декаль получается)....там ничего сложного. Способ хорош если у тебя текстура маленькая и тайлами.
(Offline)
 
Ответить с цитированием
Старый 02.09.2010, 00:43   #1014
Taugeshtu
scientist.alien
 
Аватар для Taugeshtu
 
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений
(для 2,593 пользователей)
Ответ: Вопрос-Ответ (для новичков)

фигня способ.
Ищи в примерах запись в текстуру и смешивание текстур.
Примерно оно выглядит так:
принимаем координаты пика, переводим их в UV (математикой), рисуем в черно-белую текстуру (альфу для слоя нужной текстуры - тут смотри смешивание текстур в справке) в координатах пика + некотором радиусе белое пятно (можно смотреть еще расстояние до координат пика от обрабатываемого текселя - чтобы пятно было с "мягким" краем), ну и накладываем альфу и тайленную текстуру по этой альфе...
__________________
Public service announcement: вы можете заблокировать отображение сообщений определённого пользователя, добавив его ник в список игнорируемых.
Tau lab.
We LOVE you. We MADE you.
(Offline)
 
Ответить с цитированием
Старый 02.09.2010, 19:45   #1015
Gector
Легенда
 
Аватар для Gector
 
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений
(для 5,072 пользователей)
Плохо Ответ: Вопрос-Ответ (для новичков)

Через текстурные координаты - фигня. Получается каша. Имхо: Есть только два вменяемых но ресурсоёмких способа текстурить ландшафт. Рисовать на блице ландшафт через маску тоже геморрой при том размер тексы ограничен и слоев только 8.
1) Многослойный мешевый террейн на в котором местность раскрашивается путем увеличения альфа канала вершин верхних слоев. На каждом слое своя текстура. В дальнейшем при сохранении хитрозадым алгоритмом сохраняются только видимые участки. Тоесть он обрезает ненужные. Сам делал. Картинка прикольная, но алгоритм не придумал). Для блица - тормозной и ограниченный способ который тем не менее выдает неплохую картинку. Карта правда будет жестко ограниченна размерами. У меня вроде было 180х180(если память не изменяет).
2) Тайловый террейн. Это тоже тормозной способ. Но карту можно зациклить(хотя кому в наш век оно надо?).
Вообще как показывает практика для стратегий его можно и моделить. При должном навыке можно неплохую карту забабахать. На мой взгляд- самый лучший способ.
__________________
Ибо как сказал Бгдн:
(Offline)
 
Ответить с цитированием
Старый 02.09.2010, 20:49   #1016
Ganociy
Разработчик
 
Аватар для Ganociy
 
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений
(для 74 пользователей)
Ответ: Вопрос-Ответ (для новичков)

А ещё есть варианты?
__________________
Самый первый и самый великий программист - это Бог.
(Offline)
 
Ответить с цитированием
Старый 02.09.2010, 21:05   #1017
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Вопрос-Ответ (для новичков)

найти текстурную координату по имеющимся мировым не слишком сложно:
http://www.google.ru/url?sa=t&source...eCTnReVrCLAo6A
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
IgorOK (02.09.2010), Taugeshtu (03.09.2010)
Старый 03.09.2010, 00:03   #1018
Taugeshtu
scientist.alien
 
Аватар для Taugeshtu
 
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений
(для 2,593 пользователей)
Ответ: Вопрос-Ответ (для новичков)

А ещё есть варианты?
Разве что прямо в максе...
__________________
Public service announcement: вы можете заблокировать отображение сообщений определённого пользователя, добавив его ник в список игнорируемых.
Tau lab.
We LOVE you. We MADE you.
(Offline)
 
Ответить с цитированием
Старый 03.09.2010, 21:18   #1019
Ganociy
Разработчик
 
Аватар для Ganociy
 
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений
(для 74 пользователей)
Ответ: Вопрос-Ответ (для новичков)

Так, вот ещё одна проблема. Сделал код сохранения карты и загрузки. НУ вот тут такая проблема: у меня есть 3 вида моделей дерево1, дерево2 и дерево3 ( =)) ). По идее я должен в функции сохранения прописать позицию модели, её угол поворота и размеры. НУ прописал в отдельных циклах:


Function SaveMap(dir$)

file=WriteFile (dir$)

For b.Tree1= Each Tree1
WriteFloat file, EntityX (b\model)
WriteFloat file, EntityY (b\model)
WriteFloat file, EntityZ (b\model)
WriteFloat file, EntityPitch (b\model)
WriteFloat file, EntityYaw (b\model)
WriteFloat file, EntityRoll (b\model)
Next

For c.Tree2= Each Tree2
WriteFloat file, EntityX (c\model)
WriteFloat file, EntityY (c\model)
WriteFloat file, EntityZ (c\model)
WriteFloat file, EntityPitch (c\model)
WriteFloat file, EntityYaw (c\model)
WriteFloat file, EntityRoll (c\model)
Next

For d.Tree3=Each Tree3
WriteFloat file, EntityX (d\model)
WriteFloat file, EntityY (d\model)
WriteFloat file, EntityZ (d\model)
WriteFloat file, EntityPitch (d\model)
WriteFloat file, EntityYaw (d\model)
WriteFloat file, EntityRoll (d\model)
Next

End Function

Размеры не захотел записывать). Так вот на карте создаю сначала 2 зелённых дерева, 3 пожелтевших дерева и 4 осыпавшихся дерева, на разных позициях. После сохраняю карту. Загружаю эту же карту. ВОт код загрузки:

Function LoadMap(dir$)
file=ReadFile(dir$)
For b.Tree1 = Each Tree1
For c.Tree2 = Each Tree2
For d.Tree3 = Each Tree3

Next
Next
Next

While Not Eof(file)
X#=ReadFloat(File)
Y#=ReadFloat(File)
Z#=ReadFloat(File)
P#=ReadFloat(File)
YA#=ReadFloat(File)
R#=ReadFloat(File)
CreateTree1(X#,Y#,Z#,P#,YA#,R#)

X1#=ReadFloat(File)
Y1#=ReadFloat(File)
Z1#=ReadFloat(File)
P1#=ReadFloat(File)
YA1#=ReadFloat(File)
R1#=ReadFloat(File)
CreateTree2(X1#,Y1#,Z1#,P1#,YA1#,R1#)

X2#=ReadFloat(File)
Y2#=ReadFloat(File)
Z2#=ReadFloat(File)
P2#=ReadFloat(File)
YA2#=ReadFloat(File)
R2#=ReadFloat(File)
CreateTree3(X2#,Y2#,Z2#,P2#,YA2#,R2#)
Wend
End Function

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

Type Tree1
Field model
End Type

Function CreateTree1(x#,y#,z#,P#,YA#,R#)
a.Tree1=New Tree1
a\model=LoadMesh ("Data\Models\Trees\Tree1\Bereza.b3d")
RotateEntity a\model,P#,YA#,R#
PositionEntity a\model,x#,y#,z#
;ScaleEntity a\model,SX#,SY#,SZ#
End Function

Function UpdateTree1()
For b.Tree1=Each Tree1
For c.Tree2=Each Tree2
If EntityDistance (b\model,c\model)<=30 Then
FreeEntity b\model
FreeEntity c\model
Delete b
Delete c
Exit
EndIf
Next
Next

End Function

Type Tree2
Field model
End Type

Function CreateTree2(x1#,y1#,z1#,P1#,YA1#,R1#)
a.Tree2=New Tree2
a\model=LoadMesh ("Data\Models\Trees\Tree2\Bereza.b3d")
PositionEntity a\model,x1#,y1#,z1#
RotateEntity a\model,P1#,YA1#,R1#
End Function

Type Tree3
Field model
End Type

Function CreateTree3(x2#,y2#,z2#,P2#,YA2#,R2#)
a.Tree3=New Tree3
a\model=LoadMesh ("Data\Models\Trees\Tree3\bereza.b3d")
RotateEntity a\model,P2#,YA2#,R2#
PositionEntity a\model,x2#,y2#,z2#
End Function
__________________
Самый первый и самый великий программист - это Бог.
(Offline)
 
Ответить с цитированием
Старый 03.09.2010, 23:49   #1020
EvilChaotic
Мастер
 
Аватар для EvilChaotic
 
Регистрация: 05.04.2008
Сообщений: 910
Написано 530 полезных сообщений
(для 3,006 пользователей)
Ответ: Вопрос-Ответ (для новичков)

Можешь удалять все, что сделал.

Function CreateTree2(x1#,y1#,z1#,P1#,YA1#,R1#)
Function CreateTree3(x1#,y1#,z1#,P1#,YA1#,R1#)
Function UpdateTree1()
За такое долго время программировании давно пора понять, что должна быть одна функция создания дерева, апдейта дерева, удаление, независимо от меша и любых других параметров. В коде должно быть все учтено.

For b.Tree1 = Each Tree1
For c.Tree2 = Each Tree2
For d.Tree3 = Each Tree3

Next
Next
Next
И что это даст? Ты понимаешь, что ты делаешь?

Ты изначально добавил траблы себе. Почему бы не хранить название меша в типе? А самое главное не завести папку в игре, где будут записаны типы деревьев, со всеми параметрами? И при запуске двига не читать эту папку для создания банка данных? Пока не поймешь, как делать код "правильно" нет смысла делать игры.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо EvilChaotic за это полезное сообщение:
LLI.T.A.L.K.E.R. (05.09.2010), tormoz (04.09.2010)
Ответ


Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пожалуйста дайте ответ на несколько вопросов Kuzma 3D-программирование 8 06.10.2009 19:38
Предложение к теме "вопрос-ответ" jimon Наш форум 1 27.02.2009 19:26
Мой ответ Жеке! alcosholik Болтовня 5 19.11.2005 16:41


Часовой пояс GMT +4, время: 12:12.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com