Понедельник, 25 Ноября 2024, 09:34

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
переместить объект и сразу узнать- пересекается ли он с кем?
ValentinusДата: Четверг, 23 Октября 2008, 16:34 | Сообщение # 1
был не раз
Сейчас нет на сайте
пробую Blitz3D.

вопрос: количество столкновений которые выдает EntityCollided() подсчитывается каждый раз при перемещении объекта, или только вовремя исполнения UpdateWorld?

то есть могу я _между_ отрисовками одного кадра (UpdateWorld/RenderWorld) несколько раз переместить объект, найдя позицию, где он ни с кем не пересекается?

вопрос проистекает из того, что вызывать UpdateWorld несколько раз (перед отрисовкой) невозможно, так как по этой команде Blitz обновляет анимацию- то есть когда сцена наконец отрисуется- пропустится несколько кадров. Хотелось бы переместить объект и сразу узнать- пересекается ли он с кем нибудь в этой точке или нет.


Автоматический анализатор читаемости Ваших веб-страниц:
http://IC4U.ru?from_gamecreating
ИвандерсДата: Четверг, 23 Октября 2008, 17:11 | Сообщение # 2
был не раз
Сейчас нет на сайте
количество столкновений которые выдает EntityCollided() подсчитывается каждый раз при перемещении объекта, или только вовремя исполнения UpdateWorld. И так и так нельзя разве?
vergil010Дата: Четверг, 23 Октября 2008, 18:06 | Сообщение # 3
3D master
Сейчас нет на сайте
это просчитывается до UpdateWorld

skype: vergil010
ValentinusДата: Пятница, 24 Октября 2008, 00:24 | Сообщение # 4
был не раз
Сейчас нет на сайте
вот пример:
Code


Graphics3D 640, 480
SetBuffer BackBuffer()

Const TypeC1 = 3, TypeC2 = 4

Global player=CreateSphere()
PositionEntity player,10, 0.1, 0
TurnEntity player,0,40,0
EntityRadius player, 1.5
EntityType player, TypePlayer

cam=CreateCamera(player)
light=CreateLight(1)
PositionEntity light, 1,1,1

Floor1=CreatePlane()
PositionEntity Floor1,0,-1,0
EntityColor Floor1,111,0,0

Global cub1=CreateCube()
EntityColor cub1,0,111,0

PositionEntity cub1,3, 0.1, 5
TurnEntity cub1,0,0,0
EntityRadius cub1, 1    
EntityType cub1, TypeC1

Global cub2=CreateCube()
EntityColor cub2,0,0,111

PositionEntity cub2, 9, 0.1, 5
ScaleEntity cub2, 0.9,0.9,0.9
TurnEntity cub2,0,0,0
EntityRadius cub2, 1    
EntityType cub2, TypeC2

Collisions TypeC1, TypeC2, 3, 2    

ecub1% = EntityCollided(cub1, TypeC2)

UpdateWorld
RenderWorld

Text 400,0,"cub1 EntityCollided(): "+ecub1,True,False    

While Not KeyDown( 30 )
Wend

;PositionEntity cub2,3.5, 0.1, 5
MoveEntity cub2, -5.5, 0, 0
;UpdateWorld
ecub1% = EntityCollided(cub1, TypeC2)

While Not KeyDown( 1 )

ecub2% = EntityCollided(cub1, TypeC2)

If KeyDown(30) MoveEntity cub1, -0.11, 0, 0

If KeyDown(200) MoveEntity cub1, 0, 0, 0.11
If KeyDown(208) MoveEntity cub1, 0, 0, -0.11
If KeyDown(203) TurnEntity cub1, 0, 2, 0
If KeyDown(205) TurnEntity cub1, 0, -2, 0

ecub3% = EntityCollided(cub1, TypeC2)

UpdateWorld
RenderWorld

Text 400,0,"after jump EntityCollided(): "+ecub1,True,False    

Text 400,20,"current (before move) EntityCollided(): "+ecub2,True,False    

Text 400,40,"current (after move)  EntityCollided(): "+ecub3,True,False    

Flip
Wend
End

на плоскости два кубика, задана их коллизия, вверху экрана пишется результат EntityCollided()

сначала они не пересекаются: EntityCollided выдает как и положено 0

нажимаем клавишу "А" - один кубик переносим в точку пересечения с другим, и сразу смотрим EntityCollided

увы! все тот же ноль!

даже если между перемещением и EntityCollided вставить Update World результат не меняется.

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

теперь алгоритм блитца мне вообще непонятен... sad


Автоматический анализатор читаемости Ваших веб-страниц:
http://IC4U.ru?from_gamecreating


Сообщение отредактировал Valentinus - Пятница, 24 Октября 2008, 12:54
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг