Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 30.01.2012, 23:31   #1
Devilox
ПроЭктировщик
 
Аватар для Devilox
 
Регистрация: 14.01.2012
Адрес: Зеленоград
Сообщений: 192
Написано 5 полезных сообщений
(для 9 пользователей)
Прыжки

День добрый! У меня возникла проблема с прыжками игрока. Дело в том, что я прописал код, позволяющий совершить прыжок в том случае, если игрок соприкасается с землёй или препятствием, а полёт будет продолжаться до тех пор, пока он не коснётся опять. Однако, если прижаться вплотную к препятствию(стене) и нажать пробел , программа воспринимает это как команду "остановить полёт". Подскажите, пожалуйста, как этого избежать. Исходник я выложил.
Вложения
Тип файла: rar Прыжок.rar (602.2 Кб, 461 просмотров)
(Offline)
 
Ответить с цитированием
Старый 31.01.2012, 00:30   #2
L-ee-X
Разработчик
 
Аватар для L-ee-X
 
Регистрация: 06.06.2011
Адрес: Ирк. обл.
Сообщений: 541
Написано 133 полезных сообщений
(для 220 пользователей)
Ответ: Прыжки

Проверяй столкновение по оси Y и только тогда активируй команду прыжок!
CollisionNY
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо L-ee-X за это полезное сообщение:
Colossus (31.01.2012), Devilox (31.01.2012), Mr_F_ (03.02.2012)
Старый 03.02.2012, 18:03   #3
Devilox
ПроЭктировщик
 
Аватар для Devilox
 
Регистрация: 14.01.2012
Адрес: Зеленоград
Сообщений: 192
Написано 5 полезных сообщений
(для 9 пользователей)
Ответ: Прыжки

Всё "как бы работает", однако если вплотную прижаться к стене и пару раз попрыгать, то скорость падения увеличавается, а игрок перестаёт прыгать, что делать???
Вложения
Тип файла: rar Game.rar (1.20 Мб, 458 просмотров)

Последний раз редактировалось Devilox, 03.02.2012 в 21:52.
(Offline)
 
Ответить с цитированием
Старый 05.02.2012, 09:28   #4
Skaner
ПроЭктировщик
 
Аватар для Skaner
 
Регистрация: 30.01.2012
Сообщений: 162
Написано 40 полезных сообщений
(для 86 пользователей)
Ответ: Прыжки

у меня где-то был пример реализации прыжка... Если надо, могу найти...
__________________
Blitz3D - СИЛА!
(Offline)
 
Ответить с цитированием
Старый 05.02.2012, 13:59   #5
Devilox
ПроЭктировщик
 
Аватар для Devilox
 
Регистрация: 14.01.2012
Адрес: Зеленоград
Сообщений: 192
Написано 5 полезных сообщений
(для 9 пользователей)
Ответ: Прыжки

Да, неплохо было бы
(Offline)
 
Ответить с цитированием
Старый 06.02.2012, 14:57   #6
Kudesnic
Нуждающийся
 
Аватар для Kudesnic
 
Регистрация: 27.08.2010
Адрес: Лен. область
Сообщений: 58
Написано 21 полезных сообщений
(для 50 пользователей)
Ответ: Прыжки

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

Const usertype=2,typelevel=1,heghtjump=2

Global user,userhead,cam,floorpivot
Global modejump,mvx#,mvy#,mvz#,grav#=.1
Global campitch#
Global plane,cube,light

Graphics3D 800,600,32,2
plane=CreateCube()
EntityColor plane,200,150,100
ScaleEntity plane,100,1,100
PositionEntity plane,0,-10,0
EntityType plane,typelevel
cube=CreateCube()
ScaleEntity cube,10,10,1
PositionEntity cube,0,0,5
EntityType cube,typelevel
EntityColor cube,100,150,200
light=CreateLight(1)
RotateEntity light,45,50,0
createuser()
Collisions usertype,typelevel,2,2

While Not KeyDown(1)
upduser()
UpdateWorld
RenderWorld
Flip
Cls
Wend
End


;*************************FUNCTIONS*********************************
Function createuser()
user=CreateSphere()
EntityAlpha user,0
userhead=CreatePivot(user)
cam=CreateCamera(userhead)
floorpivot=CreatePivot(user)
EntityType user,usertype
EntityRadius user,2,1.5
EntityType floorpivot,usertype
EntityRadius floorpivot,1
EntityType userhead,usertype
EntityRadius userhead,1
End Function 

Function uroven#(en)
If EntityCollided(en,typelevel)
If CollisionNX(en,typelevel)>CollisionNZ(en,typelevel) Return Abs(CollisionNX(en,typelevel)) Else Return Abs(CollisionNZ(en,typelevel))
EndIf
End Function

Function gravi()
jumpuser()
If modejump<>2
	mvy=Abs(mvy)
	If Not EntityCollided(floorpivot,typelevel)
		mvy=mvy+grav
	Else
		mvy=mvy/2
	EndIf
Else
mvy=-Abs(mvy)
EndIf
TranslateEntity user,0,-mvy,0
End Function

