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

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

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

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

Ответ
 
Опции темы
Старый 09.02.2009, 14:12   #1
Petrofan
ПроЭктировщик
 
Аватар для Petrofan
 
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений
(для 18 пользователей)
Колизия при прыжке

Вот код прыжка где то нашел в семплах. Работает он нормально по крайней мере игрок не будет бегать по стенам но в нем есть проблема, когда подпрыгнуть в углу где стены сходятся игрок застревает, а если отойти назад отцепляется от стены. Вот сам код:

Graphics3D 800,600,32,0
SetBuffer BackBuffer()
Global gravity#=.08,jumpvel#=2
Global mx,my,angx#,angy#,m#,cam,player
Const Player_T=1,Map_T=2

Player=CreatePivot()
EntityRadius player,5,9
EntityType player,player_T
cam= CreateCamera(Player)

tex = CreateTexture(256,256)
tb=TextureBuffer(tex)

For i=0 To 255
Print(255-i)
For j=0 To 255
grey = Rand(0,25)
r_=Rand(100)+grey
g_=Rand(200)+grey*20
b_=Rand(30)+grey*10
WritePixel i,j,(r_ Shl 16) Or (g_ Shl Or b_,tb
Next
Next

box=CreateCube()
ScaleEntity box,50,50,50
EntityTexture box,tex
FlipMesh box
EntityType box,Map_T


Collisions Player_T,Map_T,2,3
Repeat
If KeyDown( 30 )=True Then speedX#=-1
If KeyDown( 32 )=True Then speedX#= 1
If KeyDown( 31 )=True Then speedZ#=-1.5
If KeyDown( 17 )=True speedZ#= 1.5

mx = MouseX()
my = MouseX()
angx#=(-MouseXSpeed()-angx#)/2.4+angx#
angy#=(MouseYSpeed()-angy#)/2.4+angy#
m#=m#+angy#*.07
If m> 90 Then m=90
If m<-90 Then m=-90
MoveMouse GraphicsWidth()*0.5, GraphicsHeight()*0.5
RotateEntity cam,m#,0,0
TurnEntity player,0,angx#*.07,0


If jumping=0
If KeyDown(57) And EntityCollided(player,map_t)>1 Then yvel#=jumpvel# jumping=1
EndIf
If jumping=1
yvel#=yvel#-gravity#
by#=by#+yvel#
EndIf
If by#<1 Then by#=1 yvel#=0 jumping=0
speedX#=speedX#*.6
speedZ#=speedZ#*.6
MoveEntity player,speedX#,yvel#,speedZ#
If jumping=0 Then MoveEntity player,0,-.55,0

UpdateWorld
RenderWorld
If KeyHit(1) End
Flip
Forever



Помогите разобраться !
(Offline)
 
Ответить с цитированием
Старый 09.02.2009, 17:14   #2
christian [I <3 Blitz3D]
AnyKey`щик
 
Регистрация: 07.02.2009
Сообщений: 14
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Колизия при прыжке

не знаю как это поправить, но этот с помощью этого бага можно вылезти даже до потолка )

попробуй сам написать код прыжка. иногда легче самому сделать, чем поправить чужое
(Offline)
 
Ответить с цитированием
Старый 09.02.2009, 18:14   #3
Petrofan
ПроЭктировщик
 
Аватар для Petrofan
 
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений
(для 18 пользователей)
Ответ: Колизия при прыжке

Нет !!! Зачем изобретать велосипед. В коде прыжка все нормально это колизия кривая вот и прошу помощи чтобы устранить этот баг.
(Offline)
 
Ответить с цитированием
Старый 09.02.2009, 18:26   #4
Alex_Noc
Разработчик
 
Регистрация: 02.04.2007
Сообщений: 353
Написано 54 полезных сообщений
(для 289 пользователей)
Ответ: Колизия при прыжке

Сори если обижу - но позже если пойдешь по пути прогинга скажешь что праильно сказал )
ЭТ У ТЯ БАШКА КРИВАЯ )))))))))))))))
Напиши заново!!!!!
(Offline)
 
Ответить с цитированием
Старый 09.02.2009, 18:39   #5
NitE
злобный флудер
 
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений
(для 1,476 пользователей)
Re: Колизия при прыжке

качай - смотри код http://forum.boolean.name/showthread.php?t=7532
(Offline)
 
Ответить с цитированием
Старый 09.02.2009, 18:41   #6
H@NON
Дэвелопер
 
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений
(для 774 пользователей)
Ответ: Колизия при прыжке

код фиговый, чтобы игрок не лазил по потолкам и стенкам или не отталкивался от них, то нужно проверять наклон поверхности. Для этого есть команды CollisionNX/NY/NZ, вот через них и сравнивай. Если значение стоит в определенных пределах, то разрешай игроку прыгать, если не стоит то запрещай.
(Offline)
 
Ответить с цитированием
Старый 10.02.2009, 12:56   #7
Petrofan
ПроЭктировщик
 
Аватар для Petrofan
 
Регистрация: 26.08.2008
Сообщений: 149
Написано 10 полезных сообщений
(для 18 пользователей)
Ответ: Колизия при прыжке

Я уже все перепробовал с CollisionNY и у меня постоянно ошибку выдает Collision index out of range почему это так?
(Offline)
 
Ответить с цитированием
Старый 10.02.2009, 13:13   #8
Damp
Знающий
 
Регистрация: 12.07.2007
Сообщений: 297
Написано 50 полезных сообщений
(для 133 пользователей)
Ответ: Колизия при прыжке

Можно стенам и полу назначить разные EntityType, что лучше в д. случае.
А в этом примере можно добавить
If jumping=0 yvel#=yvel#-gravity#/2 или 3,4 итд подобрать короче
чтоб хотя бы сползал со стен )) , а на потолке вообще не будтет зависать скорее всего.
(Offline)
 
Ответить с цитированием
Старый 10.02.2009, 16:25   #9
H@NON
Дэвелопер
 
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений
(для 774 пользователей)
Ответ: Колизия при прыжке

Сообщение от Petrofan Посмотреть сообщение
Я уже все перепробовал с CollisionNY и у меня постоянно ошибку выдает Collision index out of range почему это так?
видимо ты неправильно задаешь второй параметр в CollisionNY. Надо так:
count = CountCollisions(player)
For n = 1 to count
    nx# = nx# + CollisionNX(player, n)
    ny# = ny# + CollisionNY(player, n)
    nz# = nz# + CollisionNZ(player, n)
Next
nx = nx / count
ny = ny / count
nz = nz / count
Еще можно проверять с какой частью сферы(игрока) ты столкнулся и давать возможность прыгать или перемещатся только если эта часть находится в нижней половине, например так:
count = CountCollisions(player)
Local jumpMode = False
For n = 1 to count
    y# = CollisionY(player, n) - EntityY(player,1)
    If y# < -0.0 then jumpMode = True : Exit
Next
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Alex_Noc (11.02.2009)
Старый 27.01.2010, 12:25   #10
RlexGm
ПроЭктировщик
 
Регистрация: 11.11.2009
Сообщений: 172
Написано 17 полезных сообщений
(для 34 пользователей)
Ответ: Колизия при прыжке

простите меня что малясь не в тему)
Вопрос: работает ли колизия с моделями *.md2, а то я вроде всё правильно делаю, а все равно проникает...Помогите
(Offline)
 
Ответить с цитированием
Старый 27.01.2010, 12:39   #11
Hurrit
Мастер
 
Аватар для Hurrit
 
Регистрация: 27.01.2008
Адрес: Россия, СКФО, ЧР, Грозный
Сообщений: 1,144
Написано 578 полезных сообщений
(для 2,207 пользователей)
Ответ: Колизия при прыжке

Код пожалуйста, мы ведь не экстрасенсы
(Offline)
 
Ответить с цитированием
Старый 27.01.2010, 12:54   #12
RlexGm
ПроЭктировщик
 
Регистрация: 11.11.2009
Сообщений: 172
Написано 17 полезных сообщений
(для 34 пользователей)
Ответ: Колизия при прыжке

ах да, забыл(
Graphics3D 0,0,32,1
SetBuffer BackBuffer()

Global Player=CreateSphere()
Global CamPlayer=CreateCamera(Player)
PositionEntity Player,50,60,60
EntityRadius player,8,25
EntityType player, TypePlayer

Global L2L1=LoadMD2("Media\Models\L2L1\L2L1.md2")
L2L1T=LoadTexture("Media\Models\L2L1\L2L1T.jpg")
EntityTexture L2L1,L2L1T
PositionEntity L2L1,74,-12,547
ScaleEntity L2L1,0.5,0.5,0.5
RotateEntity L2L1,0,-90,0
EntityType L2L1, TypeWall

Collisions TypePlayer, TypeWall, 2,3
While Not KeyHit(1)

RenderWorld
UpdateWorld
Flip
Wend
End
(Offline)
 
Ответить с цитированием
Старый 27.01.2010, 20:30   #13
Hurrit
Мастер
 
Аватар для Hurrit
 
Регистрация: 27.01.2008
Адрес: Россия, СКФО, ЧР, Грозный
Сообщений: 1,144
Написано 578 полезных сообщений
(для 2,207 пользователей)
Ответ: Колизия при прыжке

Ты забыл типы объявить. Пропиши перед глобалами
Const TypePlayer=1, TypeWall=2
(Offline)
 
Ответить с цитированием
Старый 27.01.2010, 20:59   #14
RlexGm
ПроЭктировщик
 
Регистрация: 11.11.2009
Сообщений: 172
Написано 17 полезных сообщений
(для 34 пользователей)
Ответ: Колизия при прыжке

***** , я просто нечаяно забыл написать( колизия с другими объктами рабоатет, а имено c *.csm
(Offline)
 
Ответить с цитированием
Старый 27.01.2010, 23:07   #15
Hurrit
Мастер
 
Аватар для Hurrit
 
Регистрация: 27.01.2008
Адрес: Россия, СКФО, ЧР, Грозный
Сообщений: 1,144
Написано 578 полезных сообщений
(для 2,207 пользователей)
Ответ: Колизия при прыжке

Будь внимательнее, ты в таком коротком коде ошибся, когда будешь писать огромные проекты, невнимательность будет для тебя страшным врагом.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятная колизия с патроном Ganociy Blitz3D 3 29.10.2009 18:13


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


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