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)

impersonalis 14.01.2010 13:12

Ответ: Вопрос-Ответ (для новичков)
 
http://forum.boolean.name/showthread.php?t=3713
Blitz3D > Полезные функции
Нарезка большой строки по разделителю (перенос по словам))

Nex 14.01.2010 17:43

Ответ: Вопрос-Ответ (для новичков)
 
Выложите пожалуйста пример поиска пути (*AStar или с либой Diplomat'а) в 3d. А то сколько не пытаюсь все не могу понять, как в 3д правильно использовать, а именно как "привязать" к карте.

Reks888 14.01.2010 19:30

Ответ: Вопрос-Ответ (для новичков)
 
пфф... Если у тебя не Flight Simulator, то делишь весь Plane свой 3Д как двухмерную плоскость на квадраты удобного размера(например 10 энтитиX на 10 энтитиY). Задаешь им значения проходимо и непроходимо(желательно ручками) и как в обычном астаре ищешь путь. У тебя вроде летать юниты не должны? Или по лестницам лазеть?

Nex 14.01.2010 19:58

Ответ: Вопрос-Ответ (для новичков)
 
Это я знаю, но я не могу че то понять как "привязку" к карте делать. Я уже делал с библой Дипломата, но у меня только в центре карты поиск пути работал. =/

Reks888 15.01.2010 00:14

Ответ: Вопрос-Ответ (для новичков)
 
С библой дипломата не знаком, извини. Я бы накодил по-своему или стырил Отсюда.Там отличный астар с кучей коментов, статьей и встроенным редактором проходимости\непроходимости. Чу-чуть оптимизировать и можно вставлять в 3Д игру

Nex 15.01.2010 06:26

Ответ: Вопрос-Ответ (для новичков)
 
Ну мне бы и с *AStar'ом сгодилось... Я просто не понимаю как этот поиск пути делать (статьи читал по несколько раз).. :( Кому не тяжело дайте плиз код с поиском пути в 3д... :(

laaqiq 15.01.2010 21:08

Ответ: Вопрос-Ответ (для новичков)
 
Как сделать норм вид от 1 лица, чтоб камера была на уровне глаз?
Когда делаю обычным пивотом

Global player=CreatePivot()
PositionEntity player,0,150,0
EntityType player,TypePlayer
EntityRadius player, 50

camera=CreateCamera(player)
PositionEntity camera,0,0,0

то его радиус не дает даже в дверной проем пройти.

зы неругайте, тока учусь:)

Reks888 15.01.2010 21:19

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

laaqiq 15.01.2010 21:29

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

Управление камерой у меня мышкой.

KingMaks 15.01.2010 21:52

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

camera=CreateCamera(player)
PositionEntity camera,0,2,0

laaqiq 15.01.2010 22:08

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

Сообщение от KingMaks (Сообщение 133617)
laaqiq

camera=CreateCamera(player)
PositionEntity camera,0,2,0

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

Reks888 15.01.2010 22:10

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

ЗЫ Уху мне ник вернули!

laaqiq 15.01.2010 22:20

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

Const TypePlayer = 1, TypeWall = 2

Graphics3D 800,600
SetBuffer BackBuffer()
HidePointer

Global camera,campitch#,camyaw#,mvx#,mvy#,mvz#
Global camera=CreateCamera()
PositionEntity camera,0,0,0

Global player=CreatePivot(camera)
PositionEntity player,0,150,0
EntityType player,TypePlayer

CameraFogMode camera,1
CameraFogColor camera,100,200,255

Collisions TypePlayer, TypeWall, 2, 3

map=LoadCSM("test.csm","textures\")
ScaleEntity map, 0.5,0.5,0.5

While Not KeyHit(1)

mxspd#=MouseXSpeed()*0.2
myspd#=MouseYSpeed()*0.2

MoveMouse GraphicsWidth()/2,GraphicsHeight()/2

campitch=campitch+myspd
If campitch<-89 Then campitch=-89
If campitch>89 Then campitch=89
RotateEntity player,campitch,EntityYaw(player)-mxspd,0

If KeyDown( 203 )=True Then mvx=mvx-0.7
If KeyDown( 205 )=True Then mvx=mvx+0.7
If KeyDown( 200 )=True Then mvz=mvz+0.7
If KeyDown( 208 )=True Then mvz=mvz-0.7


mvy=mvy-5.1
If EntityCollided(player,TypeWall)
mvy=mvy+3.1
EndIf

mvx=mvx/1.2
mvy=mvy/1.2
mvz=mvz/1.2
MoveEntity player,mvx,0,mvz
TranslateEntity player,0,mvy,0

RenderWorld
UpdateWorld
Flip
Wend
End


Include "load_csm.bb"


но тогда управление не пашет(

KingMaks 15.01.2010 22:35

Ответ: Вопрос-Ответ (для новичков)
 
laaqiq ты создал камеру и пивот на 150 едениц выше камеры
не к чему хорошему ето не приведет

зачем тебе вопще пивот здался? зделай так:

player = createsphere()

camera = createcamera(player)
positionentity camera,0,2,0

у меня таким способом все отлично работает

Reks888 15.01.2010 22:37

Ответ: Вопрос-Ответ (для новичков)
 
1)Довольно неблагодарно копипастить весь код с includ'aми
2)Этот код вообще не может работать поскольку переменная Camera объявляется глобальной дважды
3)Зачем такие сложности? Куча переменных это хорошо, но ты же не физику движений делаешь? Код очень извращенный... Такое ощущение что ты его откуда-то скопировал(возможно, с физического бенчмарка) и теперь не можешь понять почему ничего не работает. Делай проще, и люди к тебе потянутся.

Цитата:

mvx=mvx/1.2
mvy=mvy/1.2
mvz=mvz/1.2
Вот это очень очень страшно. Мало того что делятся дробные числа так ещё и в цикле.
Вывод: переписывай код на этот раз без TranslateEntity, извращенных переменных, настроек камеры и т.д.
Дать правильный пример не могу - у меня нет твоей медии, а если я напишу по-своему то ты ничего не поймешь

laaqiq 15.01.2010 22:45

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

Reizel 15.01.2010 23:04

Ответ: Вопрос-Ответ (для новичков)
 
Делай поля ускорений по AX#,aAY#,aZ#, соответственно к aY# прибавляй отрицательную гравитацию. И прибавляй к координатам тела X#=X#+aX# и тд. Вот тебе и будет немного физики :)

KingMaks 16.01.2010 00:19

Ответ: Вопрос-Ответ (для новичков)
 
Кто знает как сменить стандартный ярлык Blitz3d?
где то , когда то видел но в то время не обратил внимание:)

ABTOMAT 16.01.2010 00:32

Ответ: Вопрос-Ответ (для новичков)
 
Прогой ResHacker.
Заранее подготовить ico (я использую Фотошоп + icon suchi).
Вскрыть ехешник Ресхакером и заменить (там несложно, разберёшься)

Есть другой вариант: проделать то же самое с блицовской runtime.dll, тогда всё, что ты будешь компилить, будет иметь ту иконку, которую ты сунул в эту dll.

laaqiq 16.01.2010 12:37

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

Сообщение от Reks888 (Сообщение 133630)
1)Довольно неблагодарно копипастить весь код с includ'aми
2)Этот код вообще не может работать поскольку переменная Camera объявляется глобальной дважды
3)Зачем такие сложности? Куча переменных это хорошо, но ты же не физику движений делаешь? Код очень извращенный... Такое ощущение что ты его откуда-то скопировал(возможно, с физического бенчмарка) и теперь не можешь понять почему ничего не работает. Делай проще, и люди к тебе потянутся.


Вот это очень очень страшно. Мало того что делятся дробные числа так ещё и в цикле.
Вывод: переписывай код на этот раз без TranslateEntity, извращенных переменных, настроек камеры и т.д.
Дать правильный пример не могу - у меня нет твоей медии, а если я напишу по-своему то ты ничего не поймешь

