|
entity = указатель объекта
global (не обязательно)= True для глобальных координат, False - для локальных. По умолчанию False. |
|
Возвращает Y-координату объекта.
Если параметр global= False, то используется локальная система координат (относительно родительского объекта). Смотрите EntityX(), чтобы узнать больше о локальных и глобальных координатах. |
|
; Пример EntityX / EntityY / EntityZ.
; Escape - выход, другие клавиши - движение. Const width = 640, height = 480 Const KEY_ESC = 1, KEY_LEFT = 203, KEY_RIGHT = 205 Graphics3D 640, 480 AmbientLight 50, 50, 50 Global isMoving = False ; используется для управления остановкой/стартом движения Global count ; счетчик обновлений ; Установим камеру, свет и 3 объекта... cam = CreateCamera() PositionEntity cam, 0, 2, -50 CameraZoom cam, 4 lt = CreateLight() : TurnEntity lt, 30, 40, 0 Global oSphere, pCone, cSphere oSphere = CreateSphere() EntityColor oSphere, 250, 50, 0 ; Оранжевая сфера, родитель конуса pCone = CreateCone( 8, True, oSphere) ; будет родителем маленькой сферы ScaleEntity pCone, .8, 2.0, .8 PositionEntity pCone, 8, 0, 0 EntityColor pCone, 255, 255, 0 cSphere = CreateSphere( 8, pCone ) ; дочерняя сфера конуса EntityColor cSphere, 150, 150, 0 ScaleEntity cSphere, .4/.8, .4/2.0, .4/.8 ; попробуйте закомментировать эту строку PositionEntity cSphere, 0, 2, 0 ; выше родителя ; ... и запустим главный цикл. While Not KeyDown( KEY_ESC ) UpdateEverything RenderWorld ShowInfo Flip Wend End Function UpdateEverything( ) ; Объект не изменяет свою позицию относительно родителя, локальные координаты постоянны. ; Попробуйте раскомментировать команду PositionEntity, чтобы проверить это. If GetKey() Then isMoving = Not isMoving If isMoving TurnEntity oSphere, 0, .5, 0 TurnEntity pCone, .2, 0, 0 count = count + 1 a# = count Mod 360 ; PositionEntity cSphere, 0, 2 + Sin( a ), 0 ; поэкспериментируйте здесь End If End Function Function ShowInfo( ) ; вывести глобальные и локальные координаты для всех объектов Local x$, y$, z$ Color 255, 255, 255 Text 185, 20, "Global" Text 495, 20, "Local" Color 250, 50, 0 Text 20, 50, "oSphere: " + XYZ( oSphere, True ) Text 400, 50, XYZ( oSphere, False ) Color 255, 255, 0 Text 20, 75, " pCone: " + XYZ( pCone, True ) Text 400, 75, XYZ( pCone, False ) Color 150, 150, 0 Text 20, 100, "cSphere: " + XYZ( cSphere, True ) Text 400, 100, XYZ( cSphere, False ) End Function ; ****************************************************************** ; Эти функции форматируют текст на экране, чтобы не было слишком много чисел. Function Round#( x#, m# ) ; округляем x If m < 0.0 Then m = -m s# = Sgn( x ) If x < 0.0 Then x = -x diff# = x Mod m If diff < .5 * m Return ( x - diff ) * s Else Return ( m + x - diff ) * s End If End Function Function XYZ$( entity, globalFlag ) ex# = Round( EntityX( entity, globalFlag ), .001 ) ey# = Round( EntityY( entity, globalFlag ), .001 ) ez# = Round( EntityZ( entity, globalFlag ), .001 ) Return RSet( ex, 8 ) + RSet( ey, 8 ) + RSet( ez, 8 ) End Function |