|
31.08.2010, 15:01
|
#1006
|
Разработчик
Регистрация: 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
|
Элита
Регистрация: 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
|
Разработчик
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений (для 74 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
мне надо что б вся эта свара деревьев не на ОДНОЙ КООРДИНАТЕ СОЗДАВАЛАСЬ. А колличество создаваемых деревьев я знаю как делать.
Пример: Поставил кол. деревьев 1, пикнул, создалось дерево, Поставил кол. деревьев 5, создалось 5 деревьев в разных расстояниях. То есть по кнопке + увеличивается и колличество деревьев, и расстояние между ними. Любое расстояние. Хоть хаотичное.
__________________
Самый первый и самый великий программист - это Бог.
|
(Offline)
|
|
31.08.2010, 16:21
|
#1009
|
Элита
Регистрация: 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
|
Разработчик
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений (для 74 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
Ой! Благодарю! Очень помог! А то додуматься не мог=).
__________________
Самый первый и самый великий программист - это Бог.
|
(Offline)
|
|
01.09.2010, 20:37
|
#1011
|
Разработчик
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений (для 74 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
Да,вот ещё вопрос: как рисовать текстурами? В пример вам Казаки (надеюсь все играли и все знают редактор =))) ). Выбираешь инструмент рисование текстурами, пикаешь по поверхности, и на поверхности рисуется текстура. Знаю что как - то через UVW. Есть примеры? Или кто - нибудь объяснит как такой инструмент сделать.
__________________
Самый первый и самый великий программист - это Бог.
|
(Offline)
|
|
01.09.2010, 23:27
|
#1012
|
Разработчик
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений (для 74 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
плиззз
__________________
Самый первый и самый великий программист - это Бог.
|
(Offline)
|
|
01.09.2010, 23:46
|
#1013
|
Элита
Регистрация: 16.01.2008
Сообщений: 1,800
Написано 958 полезных сообщений (для 3,833 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
коровья лепешка какая-то.
Ну самый простой способ это спрайтами(обычный декаль получается)....там ничего сложного. Способ хорош если у тебя текстура маленькая и тайлами.
|
(Offline)
|
|
02.09.2010, 00:43
|
#1014
|
scientist.alien
Регистрация: 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
|
Легенда
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений (для 5,072 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
Через текстурные координаты - фигня. Получается каша. Имхо: Есть только два вменяемых но ресурсоёмких способа текстурить ландшафт. Рисовать на блице ландшафт через маску тоже геморрой при том размер тексы ограничен и слоев только 8.
1) Многослойный мешевый террейн на в котором местность раскрашивается путем увеличения альфа канала вершин верхних слоев. На каждом слое своя текстура. В дальнейшем при сохранении хитрозадым алгоритмом сохраняются только видимые участки. Тоесть он обрезает ненужные. Сам делал. Картинка прикольная, но алгоритм не придумал). Для блица - тормозной и ограниченный способ который тем не менее выдает неплохую картинку. Карта правда будет жестко ограниченна размерами. У меня вроде было 180х180(если память не изменяет).
2) Тайловый террейн. Это тоже тормозной способ. Но карту можно зациклить(хотя кому в наш век оно надо?).
Вообще как показывает практика для стратегий его можно и моделить. При должном навыке можно неплохую карту забабахать. На мой взгляд- самый лучший способ.
__________________
Ибо как сказал Бгдн:
|
(Offline)
|
|
02.09.2010, 20:49
|
#1016
|
Разработчик
Регистрация: 02.06.2009
Адрес: Город Герой Ленинград
Сообщений: 392
Написано 33 полезных сообщений (для 74 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
А ещё есть варианты?
__________________
Самый первый и самый великий программист - это Бог.
|
(Offline)
|
|
02.09.2010, 21:05
|
#1017
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Вопрос-Ответ (для новичков)
найти текстурную координату по имеющимся мировым не слишком сложно:
http://www.google.ru/url?sa=t&source...eCTnReVrCLAo6A
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
|
|
03.09.2010, 00:03
|
#1018
|
scientist.alien
Регистрация: 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
|
Разработчик
Регистрация: 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
|
Мастер
Регистрация: 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 за это полезное сообщение:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:12.
|