Напиши пожалуйста по своему, я постараюсь понять. А то нигде нет описания как сделать нормальное управление мышкой и нормальный, реалистичный вид от первого лица:(

Я не совсем понимаю что значит поля ускорений, покажите на примере.

Nex 16.01.2010 12:54

Ответ: Вопрос-Ответ (для новичков)
 
laaqiq, http://blitzetc.blitzmax.ru/index.ph...Person_Shooter

laaqiq 16.01.2010 13:21

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

Сообщение от Nex (Сообщение 133675)

Я читал, но там игрок представляет камеру приделанную к сферке 3х3х3 гуляющую по плоскому миру. У него как бы нет ног, ему не взобратся на горку,лесницу и т.п. У меня НЕ плоский мир, вот я и не понимаю как сделать реалистичный вид от 1 лица.

RlexGm 16.01.2010 14:09

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

Global Player=CreateSphere()
Global CamPlayer=CreateCamera(Player)
PositionEntity Player,50,60,60
EntityRadius player,8,30

MoveEntity CamPlayer,0,10,0

Цитата:

Сообщение от laaqiq (Сообщение 133678)
У него как бы нет ног, ему не взобратся на горку,лесницу и т.п.

Чтобы сделать так что игрок поднимался по листнице, просто надо при колизии назначить скольжение т.е. 3. И он при каком то соотношений( хз каком) высоты ступеньки скользит вверх, но при значительных высотах например стол xD он не будет тянутся вверх

laaqiq 16.01.2010 14:27

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

Код:

While Not KeyHit(1)

  mxspd#=MouseXSpeed()*0.2
  myspd#=MouseYSpeed()*0.2

  MoveMouse GraphicsWidth()/2,GraphicsHeight()/2

  campitch=campitch+myspd
  If campitch<-89 Then campitch=-89
  If campitch>89 Then campitch=89
  RotateEntity player,campitch,EntityYaw(player)-mxspd,0
 
  If KeyDown( 203 )=True Then mvx=mvx-0.7
  If KeyDown( 205 )=True Then mvx=mvx+0.7
  If KeyDown( 200 )=True Then mvz=mvz+0.7
  If KeyDown( 208 )=True Then mvz=mvz-0.7


  mvy=mvy-5.1
  If EntityCollided(player,TypeWall)
    mvy=mvy+3.1
  EndIf
 
  mvx=mvx/1.2
  mvy=mvy/1.2
  mvz=mvz/1.2
  MoveEntity player,mvx,0,mvz
  TranslateEntity player,0,mvy,0

RenderWorld
UpdateWorld
Flip
Wend
End

МувЕнтити работает, но камера хоть и переместилась выше все равно крутится относительно player'a.

зы Знаю что код корявый, но другого незнаю(

RlexGm 16.01.2010 14:32

Ответ: Вопрос-Ответ (для новичков)
 
я даже догадываюсь где ты этот код откопал :)
Цитата:

Сообщение от laaqiq (Сообщение 133688)

МувЕнтити работает, но камера хоть и переместилась выше все равно крутится относительно player'a.

а тебе как нужно, объясни я чето не очень понял

laaqiq 16.01.2010 14:44

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

Сообщение от EaNub (Сообщение 133689)
я даже догадываюсь где ты этот код откопал :)


а тебе как нужно, объясни я чето не очень понял

Как же обьяснить то:??
Я хочу сделать бродилку. Мне надо, чтобы камера была на уровне головы и игрок мог передвигатся как во всех нормальных FPS.

Reizel 16.01.2010 15:07

Ответ: Вопрос-Ответ (для новичков)
 
делай низкополигональную большую(относительно) сферу, ставь ей альфу в 0, коллюзию со скольжением, камеру к ней припаренть, поставь по оси Y чуть выше, т.е: Camera=CreateCamera(Sphere):Positionentity Camera,0,10,0
Собственно когда я делал так все работало :)

RlexGm 16.01.2010 15:43

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

RotateEntity Camera,campitch,0,0
RotateEntity Player,0,EntityYaw(player)-mxspd,0

KingMaks 16.01.2010 15:44

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

Код:

MoveMouse CursorPosX,CursorPosY
TurnEntity player,0,-x,0
TurnEntity camera,y,0,0
limit = EntityPitch(camera,True)
If limit < -80 Then RotateEntity camera,-80,0,0
If limit > 80 Then RotateEntity camera,80,0,0
If KeyDown(17) Then MoveEntity player,0,0,0.1
If KeyDown(31) Then MoveEntity player,0,0,-0.1
If KeyDown(30) Then MoveEntity player,-0.1,0,0
If KeyDown(32) Then MoveEntity player,0.1,0,0

где икс и игрек скорость мышки
лимит ето угол поворота камеры по оси икс

Nex 16.01.2010 15:48

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

laaqiq 16.01.2010 17:16

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

Сообщение от EaNub (Сообщение 133701)
если у тя возникает проблема типа смотриш вниз и идеш вперед и он опускается вниз , куда смотрит камера?я решил вопрос так:
игрок крутиться только по горизонтали, а камера только по вертикали:

RotateEntity Camera,campitch,0,0
RotateEntity Player,0,EntityYaw(player)-mxspd,0

Вот это реально помогло! Спс:super:

is.SarCasm 18.01.2010 23:44

Ответ: Вопрос-Ответ (для новичков)
 
кто нибудь из вас мне обьяснит почему блитз не находит чилды в .b3d (сравнивал с 3ds), а я так верил что этот формат избаранный!

IGR 19.01.2010 00:06

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

is.SarCasm 19.01.2010 00:10

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

Graphics3D 800,600,32,2
SetBuffer BackBuffer()
m = LoadAnimMesh("1.3ds")
cam = CreateCamera()
Repeat
RenderWorld
UpdateWorld
Text 5,5,""+CountChildren(m)
Flip()
Until x=124
End
2 одинаковые модели
первая - 3дс вторая - б3д в 3дс находит 42 чилда а в б3д - 0!

Reks888 19.01.2010 00:13

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

IGR 19.01.2010 00:14

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

IGR 19.01.2010 00:17

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

Сообщение от Reks888 (Сообщение 134036)
Судя по спасибо Андроида под первым сообщением игоря, тот тоже столкнулся с этой проблемой.

Спасибо, кэп !! :)

is.SarCasm 19.01.2010 00:22

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

Судя по спасибо Андроида под первым сообщением игоря, тот тоже столкнулся с этой проблемой.
Знаеш, если бы я тебе до этого не рассказал что мы с андроидом не можем разобраться с чилдами, это полезно тебе мало чего сказало

IGR
Я ваще юзал унылый милкшейп.

Reks888 19.01.2010 00:27

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

Сообщение от IGR (Сообщение 134038)
Спасибо, кэп !! :)

Кэп всегда встает на защиту беззащитных и непонимаемых!

Задам заодно вопрос о проблеме, с которой встретился недавно, но ещё сильно не размышлял по ее поводу. Вот кусок кода:
For kubik.cube=Each cube
...
...
...
.........................................
If kubik\hunger < 0 Then
FreeEntity kubik\model
FreeEntity kubik\waypont
Delete kubik
EndIf
Next
model и waypoint - все филды которые содержат ентити(тоесть кроме них больше таковых нет(ТОЧнО НЕТ(!))). Стоит проверка эта в конце цикла For...each и вроде никаких проблем не вызывает. Это не мешает ей выдавать мне Memory Acess Violation. Выдает его точно и нЭзаперечно именно это условие(проверено удалением,DebugLog и Stop. Сомнений не вызывает). Собственно сам вопрос: Нужно ли что-то ещё очищать кроме ентитей типа перед удалением элемента типа(сори если неправильно сформулировал)? Если нет - то почему не работает?

IGR 19.01.2010 00:41

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

Reks888 19.01.2010 00:47

Ответ: Вопрос-Ответ (для новичков)
 
Mav на Delete kubik
Код мелкий - 300 строк. Сегодня не выложу - спать хочу, а код весь говно если без редакции). Завтра в 4-5 дня по Украине жди...А ещё лучше напиши тут если ты действительно хочешь видеть это ;)

IGR 19.01.2010 00:58

Ответ: Вопрос-Ответ (для новичков)
 
черд, какой мав ?? Нада включить дебагер и оно напишет что случилось (в лучшем случаее) !! А код мне мне зачем, я думал ты в другом месте обращяешся к елементу !!

H@NON 19.01.2010 01:03

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

Graphics 640, 480, 32, 2
SetBuffer BackBuffer()

Local model = LoadAnimMesh("mesh.b3d")

Global maxChild

ChildsCount(model)

Print maxChild
WaitKey()
End


Function ChildsCount(m)
    Local ww, i
    For i=1 To CountChildren(m)
        maxChild = maxChild + 1
        ww=GetChild(m,i)
        ChildsCount(ww)
    Next
End Function

Если по-прежнему выдает 0 будь уверен, что проблема в модельке и нужно ковырять как ты ее экспортировал.

is.SarCasm 19.01.2010 21:31

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

Function CreateCube1()
p.cube = new cube
p\entity = createcube()
NameEnity p\entity,Handle(p)
end FUnction
Что быстрее\лучше ?

Цитата:

Function UpdateCube's()
for p.cube = Each cube
If EntityDistance(p\entity,sphere)<10 then
Beg(p\entity)
endif
next
end Function
или
Цитата:

my.cube = Object.cube(EntityName(ENtityPick sphere,10))
Beg(my\entity)
И вообще будут ли они работать?:-D

IGR 19.01.2010 21:46

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

is.SarCasm 19.01.2010 21:49

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

2 вариант лучше !!
Знал)
Цитата:

тут ты избавляешся от перебора и проверки !!
еее (типо радость)
Цитата:

если его правильно использовать !!
Это как? восклицательные знаки могут сказать мне что Я непрвельно использовал :(

IGR 19.01.2010 22:03

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

Это как? восклицательные знаки могут сказать мне что Я непрвельно использовал
в первом варианте "стопудово" !! а вот в тором можеш не получить my.cube если в EntityName будет фигня какая-то !!
я это имел ввиду !!

Randomize 19.01.2010 22:09

Ответ: Вопрос-Ответ (для новичков)
 
Чилды парсим рекурсией!
У чилдов бывают чилды!
PHP код:

Function ParseChilds(ent
    For 
i=1 To CountChildren(ent
        
Local child=GetChild(ent,i
        If 
child<>
            
If CountChildren(child)>0 Then ParseChilds(child
            ; 
Тут делаем чтото полезное 
            EntityAlpha
(child,.5
        EndIf 
    
Next 
End 
Function 


shyrikkk 20.01.2010 01:31

НАРОД помогите задолбался вспотел !!!
 
Вложений: 1
как астановить анимированный спрайт !!!???????
тоесть что б один раз проигрался до 30го кадра ???

Жека 20.01.2010 06:52

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

Код:

frame=MilliSecs()/50 Mod 30
if(frame > 29) frame = 29


cancel 20.01.2010 20:28

Ответ: Вопрос-Ответ (для новичков)
 
Работаю тут потихонку (когда настроение) над свойм GTA2 и проблема человеками.

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

А у меня если с стеной или чем угодно "collision" тогда реско поворот на 360 градусов.

Вообще не реально, ходят как столбы.


Как сделать плавный поворот и предсказать что вот уже стенка или конец дороги идет и пора переворачивать??

Reks888 20.01.2010 20:38

Ответ: Вопрос-Ответ (для новичков)
 
Вэйпоинты... по-моему так было в ГТА 2

cancel 20.01.2010 20:46

Ответ: Вопрос-Ответ (для новичков)
 
В GTA2 каждый TILE или скажем BLOCK имеет свои "флаги": PAVEMENT, ROAD, FIELD, AIR.
Все это можно изменить в редакторе карт.

На FIELD людей и машин нет, на ROAD есть машины, нa PAVEMENT люди. Bообщем по этим "флaгам" игра знает что и где.

Для машин еще указатели напрявления
http://img682.imageshack.us/img682/9606/arrows.png

Blender 20.01.2010 20:46

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

Сообщение от cancel (Сообщение 134171)
Работаю тут потихонку (когда настроение) над свойм GTA2 и проблема человеками.

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

А у меня если с стеной или чем угодно "collision" тогда реско поворот на 360 градусов.

Вообще не реально, ходят как столбы.


Как сделать плавный поворот и предсказать что вот уже стенка или конец дороги идет и пора переворачивать??

В примерах физикса есть пример :
вот посмотри может поможет
Код:


Graphics3D 640,480,32,2
SetBuffer BackBuffer()
SeedRnd MilliSecs ()

;Lights
light01=CreateLight()
PositionEntity light01,15,66,15

;Plane
plane=CreatePlane()
text01=LoadTexture("..\media\tile.jpg")
ScaleTexture Text01,2,2
EntityTexture plane,text01

;Camera
cam=CreateCamera()
PositionEntity cam,20,60,-40
RotateEntity cam,60,20,0

;PX
PxCreateWorld(1, "key")                                       
pxSetGravity(0,-10,0)                               


;--------------Wall-----------
cu1=CreateCube();
ScaleEntity cu1,50,2,1
PositionEntity cu1,0,1,50
cu1_body = pxBodyCreateCube(50,2,1,0)
pxBodySetPosition (cu1_body,0,1,50)

cu2=CreateCube();
ScaleEntity cu2,50,2,1
PositionEntity cu2,0,1,-50
cu2_body = pxBodyCreateCube(50,2,1,0)
pxBodySetPosition (cu2_body,0,1,-50)

cu3=CreateCube();
ScaleEntity cu3,1,2,50
PositionEntity cu3,-50,1,0
cu3_body = pxBodyCreateCube(1,2,50,0)
pxBodySetPosition (cu3_body,-50,1,0)

cu4=CreateCube();
ScaleEntity cu4,1,2,50
PositionEntity cu4,50,1,0
cu4_body = pxBodyCreateCube(1,2,50,0)
pxBodySetPosition (cu4_body,50,1,0)

For i=0 To 30
        Create_Px_Cube()
Next

;-------------Trigger---------------
Create_Px_AICube()

;--------------- speed-----------
  ang_speed% = Rand(0,1)
  ang_speed = 1- 2*ang_speed


 ;-------------Main Loop-------
Repeat

If KeyHit(57) Create_Px_AICube()


time=MilliSecs ()
pxRenderPhysic(30,0)
Update_Px_Cube()
Update_Px_AICube()
pxUpdateTriggers()
New_time=MilliSecs ()-time


UpdateWorld()
RenderWorld()
  frames=frames+1 
  If MilliSecs()-render_time=>1000  fps1=frames : frames=0 : render_time=MilliSecs()
 Text 10,50,"FPS: "+fps1+"  dll time: "+New_time
 Text 10,10,"Space - Add Ai Cube"

Flip

Until KeyHit(1)
End

Type Px_Cube
        Field cube_body%
        Field cube_mesh%
        Field red#, green#, blue#
End Type

Type Px_AICube
        Field cube_body%, cube_mesh%
        Field trigger%, triger_mesh%
        Field ang_speed
End Type

 Function Create_Px_AICube()
  acu.Px_AICube = New Px_AICube

        acu\cube_mesh = CreateCube();
        ScaleEntity acu\cube_mesh,2,2,2
        acu\cube_body = pxBodyCreateCube(2,2,2,10)
        pxBodySetPosition (acu\cube_body,0,1,0)
        pxBodySetFrozenRotX(acu\cube_body, 1)
        pxBodySetFrozenRotZ(acu\cube_body, 1)
        pxBodySetRotation(acu\cube_body, 0, Rand(-180,180), 0)

        acu\triger_mesh = CreateCube(acu\cube_mesh)
        ScaleEntity acu\triger_mesh,0.7,0.7,3
        EntityColor acu\triger_mesh,0,200,0
        EntityAlpha acu\triger_mesh,0.5
        PositionEntity acu\triger_mesh,0,0,2.5
        acu\trigger = pxTriggerCreateCube(1.4,1.4,6)
        pxBodySetCollisionGroup(acu\trigger, 1)
        pxBodySetCollisionGroupFlag(1, 1, 0)

  acu\ang_speed% = Rand(0,1)
  acu\ang_speed = 1- 2*acu\ang_speed
 End Function

Function Update_Px_AICube()
        For acu.Px_AICube = Each Px_AICube
                pxBodySetEntity( acu\cube_mesh, acu\cube_body)
                pxTriggerSetPosition(acu\trigger, EntityX#(acu\triger_mesh,1), EntityY#(acu\triger_mesh,1), EntityZ#(acu\triger_mesh,1))
                pxTriggerSetRotation(acu\trigger, 0, EntityYaw#(acu\triger_mesh,1), 0)

                pxBodySetLocalLinearSpeed(acu\cube_body,0, 0, 4)
                If (pxTriggerGetBody(acu\trigger, 1))
                        pxBodySetAngularSpeed(acu\cube_body,0, acu\ang_speed*1, 0)
                        EntityColor acu\triger_mesh,0,0,200
                Else
                  acu\ang_speed = Rand(0,1)
                  acu\ang_speed = 1- 2*acu\ang_speed
                  EntityColor acu\triger_mesh,0,200,0
                EndIf
        Next
End Function



 Function Create_Px_Cube()
  ocu.Px_Cube = New Px_Cube

        y# = Rnd (1,3)
        x# = Rnd (1,3)
        z# = Rnd (1,3)
  ocu\cube_mesh=CreateCube ()
  ScaleMesh ocu\cube_mesh,x,y,z
  ocu\red = Rand(0,100)
  ocu\green = Rand(0,255)
  ocu\blue = Rand(0,255)
  EntityColor ocu\cube_mesh, ocu\red#, ocu\green#, ocu\blue#
  ocu\cube_body=PxBodyCreateCube(x,y,z, 10)

  pxBodySetPosition(ocu\cube_body,Rand(-45,45),30,Rand(-45,45))

 End Function

Function Update_Px_Cube()
        For ocu.Px_Cube = Each Px_Cube
                If pxTriggerGetBodyTrigger(ocu\cube_body)
                        EntityColor ocu\cube_mesh,255,0,0
                Else
                        EntityColor ocu\cube_mesh, ocu\red#, ocu\green#, ocu\blue#
                EndIf
          pxBodySetEntity(ocu\cube_mesh, ocu\cube_body)
        Next
End Function


cancel 20.01.2010 20:59

Ответ: Вопрос-Ответ (для новичков)
 
Спасибо Blender, именно то что нужно!

Хотя имеет баги
http://img64.imageshack.us/img64/722/buggyf.png

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

А в каком физиксе именно?

Reks888 20.01.2010 21:01

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

Сообщение от cancel (Сообщение 134173)
В GTA2 каждый TILE или скажем BLOCK имеет свои "флаги": PAVEMENT, ROAD, FIELD, AIR.
Все это можно изменить в редакторе карт.

На FIELD людей и машин нет, на ROAD есть машины, нa PAVEMENT люди. Bообщем по этим "флaгам" игра знает что и где.

Для машин еще указатели напрявления
http://img682.imageshack.us/img682/9606/arrows.png

Если все знаешь, то зачем спрашивать?

ABTOMAT 20.01.2010 21:03

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

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

cancel 20.01.2010 21:05

Ответ: Вопрос-Ответ (для новичков)
 
Reks
Ну этого просто было мало. Не умею еще это использовать для себя.
Алгоритмика понимаете. Учится надо еще всему этому.


А код Blendera помог. Хоть это решено.

KingMaks 21.01.2010 00:01

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

Но тут я начал делать анимацию бега с оружием, анимацию прыжка с оружием и т.д.

Можно ли привязать модель оружия к кости Игрока, тоесть
допустим к кости ладошки, чтоб оружие следовало за анимацией ладошки и игрок какбы держал его??

IGR 21.01.2010 00:20

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

shyrikkk 21.01.2010 00:57

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

Сообщение от Жека (Сообщение 134136)
Допиши строчку кода тут:

Код:

frame=MilliSecs()/50 Mod 30
if(frame > 29) frame = 29


неполучаеться !!! не выходит !!!! код у тебя не правельный !!!

Жека 21.01.2010 07:31

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

Сообщение от shyrikkk (Сообщение 134209)
неполучаеться !!! не выходит !!!! код у тебя не правельный !!!

1. Ты грузил текстуру в цикле - это косяк.
2. Использованная тобой привязка к миллисекундам будет показывать не с нулевого кадра, а неизвестно с какого.

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


Код:

Graphics3D 640,480
SetBuffer BackBuffer()
camera=CreateCamera()
light=CreateLight()
RotateEntity light,90,0,0
Global sprite=CreateSprite ()
PositionEntity sprite,0,0,5

Global anim_tex
Global onAnimate = True
Global timeStart
Global frame

trLoad()

While Not KeyDown( 1 )

If(KeyHit(57) > 0)
        onAnimate = True
        frame = 0
EndIf

UpdateWorld
trUpdate()
RenderWorld
Flip

Wend

End


Function trLoad()
        anim_tex = LoadAnimTexture( "b.jpg",1,128,128,0,30 )
        EntityBlend sprite ,3
        EntityTexture sprite,anim_tex,0
        timeStart = MilliSecs()
End Function


Function trUpdate()

        If(onAnimate = True)
                If(MilliSecs() - timeStart >= 50)
                        EntityTexture sprite,anim_tex,frame
                        frame = frame + 1
                        If(frame=29) onAnimate = False                       
                        timeStart = MilliSecs()                       
                EndIf
        EndIf
End Function


cancel 21.01.2010 23:41

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


И у машины видно тень.


Конечно там никакого солнце нету. Проста имитация что свет из верхнего левого угла. Так что тени всегда на одной стороне.

Сама тень по форме спрайта. Как такое на Blitz или Xors3D сделать?

На OpenGL есть пример там легко.
Там берут ту же картинку и как та маскируют и рисуют с маленким оффсетом

ABTOMAT 22.01.2010 00:00

Ответ: Вопрос-Ответ (для новичков)
 
Ты картинки как рисуешь? Простыми 2Д-средствами типа DrawImage и иже с ним? Тогда готовьсо к гемору =)
Если спрайтами в 3Д, то попроще, но, по ходу, придётся текстуры для теней генерировать отдельно, хотя бы из основной текстуры объекта ;( Сделать тень отдельным спрайтом с оффсетом и чуть пониже спрайта объекта и рендерить так.
Тут главное придумать алгоритм, который из цветной текстуры спрайта сделает ч/б текстуру, где чёрное - непрозрачные области, белое - прозрачные.
Это даже не сложно сделать чтоб работало, сложно чтоб ощутимо много времени при загрузке не отнимало. И анимировать теневой придётся отдельно.
Тогда Multiply blend спасёт отца русской демократии.
З.Ы.
Цитата:

Сообщение от shyrikkk (Сообщение 134209)
неполучаеться !!! не выходит !!!! код у тебя не правельный !!!

Это перл :-D Конечно, у тебя неполучаетЬся потому что дураки написали тебе не_правЕльный код.


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

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