Показать сообщение отдельно
Старый 07.07.2010, 11:05   #969
RlexGm
ПроЭктировщик
 
Регистрация: 11.11.2009
Сообщений: 172
Написано 17 полезных сообщений
(для 34 пользователей)
Ответ: Вопрос-Ответ (для новичков)

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

Вот решил дополнить ещё своим гавнокодом, может баги хотя бы удастся устранить
;нужно подилить всё на части: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 отключает гравитацию) но сдесь появлятся первый(баг, просчёт и др хз чё это) если же мы сталкиваемся с потолком то мы не как не можем достичь нужной позиции и можем летать по комнате , я думаю нужно это нужно решать не отключением грави, а чем то еще
И второе. Если ты сидя прополз ниже, то есть skProsh= больше чем надо , то при отпускании он начнёт тебя возращать на позицию Y с которой ты начал приседать.И если залез сидя выше , то вроде он провалиться.

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