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)

KingMaks 06.01.2010 23:39

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

1.Есть ли команда типа EntityCollided(player,typesolid) - если игрок столкнулся с твердым телом.Только примерно вот так:
EntityCollidedY(player,typesolid) чтобы проверяло столкновение игрока с твердым телом по оси Y ? Если нету то как ето осущиствить?

2.Есть ли команда которая определяет высоту?Тоесть
допустим: если высота ступеньки 0.1 то запрыгнуть на ету ступеньку.

is.SarCasm 06.01.2010 23:49

Ответ: Вопрос-Ответ (для новичков)
 
KingMaks
2) EntityY(entity) - узнает положение объекта по оси Y.

KingMaks 06.01.2010 23:56

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

Сообщение от Igorian (Сообщение 132431)
2) EntityY(entity) - узнает положение объекта по оси Y.

положение обьекта. а мне нужно высоту обьекта узнать

Reizel 07.01.2010 00:09

Ответ: Вопрос-Ответ (для новичков)
 
Эээ KingMaks ты встань на место блица - откуда ему то знать какая там высота у объекта?? Может это вообще шар...
но можно узнать скейл объекта по оси Y, но это через getMatElement(), думаю если товарищ H@non будет здесь, он тебе поможет :)

KingMaks 07.01.2010 00:36

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

Код:

If jump = 0 Then
If KeyDown(57) Then gravity = 0.1 : gravity2 = 0.03:jump = 1
End If
If Not EntityCollided(player,typesolid) Then jump = 1
If jump = 1 Then gravity = gravity + gravity2: gravity2 =gravity2 - 0.002:jump = 1
If EntityCollided (player,typesolid) Then gravity = 0:gravity2 = 0:jump = 0
TranslateEntity player,0,gravity/4,0
End If

как можно заметить при столкновении с любым твердым обьектом
гравитация = 0, тоесть даже если игрок врезаеться в стену гравитация = 0.
А мне нужно только чтобы если игрок сталкиваеться с полом тогда гравитация = 0. А пристолкновении со стенкой игрок скользит вниз под действием гравитации.

Hurrit 07.01.2010 08:25

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

H@NON 07.01.2010 11:45

Ответ: Вопрос-Ответ (для новичков)
 
1) Использовать нормаль от столкновения. Примерно так :
Код:

InGround = false
entCol = EntityCollided(ent, ColType)
if entCol <> 0 then
      For n = 1 to CountCollisions(ent)
            if CollisionNY(ent, n) > 0.5 Then
                  InGround = True
                  Exit
            EndIf
      Next
EndIf
If InGround = true Then
      перемещение
EndIf

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

Reizel 07.01.2010 13:48

Ответ: Вопрос-Ответ (для новичков)
 
Блин, сколько не читаю посты H@non'а, все нахожу новые команды :)

RlexGm 07.01.2010 13:48

Ответ: Вопрос-Ответ (для новичков)
 
Спасибо, заработало =)
Вот только еще очередная проблебка...
он меняет разрешение только что при условии: предыдущее разрешение было 800x600 ... В принцепи меня это устраивает, у меня cs1.6. тоже самое,я написал код чтоб было опять 800x600
If XERK%=0 or YERK=0
XERK%=800
YERK%=600
EndIf
Но это надо же писать в цикле, а определение разрешения должно стоять
перед Graphics3D , помогите!Можно ли это реализовать?

Reizel 07.01.2010 13:56

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

H@NON 07.01.2010 14:21

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

KingMaks 07.01.2010 17:01

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

InGround = 0
EntCol = EntityCollided(player,typesolid)
If EntCol <> 0 Then
  For n = 1 To CountCollisions(player)
    If CollisionNX(player,n) > 0.5 Then
      InGround = 1
      Exit
    End If
  Next
End If

В етом коде при столкновении с землей InGround серовно равен нулю
а нужна единица

KingMaks 07.01.2010 17:13

Ответ: Вопрос-Ответ (для новичков)
 
Ох вот я протупил CollisionNX а у тебя CollisionNY.
Спасиба вопщем.Выручил мою гравитацию

shyrikkk 07.01.2010 19:28

ОЧЕНЬ МОЩНЫЙ ВОПРОС !!!!!!!!!!!!!!!!!!!!!
 
Люди кто знает подскажите пожалусто !!!
Что большет ест ресурсов с текстурами спрайт (CreateSprite() ) или
3D обьект с текстурами (толщина обьекта равна толщена спрайта )
площади обоих одинаковы

кто больше есть ресурсы ?????????????????

H@NON 07.01.2010 19:48

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


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

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