Function jumpuser()
If EntityCollided(floorpivot,typelevel)<>0 And Abs(uroven(floorpivot))<.5 And modejump<>2 And modejump<>4 Then  modejump=1
If KeyDown(57) And modejump=1 Then mvy=heghtjump:modejump=2
If KeyDown(57) And modejump=2 Then mvy=mvy/1+grav If Abs(mvy)<.05 Or EntityCollided(userhead,typelevel)<>0 Then mvy=grav:modejump=4
If modejump=2 And (Not KeyDown(57)) mvy=grav: modejump=0
If modejump=4 And (Not KeyDown(57)) modejump=0
End Function

Function upduser()
v#=.1
vm#=.5
mousespeed#=.20

mxspd#=MouseXSpeed()*mousespeed
myspd#=MouseYSpeed()*mousespeed
	
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2

campitch=campitch+myspd
If campitch<-85 Then campitch=-85
If campitch>85 Then campitch=85
RotateEntity user,0,EntityYaw(user)-mxspd,0
RotateEntity userhead,campitch,0,0

If KeyDown(30) Then a=180:b=1
If KeyDown(32) Then a=0:b=1
If KeyDown(17) Then a=90:b=1
If KeyDown(31) Then a=270:b=1
If KeyDown(17) And KeyDown (30) Then a=135:b=1
If KeyDown(17) And KeyDown (32) Then a=45:b=1
If KeyDown(31) And KeyDown (30) Then a=225:b=1
If KeyDown(31) And KeyDown (32) Then a=315:b=1
If b=1 
	mvx=mvx+Cos(a)*v:If Abs(mvx)>vm mvx=vm*Sgn(mvx)
	mvz=mvz+Sin(a)*v:If Abs(mvz)>vm mvz=vm*Sgn(mvz)
EndIf 

mvx=mvx/1.25;1.2
mvz=mvz/1.25;1.2

PositionEntity user,EntityX(userhead,True),EntityY(user),EntityZ(userhead,True),True
MoveEntity user,mvx,0,mvz
gravi()
userhead()
End Function

Function userhead()
PositionEntity userhead,0,3,0
PositionEntity floorpivot,0,-2,0
End Function
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Devilox (06.02.2012)
Старый 06.02.2012, 15:39   #7
Devilox
ПроЭктировщик
 
Аватар для Devilox
 
Регистрация: 14.01.2012
Адрес: Зеленоград
Сообщений: 192
Написано 5 полезных сообщений
(для 9 пользователей)
Ответ: Прыжки

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

Последний раз редактировалось Devilox, 06.02.2012 в 22:31. Причина: несовсем работает:(
(Offline)
 
Ответить с цитированием
Старый 06.02.2012, 22:58   #8
Devilox
ПроЭктировщик
 
Аватар для Devilox
 
Регистрация: 14.01.2012
Адрес: Зеленоград
Сообщений: 192
Написано 5 полезных сообщений
(для 9 пользователей)
Ответ: Прыжки

иногда, если подпрыгнуть при такой проблеме, то игрок снова упадёт, а иногда даже подпрыгнуть нельзя
(Offline)
 
Ответить с цитированием
Старый 07.02.2012, 00:17   #9
Kudesnic
Нуждающийся
 
Аватар для Kudesnic
 
Регистрация: 27.08.2010
Адрес: Лен. область
Сообщений: 58
Написано 21 полезных сообщений
(для 50 пользователей)
Ответ: Прыжки

Сообщение от Devilox Посмотреть сообщение
иногда, когда, я запрыгиваю на препятствие, а потом ухожу с него с другой стороны, однако игрок не падает, в чём тут проблема?
Честно говоря, у меня такого бага не было.Возможно не все элементы этого кода ты используешь.
Если не трудно, выложи сюда свой код с твоим препятствием. Самому интересно почему так.
(Offline)
 
Ответить с цитированием
Старый 07.02.2012, 16:52   #10
Devilox
ПроЭктировщик
 
Аватар для Devilox
 
Регистрация: 14.01.2012
Адрес: Зеленоград
Сообщений: 192
Написано 5 полезных сообщений
(для 9 пользователей)
Ответ: Прыжки

Вот, попробуй запрыгнуть на препятствие, прижаться к стене и сойти с него...может всё потому, что я высоту прыжка изменил?
Вложения
Тип файла: rar Game.rar (1.46 Мб, 458 просмотров)
(Offline)
 
Ответить с цитированием
Старый 07.02.2012, 20:58   #11
Kudesnic
Нуждающийся
 
Аватар для Kudesnic
 
Регистрация: 27.08.2010
Адрес: Лен. область
Сообщений: 58
Написано 21 полезных сообщений
(для 50 пользователей)
Ответ: Прыжки

Я нашел причину
В функции userhead() исправь PositionEntity floorpivot,0,-2,0 на PositionEntity floorpivot,0,-1,0
Извиняюсь да неудобства.
(Offline)
 
Ответить с цитированием
Старый 07.02.2012, 21:21   #12
Devilox
ПроЭктировщик
 
Аватар для Devilox
 
Регистрация: 14.01.2012
Адрес: Зеленоград
Сообщений: 192
Написано 5 полезных сообщений
(для 9 пользователей)
Ответ: Прыжки

Всё работает, спасибо большое!
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com