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 результат не меняется. странно, что даже если в этот момент покрутить (клавишами) кубик внутри другого- никаких коллизий, однако стоит вывести кубик в сторону и "ткнуть" в другой- коллизии начинают фиксироваться! теперь алгоритм блитца мне вообще непонятен...
Автоматический анализатор читаемости Ваших веб-страниц: http://IC4U.ru?from_gamecreating
Сообщение отредактировал Valentinus - Пятница, 24 Октября 2008, 12:54 |
|
| |