![]() |
Ответ: Вопрос-Ответ (для новичков)
ВОт у меня ещё одна проблемка. В редакторе, который я делаю, я сделал функцию загрузки и расстановки моделей, в данном случае - это деревья
вот функция (стандартная). 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. А как сделать так, что бы через кнопку + увеличивать радиус расположения деревьев. Что бы нажал плюс, пикнул на поверхность, создались деревья, ну поняли... Как? |
Ответ: Вопрос-Ответ (для новичков)
Хм... Первое что пришло на ум:
заведи две каких нить переменных (допустим mouse_downed, и size) равные нулю. При нажатии на кнопку пикаешь место. Пока держишь кнопку переменную size увеличиваешь на MouseYSpeed() (допустим что так, и введи ещё ограничение по размеру) и одновременно переменная mouse_downed пиравнивается к единице. После того как отпустил кнопку делаешь условие типа if (mouse_downed=1) then и в этом условии уже делаешь свой цикл for i=траляля to size и в нём создаёшь как хочешь деревья. В конце условия не забудь mouse_downed приравнять к нулю. Вот как то так, тупо но должно работать. вот приблизительный код. Код:
... UPD. ой, что то не так как то прочитал задание. Сделал увеличение радиуса мышкой, а не плюсом. Ну с плюсом будет приблизительно так же, только увеличиваться size будет не на MouseYSpeed, а на любую твою цифру при нажатии на плюс. Код:
... |
Ответ: Вопрос-Ответ (для новичков)
мне надо что б вся эта свара деревьев не на ОДНОЙ КООРДИНАТЕ СОЗДАВАЛАСЬ. А колличество создаваемых деревьев я знаю как делать.
Пример: Поставил кол. деревьев 1, пикнул, создалось дерево, Поставил кол. деревьев 5, создалось 5 деревьев в разных расстояниях. То есть по кнопке + увеличивается и колличество деревьев, и расстояние между ними. Любое расстояние. Хоть хаотичное. |
Ответ: Вопрос-Ответ (для новичков)
а если к координате пика прибавить тот же Rnd(-size*10,size*10) допустим? Или если в цикле for делаешь, то допустим переменную цикла умноженную на size к координате пика прибавлять? вариантов миллион. Можешь ещё одну переменную завести, которая будет прибавляться уже в for'e, и её прибавлять к координате пика :)
|
Ответ: Вопрос-Ответ (для новичков)
Ой! Благодарю! Очень помог! А то додуматься не мог=).
|
Ответ: Вопрос-Ответ (для новичков)
Вложений: 1
Да,вот ещё вопрос: как рисовать текстурами? В пример вам Казаки (надеюсь все играли и все знают редактор =))) ). Выбираешь инструмент рисование текстурами, пикаешь по поверхности, и на поверхности рисуется текстура. Знаю что как - то через UVW. Есть примеры? Или кто - нибудь объяснит как такой инструмент сделать.
|
Ответ: Вопрос-Ответ (для новичков)
плиззз
|
Ответ: Вопрос-Ответ (для новичков)
:) коровья лепешка какая-то.
Ну самый простой способ это спрайтами(обычный декаль получается)....там ничего сложного. Способ хорош если у тебя текстура маленькая и тайлами. |
Ответ: Вопрос-Ответ (для новичков)
фигня способ.
Ищи в примерах запись в текстуру и смешивание текстур. Примерно оно выглядит так: принимаем координаты пика, переводим их в UV (математикой), рисуем в черно-белую текстуру (альфу для слоя нужной текстуры - тут смотри смешивание текстур в справке) в координатах пика + некотором радиусе белое пятно (можно смотреть еще расстояние до координат пика от обрабатываемого текселя - чтобы пятно было с "мягким" краем), ну и накладываем альфу и тайленную текстуру по этой альфе... |
Ответ: Вопрос-Ответ (для новичков)
Через текстурные координаты - фигня. Получается каша. Имхо: Есть только два вменяемых но ресурсоёмких способа текстурить ландшафт. Рисовать на блице ландшафт через маску тоже геморрой при том размер тексы ограничен и слоев только 8.
1) Многослойный мешевый террейн на в котором местность раскрашивается путем увеличения альфа канала вершин верхних слоев. На каждом слое своя текстура. В дальнейшем при сохранении хитрозадым алгоритмом сохраняются только видимые участки. Тоесть он обрезает ненужные. Сам делал. Картинка прикольная, но алгоритм не придумал). Для блица - тормозной и ограниченный способ который тем не менее выдает неплохую картинку. Карта правда будет жестко ограниченна размерами. У меня вроде было 180х180(если память не изменяет). 2) Тайловый террейн. Это тоже тормозной способ. Но карту можно зациклить(хотя кому в наш век оно надо?). Вообще как показывает практика для стратегий его можно и моделить. При должном навыке можно неплохую карту забабахать. На мой взгляд- самый лучший способ. |
Ответ: Вопрос-Ответ (для новичков)
А ещё есть варианты?
|
Ответ: Вопрос-Ответ (для новичков)
найти текстурную координату по имеющимся мировым не слишком сложно:
http://www.google.ru/url?sa=t&source...eCTnReVrCLAo6A |
Ответ: Вопрос-Ответ (для новичков)
Цитата:
|
Ответ: Вопрос-Ответ (для новичков)
Так, вот ещё одна проблема. Сделал код сохранения карты и загрузки. НУ вот тут такая проблема: у меня есть 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 |
Ответ: Вопрос-Ответ (для новичков)
Можешь удалять все, что сделал.
Код:
Function CreateTree2(x1#,y1#,z1#,P1#,YA1#,R1#) Код:
For b.Tree1 = Each Tree1 Ты изначально добавил траблы себе. Почему бы не хранить название меша в типе? А самое главное не завести папку в игре, где будут записаны типы деревьев, со всеми параметрами? И при запуске двига не читать эту папку для создания банка данных? Пока не поймешь, как делать код "правильно" нет смысла делать игры. |
Часовой пояс GMT +4, время: 08:32. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot