forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Вопрос-Ответ (для новичков) (http://forum.boolean.name/showthread.php?t=7886)

Kolobok 06.07.2010 13:05

Ответ: Вопрос-Ответ (для новичков)
 
С кубиками теперь всё нормально, а вот с моделями всё равно не получается... Кубик входит в модель.

is.SarCasm 06.07.2010 13:24

Ответ: Вопрос-Ответ (для новичков)
 
уличная магияяя

pax 06.07.2010 13:55

Ответ: Вопрос-Ответ (для новичков)
 
Еще раз повторюсь, что сталкиваться может только сфера с чем-то. Т.е. у кубика должна быть коллизия как у сферы, чтобы он не проходил сквозь модели.

Maxim1441 06.07.2010 22:10

Ответ: Вопрос-Ответ (для новичков)
 
Выбери нормальные значения EntityRadius

Вот тебе параметры команды:

EntityRadius entity,x_radius#[,y_radius#], где
entity - указатель объекта
x_radius# - радиус по оси x эллипсоида зоны столкновений
y_radius# (optional) - радиус по оси y эллипсоида зоны столкновений. Если не указано, то будет использоваться значение параметра x_radius# (будет сфера).

Как я увидел из твоего скрина, то танк длина танка у тебя больше высоты, поэтому попробуй больше поставить x_radius#, а y_radius# поменьше.

Коллизию для проверки столкновений м\у танком и картой используй типа сфера-полигон. Т.е. в Collisions src_type,dest_type,method,response используй method=2

Kolobok 07.07.2010 08:09

Ответ: Вопрос-Ответ (для новичков)
 
EntityRadius... А что другого нечего нет? Модели ведь не кубики и не сферы... Как же им делать столкновения?
И если делать EntityRadius и скольжение при столкновении, то они будут друг на друга лезть...

Один на сфере зациклился... А зачем EntityBox тогда (я думаю для куба)?
Как я понял, надо в интернете найти исходник игры с моделями и коллизией...

Kolobok 07.07.2010 08:39

Ответ: Вопрос-Ответ (для новичков)
 
Короче вот:
http://blitz3d.at.ua/forum/2-239-1659-16-1264154433
Не только сфера сталкивается...
EntityBox применил и всё норм. И не скользит по объекту вверх

Hurrit 07.07.2010 08:44

Ответ: Вопрос-Ответ (для новичков)
 
Тогда используй физ.движки, если тебе нужна нормальная коллизия

Maxim1441 07.07.2010 10:19

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от Kolobok (Сообщение 153308)
EntityRadius... А что другого нечего нет? Модели ведь не кубики и не сферы... Как же им делать столкновения?
И если делать EntityRadius и скольжение при столкновении, то они будут друг на друга лезть... Один на сфере зациклился... А зачем EntityBox тогда (я думаю для куба)? Как я понял, надо в интернете найти исходник игры с моделями и коллизией...

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

RlexGm 07.07.2010 11:05

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от EaNub (Сообщение 153010)
я написал говнокод приседания, но он слишком багнутый, хочу узнать как это делается цивилизованно.Может кто нибудь дать пример с использованием.Приседание примерно как в CS 1.6 (ну и в других шутерах)

Цитата:

Сообщение от EaNub (Сообщение 153043)
игра от первого лица

Цитата:

Сообщение от EaNub (Сообщение 153046)
а какже изменение радиуса, пролезание в вентилиционные трубы и т.д.?

Цитата:

Сообщение от EaNub (Сообщение 153087)
используются стандартные блиц коллизии

мда... походу не кто не знает или просто не видели

Вот решил дополнить ещё своим гавнокодом, может баги хотя бы удастся устранить
Код:

;нужно подилить всё на части:0 стоит, 1 сидит

If SidStatus=0
YplayerSid0=EntityY(player); определяем стоячию позицию по Y :)
skProsh=0
EndIf

EntityRadius player,80,RadiusPlayer ; но эт само сабой

If KeyDown(29)  And SidStatus=0  Then ;нажимаем ctrl и при этом он должен стоять
RadiusPlayer=150 ; менем высоту радиуса
YplayerSid1=EntityY(player) ; определяем Y в сидячем положении
PositionEntity camera,0,75,0 ; двигаем камеру вниз, что бы камера не проходила сквозь верхние объекты, радиус же уменьшился
skProsh=SidStatus0-YplayerSid1 ; даная переменная указывает насколько он сел:-D
SidStatus=1 ; меняем статус
EndIf

If KeyDown(29)=False And SidStatus=1 Then  ; если кнопка отпущена да и еще он сидит , то :
YplayerSid2=EntityY(player) ; определяем позицию во время вставания
If YplayerSid2-YplayerSid1>skProsh Then ; если поднялись выше чем опускались :)
RadiusPlayer=300 ; то радиус норм
PositionEntity camera,0,145,0 ; камера норм
SidStatus=0 ; игрок стоит
EndIf

TranslateEntity player,0,20,0 ; пока это не произошло тянем его вверх
gravity=2 ; 1*
EndIf

1* - но получается если при подъёме мы что нибудь задеваем, то опять летим вниз, а потом опять наверх и т.д :)
Я решил эту проблему отключением гравитации, и он липнет и не падает,
(у меня Gravity=2 отключает гравитацию) но сдесь появлятся первый(баг, просчёт и др :-D хз чё это) если же мы сталкиваемся с потолком то мы не как не можем достичь нужной позиции и можем летать по комнате :( , я думаю нужно это нужно решать не отключением грави, а чем то еще:)
И второе. Если ты сидя прополз ниже, то есть skProsh= больше чем надо , то при отпускании он начнёт тебя возращать на позицию Y с которой ты начал приседать.И если залез сидя выше , то вроде он провалиться.

-А почему же нельзя поднимать не на разницу а сразу на нужную высоту??
А вот потому что если он не достиг пола, то он будет подниматься выше чем надо, например можно барабанить ctrl(или что нибудь ещё) и он будет поднимать всё выше и выше:(
Надеюсь вы мне поможете:)

is.SarCasm 07.07.2010 11:14

Ответ: Вопрос-Ответ (для новичков)
 
Блджд ПЕРЕПИШИ КОД! С говнокодом тебе никто не поможет, напиши по людски в конце концов. Что за херь с отключением гравитации при прыжке.

RlexGm 07.07.2010 11:15

Ответ: Вопрос-Ответ (для новичков)
 
это не прыжок это подъём после приседания
и как это реализовать без отключения грави?
Нормальный код найти мне даже Google не помог найти

Maxim1441 07.07.2010 11:21

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

но сдесь появлятся первый(баг, просчёт и др :-D хз чё это) если же мы сталкиваемся с потолком то мы не как не можем достичь нужной позиции и можем летать по комнате :( , я думаю нужно это нужно решать не отключением грави, а чем то еще:)
Э... Как я понял, у тебя перс при прыжке, когда достигает потолка, не падает после этого вниз как должно быть? Ежели так, то тебе просто нужно определить момент столкновения с потолком и после этого перемещать перса вниз и запрещать ему в это время прыгать. Лично я делал это через команду LinePick ( x#,y#,z#,dx#,dy#,dz#[,radius#] ) Ну x y z - это коориднаты твоего перса, а вот dy сделай побольше ноля - тогда и выяснишь, когда потолок достигнут. Ну и еще вроде надо тогда EntityPickMode установить на тот объект, что у тебя за потолок отвечает.

Что касается остальных трабл, то выложи во вложении весь исходник - тогда можно глянуть.

RlexGm 07.07.2010 11:30

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от Maxim1441 (Сообщение 153331)
Э... Как я понял, у тебя перс при прыжке, когда достигает потолка, не падает после этого вниз как должно быть? Ежели так, то тебе просто нужно определить момент столкновения с потолком и после этого перемещать перса вниз и запрещать ему в это время прыгать. Лично я делал это через команду LinePick ( x#,y#,z#,dx#,dy#,dz#[,radius#] ) Ну x y z - это коориднаты твоего перса, а вот dy сделай побольше ноля - тогда и выяснишь, когда потолок достигнут. Ну и еще вроде надо тогда EntityPickMode установить на тот объект, что у тебя за потолок отвечает.

Что касается остальных трабл, то выложи во вложении весь исходник - тогда можно глянуть.

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

Maxim1441 07.07.2010 12:11

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

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

Нда... Единственный человек, который понял, что ты написал - это ты сам (и то не факт). Либо формулируй по людски, лидо давай исходник в студию.

Kolobok 07.07.2010 16:05

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

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

Ты походу выше сообщений 5 не читал?
Мнё всё говорили что:
Цитата:

что сталкиваться может только сфера с чем-то. Т.е. у кубика должна быть коллизия как у сферы, чтобы он не проходил сквозь моделию.
Так вот... Мне нужно было увеличить коллизию куба, радиус коробки... Ну всё сделал уже. А в модель он всё равно входит...

RlexGm 07.07.2010 16:57

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от Maxim1441 (Сообщение 153352)
Нда... Единственный человек, который понял, что ты написал - это ты сам (и то не факт). Либо формулируй по людски, лидо давай исходник в студию.

я описал подробно и с коментариями...


Цитата:

Сообщение от Kolobok (Сообщение 153398)
Так вот... Мне нужно было увеличить коллизию куба, радиус коробки... Ну всё сделал уже. А в модель он всё равно входит...

Ну правильно тебе говорили, если всё таки не обходимо использовать куб , то натяни на модель куб) а вообще лучше использовать сферу

Maxim1441 07.07.2010 17:46

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от Kolobok (Сообщение 153398)
Ты походу выше сообщений 5 не читал?
Мнё всё говорили что:

Мне не нужно читать эти 5 сообщений, и то, что тебе говорили. И тебе не стоит. Нужно читать справку к блитцу - там все написано про это.
Цитата:

Так вот... Мне нужно было увеличить коллизию куба, радиус коробки... Ну всё сделал уже. А в модель он всё равно входит...
Не ставь куб, ставь сферу - с ее помощью можно на любой объект коллизию нормально сделать. Просто поколдуй с цифрами entityradius. Можешь исходник кинуть - помогу поди.

Kolobok 07.07.2010 22:59

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от Maxim1441 (Сообщение 153427)
Мне не нужно читать эти 5 сообщений, и то, что тебе говорили. И тебе не стоит. Нужно читать справку к блитцу - там все написано про это.

Не ставь куб, ставь сферу - с ее помощью можно на любой объект коллизию нормально сделать. Просто поколдуй с цифрами entityradius. Можешь исходник кинуть - помогу поди.

Не читая сообщения ты явно правильно не ответишь...

Да я знаю как там колдовать с радиусом... НО если у этой коллизии будут параметры 2,1, то при столкновении с объектом меньших размеров, сфера начнёт залазить на объект... Я с боксом сделал, всё нормально и скользит, и не налезает.

Maxim1441 07.07.2010 23:43

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от Kolobok (Сообщение 153466)
НО если у этой коллизии будут параметры 2,1, то при столкновении с объектом меньших размеров, сфера начнёт залазить на объект...

Это не так.
Цитата:

Я с боксом сделал, всё нормально и скользит, и не налезает.
Молодец.

Program23 08.07.2010 02:16

Ответ: Вопрос-Ответ (для новичков)
 
У меня есть модель мозга.
Я копирую её:
For i=0 to 10
model(i)=copyentity(modelka)
...
next
Потом в цикле пишу:
Типа так:
For i=0 to 10
If model(i)<>0
If entitycolided(model(i),t_player) then
freeentity model(i)
endif
next
По сути все правильно, но мозг сколизинный с плэйром, не freeEntity'кается.Ваще ни на чо не реагирует.

is.SarCasm 08.07.2010 08:40

Ответ: Вопрос-Ответ (для новичков)
 
Я думаю разницы не будет если ты попробуешь написать :
Цитата:

For i=0 to 10
If model(i)<>0
If EntityDistance(model(i),entity)<3 then
freeentity model(i)
endif
next

Malder 08.07.2010 18:47

Ответ: Вопрос-Ответ (для новичков)
 
никто не знает откуда можно скачать модели низкополигонных деревьев (не больше 2000 полигонов) . нужна сосна ель и береза.

is.SarCasm 08.07.2010 18:53

Ответ: Вопрос-Ответ (для новичков)
 
http://www.turbosquid.com/Search/Index.cfm?keyword=Tree

Malder 11.07.2010 13:44

Ответ: Вопрос-Ответ (для новичков)
 
кто нибудь испытывал как работает Blitz3D на процессорах intel i3 i5 ?

Nafi 11.07.2010 14:46

Ответ: Вопрос-Ответ (для новичков)
 
А что интересует? У меня i5 M520. 2.4GHz если без турбобуста. 2 ядра, 4 потока. Плюс nV GT330M. WinXP SP3 32бита. Блиц 1.98, 1.99, 1.101
Работает.
Если интересют конкретные тесты, выкладывай.

Malder 11.07.2010 14:59

Ответ: Вопрос-Ответ (для новичков)
 
интересует как справляется новый процессор. всетаки blitz3d очень старый. нет ли каких либо багов. ?

А чем отличаеться Blitz3d от BlitzMax ?

is.SarCasm 11.07.2010 15:44

Ответ: Вопрос-Ответ (для новичков)
 
BLitzMax лучше в плане 2д графики и скорости вообще, но 3д там нету.

Taugeshtu 11.07.2010 15:53

Ответ: Вопрос-Ответ (для новичков)
 
Еще в BlitzMax есть ООП, в Blitz3D нету.

Malder 14.07.2010 16:19

Ответ: Вопрос-Ответ (для новичков)
 
кто нибудь знает как сделать такое солнышко и травку?

у кого нибудь есть исходничек этой демки

http://www.youtube.com/watch?v=uuccl9ywyKQ

Maxim1441 14.07.2010 16:21

Ответ: Вопрос-Ответ (для новичков)
 
Блин, у меня где-то эта демка с исходником была. Попробую поискать.
P.S. Блин, обманул я тебя - демка скомплиненной оказалась. Но, может, пригодится тебе. Вот ссылка: http://narod.ru/disk/22745201000/JSL_Preview.rar.html

Malder 15.07.2010 10:03

Ответ: Вопрос-Ответ (для новичков)
 
так что ни у кого нет исходника? расскажите хотя бы в теории как сделать такой эффект солнца

tormoz 15.07.2010 16:28

Ответ: Вопрос-Ответ (для новичков)
 
спрайтом перед камерой

Malder 15.07.2010 18:05

Ответ: Вопрос-Ответ (для новичков)
 
а как расчитать находиться ли солнце за каким либо обьектом или в прямой видимости?

tormoz 15.07.2010 20:16

Ответ: Вопрос-Ответ (для новичков)
 
EntityPick ( entity,range# )
Parameters
entity - entity handle
range# - range of pick area around entity

Description
Returns the nearest entity 'ahead' of the specified entity. An entity must have a non-zero EntityPickMode to be pickable.

EntityVisible ( src_entity,dest_entity )
Parameters
src_entity - source entity handle
dest_entity - destination entity handle

Description
Returns true if src_entity and dest_entity can 'see' each other.

LLI.T.A.L.K.E.R. 16.07.2010 00:20

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от tormoz (Сообщение 154904)
EntityVisible ( src_entity,dest_entity )
Parameters
src_entity - source entity handle
dest_entity - destination entity handle

Description
Returns true if src_entity and dest_entity can 'see' each other.

Для чего это придумали? И работает ли метод вообще?

Я пробовал "прятаться" за кубики - все равно "труе"

is.SarCasm 16.07.2010 00:26

Ответ: Вопрос-Ответ (для новичков)
 
Всё работает

HolyDel 16.07.2010 13:59

Ответ: Вопрос-Ответ (для новичков)
 
кубики тоже должы быть pickable.

WhiteBlack 27.07.2010 20:36

Ответ: Вопрос-Ответ (для новичков)
 
извините за нубский вопрос, но все таки
что такое Wrapper?
например я скачал сначала Physx, потом нашел Physx Wrapper там было все тоже самое и еще неколько библиотек
объясните пожалйста нубу

den 27.07.2010 20:42

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от WhiteBlack (Сообщение 156346)
извините за нубский вопрос, но все таки
что такое Wrapper?
например я скачал сначала Physx, потом нашел Physx Wrapper там было все тоже самое и еще неколько библиотек
объясните пожалйста нубу

Википедия
Цитата:

Относительно простая библиотека, являющаяся промежуточным слоем между прикладной программой и другой библиотекой или API. Целью её написания может быть обеспечение работоспособности библиотеки (API) в каком либо (чаще скриптовом) языке, в котором прямой вызов функций этой библиотеки API затруднителен или невозможен. Другой целью, может быть, обеспечение дополнительного удобства для прикладного программиста — адаптация библиотеки к объектно-ориентированному стилю программирования, компенсация неудобного дизайна библиотеки и т.п.
короче твоими словами-Physx это библиотека с визическими функциями, но она не предназначена конкретно для кокоголибо языка. Wrapper-это промежуточная библиотека, чтобы визикс работал на конкретном языке.
Physx+Wrapper=Physx Wrapper:-D

WhiteBlack 27.07.2010 20:49

Ответ: Вопрос-Ответ (для новичков)
 
Den ты прям какой-то вездесущий:)
спасибо теперь понял

TxN 16.08.2010 17:34

Ответ: Вопрос-Ответ (для новичков)
 
Уважаемые гуру блица!
Есть вопрос:
Допустим, у меня есть объект, например кубик, и я хочу, чтобы напротив выбранной мною стороны появился еще один такой же. Полигон, как я понимаю, можно выбрать через cameraPick(), а что делать дальше?
Вот картинка для пояснения:



И еще: как относится physX к очень большому количеству объектов, если они не взаимодействуют между собой (имеют массу 0 )

Nex 20.08.2010 11:42

Ответ: Вопрос-Ответ (для новичков)
 
Как правильно пользоваться функцией "MeshesIntersect"? :)
А то у меня она работает только с 2мя последними объектами.

Reks888 20.08.2010 12:31

Ответ: Вопрос-Ответ (для новичков)
 
Осторожно, MeshesIntersect - очень медленная в исполнении команда. Использовать для чего-нибудь покрупнее кубиков и сфер не рекомендуется - жутко залагает.
Код:


Graphics3D 640,480,0,2
SetBuffer BackBuffer()

camera=CreateCamera()

light=CreateLight()
RotateEntity light,90,0,0

cube1=CreateCube()
EntityColor cube1,255,0,0
ScaleEntity cube1,1,2,1
PositionEntity cube1,-2,0,10

cube2=CreateCube()
EntityColor cube2,0,255,0
ScaleEntity cube2,1,2,1
PositionEntity cube2,2,0,10

While Not KeyDown( 1 )
  TurnEntity cube1,1,1,1
  TurnEntity cube2,-.5,-.5,-.5

  RenderWorld

  ; Если куб1 и куб2 - меши, и они пересекаются, то MeshesIntersect(cube1,cube2) вернет True, и вверху экрана    будет текст
  If MeshesIntersect(cube1,cube2)=True Then Text 0,0,"Meshes are intersecting!"

  Flip
Wend
End


Nex 20.08.2010 17:24

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от Reks888 (Сообщение 159063)
Осторожно, MeshesIntersect - очень медленная в исполнении команда. Использовать для чего-нибудь покрупнее кубиков и сфер не рекомендуется - жутко залагает.
Код:

...

Хелп как бэ у меня есть и все это я знаю, но мне нужно не 2 кубика проверять, а несколько объектов одного "типа" и эта команда работает только с двумя последними объектами "типа". А с полным перебором у меня не получается. :(

Reks888 20.08.2010 18:46

Ответ: Вопрос-Ответ (для новичков)
 
Ну так каждый из нескольких по очереди и перебираешь. Первый со вторым, первый с третим... Первый с последним, Второй с третьим, Второй с четвертым...
Все предельно просто.

Ganociy 31.08.2010 15:01

Ответ: Вопрос-Ответ (для новичков)
 
ВОт у меня ещё одна проблемка. В редакторе, который я делаю, я сделал функцию загрузки и расстановки моделей, в данном случае - это деревья
вот функция (стандартная).
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. А как сделать так, что бы через кнопку + увеличивать радиус расположения деревьев. Что бы нажал плюс, пикнул на поверхность, создались деревья, ну поняли... Как?

St_AnGer 31.08.2010 15:33

Ответ: Вопрос-Ответ (для новичков)
 
Хм... Первое что пришло на ум:

заведи две каких нить переменных (допустим 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
...


Ganociy 31.08.2010 15:58

Ответ: Вопрос-Ответ (для новичков)
 
мне надо что б вся эта свара деревьев не на ОДНОЙ КООРДИНАТЕ СОЗДАВАЛАСЬ. А колличество создаваемых деревьев я знаю как делать.
Пример: Поставил кол. деревьев 1, пикнул, создалось дерево, Поставил кол. деревьев 5, создалось 5 деревьев в разных расстояниях. То есть по кнопке + увеличивается и колличество деревьев, и расстояние между ними. Любое расстояние. Хоть хаотичное.

St_AnGer 31.08.2010 16:21

Ответ: Вопрос-Ответ (для новичков)
 
а если к координате пика прибавить тот же Rnd(-size*10,size*10) допустим? Или если в цикле for делаешь, то допустим переменную цикла умноженную на size к координате пика прибавлять? вариантов миллион. Можешь ещё одну переменную завести, которая будет прибавляться уже в for'e, и её прибавлять к координате пика :)

Ganociy 31.08.2010 17:20

Ответ: Вопрос-Ответ (для новичков)
 
Ой! Благодарю! Очень помог! А то додуматься не мог=).

Ganociy 01.09.2010 20:37

Ответ: Вопрос-Ответ (для новичков)
 
Вложений: 1
Да,вот ещё вопрос: как рисовать текстурами? В пример вам Казаки (надеюсь все играли и все знают редактор =))) ). Выбираешь инструмент рисование текстурами, пикаешь по поверхности, и на поверхности рисуется текстура. Знаю что как - то через UVW. Есть примеры? Или кто - нибудь объяснит как такой инструмент сделать.

Ganociy 01.09.2010 23:27

Ответ: Вопрос-Ответ (для новичков)
 
плиззз

Dzirt 01.09.2010 23:46

Ответ: Вопрос-Ответ (для новичков)
 
:) коровья лепешка какая-то.
Ну самый простой способ это спрайтами(обычный декаль получается)....там ничего сложного. Способ хорош если у тебя текстура маленькая и тайлами.

Taugeshtu 02.09.2010 00:43

Ответ: Вопрос-Ответ (для новичков)
 
фигня способ.
Ищи в примерах запись в текстуру и смешивание текстур.
Примерно оно выглядит так:
принимаем координаты пика, переводим их в UV (математикой), рисуем в черно-белую текстуру (альфу для слоя нужной текстуры - тут смотри смешивание текстур в справке) в координатах пика + некотором радиусе белое пятно (можно смотреть еще расстояние до координат пика от обрабатываемого текселя - чтобы пятно было с "мягким" краем), ну и накладываем альфу и тайленную текстуру по этой альфе...

Gector 02.09.2010 19:45

Ответ: Вопрос-Ответ (для новичков)
 
Через текстурные координаты - фигня. Получается каша. Имхо: Есть только два вменяемых но ресурсоёмких способа текстурить ландшафт. Рисовать на блице ландшафт через маску тоже геморрой при том размер тексы ограничен и слоев только 8.
1) Многослойный мешевый террейн на в котором местность раскрашивается путем увеличения альфа канала вершин верхних слоев. На каждом слое своя текстура. В дальнейшем при сохранении хитрозадым алгоритмом сохраняются только видимые участки. Тоесть он обрезает ненужные. Сам делал. Картинка прикольная, но алгоритм не придумал). Для блица - тормозной и ограниченный способ который тем не менее выдает неплохую картинку. Карта правда будет жестко ограниченна размерами. У меня вроде было 180х180(если память не изменяет).
2) Тайловый террейн. Это тоже тормозной способ. Но карту можно зациклить(хотя кому в наш век оно надо?).
Вообще как показывает практика для стратегий его можно и моделить. При должном навыке можно неплохую карту забабахать. На мой взгляд- самый лучший способ.

Ganociy 02.09.2010 20:49

Ответ: Вопрос-Ответ (для новичков)
 
А ещё есть варианты?

HolyDel 02.09.2010 21:05

Ответ: Вопрос-Ответ (для новичков)
 
найти текстурную координату по имеющимся мировым не слишком сложно:
http://www.google.ru/url?sa=t&source...eCTnReVrCLAo6A

Taugeshtu 03.09.2010 00:03

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

А ещё есть варианты?
Разве что прямо в максе...

Ganociy 03.09.2010 21:18

Ответ: Вопрос-Ответ (для новичков)
 
Так, вот ещё одна проблема. Сделал код сохранения карты и загрузки. НУ вот тут такая проблема: у меня есть 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

EvilChaotic 03.09.2010 23:49

Ответ: Вопрос-Ответ (для новичков)
 
Можешь удалять все, что сделал.

Код:

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

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

Ты изначально добавил траблы себе. Почему бы не хранить название меша в типе? А самое главное не завести папку в игре, где будут записаны типы деревьев, со всеми параметрами? И при запуске двига не читать эту папку для создания банка данных? Пока не поймешь, как делать код "правильно" нет смысла делать игры.

Nex 10.09.2010 10:15

Ответ: Вопрос-Ответ (для новичков)
 
Возможно ли рисовать 3д поверх 2д? Если да, то как?

is.SarCasm 10.09.2010 10:29

Ответ: Вопрос-Ответ (для новичков)
 
Не пробовал, но думаю нужно что то типа: "Поставить рендер в конец цикла"

SBJoker 10.09.2010 10:41

Ответ: Вопрос-Ответ (для новичков)
 
два вызова рендера, и режим камеры - без стирания фона.

Nex 12.09.2010 16:03

Ответ: Вопрос-Ответ (для новичков)
 
Цитата:

Сообщение от SBJoker (Сообщение 161491)
два вызова рендера, и режим камеры - без стирания фона.

Не получилось у меня. :(

И еще подскажите пожалуйста, как лучше всего делать "звезды" для больших пространств (без рисования на текстуре в игре с видом сверху)?
Создавать церез цикл определенное количество не вариант ибо будет много хлама за кадром и все равно когда нибудь "закончатся". Есть идея создавать динамически перед и по бокам игрока, а сзади удалять, но не знаю, как это сделать. :rolleyes:


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot