forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Camera pick! (http://forum.boolean.name/showthread.php?t=8678)

MiXaeL 31.08.2009 18:57

Ответ: Camera pick!
 
if Picked<>0 item_info$=EntityName$(Picked)

maxim7788 01.09.2009 16:34

Ответ: Camera pick!
 
Большое спасибо за подсказку. Хотелось бы продолжить эту тему на конкретном примере с типами. Имеется Type Box с переменными. Создаем 100 кубиков и заполняем их переменные значениями. С помощью Picked мы можем выделить любой из кубиков и получить значения EntityName и EntityX, а затем присвоить эти значения каким то переменным (в нашем случае значения присваиваются переменным item_info$ и item_xxx#). Отсюда возникает вопрос: а можно ли прочесть переменные Type "пикнутого" кубика (чтобы не использовать перебор всех кубиков) и затем присвоить их каким-либо переменным ... ну например - "пикнуть" какой-нибудь кубик, прочитать его переменную room\index и присвоить её значение переменной room_id#. Заранее спасибо.

Код:

Graphics3D 1024,768,32,1
SetBuffer BackBuffer()

Global cam=CreateCamera()
PositionEntity cam,100,400,120
TurnEntity cam,90,0,0
light=CreateLight()
RotateEntity light,30,0,0
SetFont LoadFont("courier",18)

;===================================================

Type box
        Field entity
        Field index
        Field x
        Field z
End Type

For a=1 To 10
        For b=1 To 10
                i=i+1
                room.box=New box
                room\index=i
                room\x=30*a               
                room\z=30*b
                room\entity=CreateCube()
                NameEntity room\entity,"item_"+i
                EntityPickMode room\entity,2
                ScaleEntity room\entity,10,2,10
                PositionEntity room\entity, room\x, 0, room\z
        Next
Next

;====================================================

While Not KeyHit(1)
       
        x_mouse=MouseX()
        y_mouse=MouseY()
       
        Picked=CameraPick(cam,MouseX(),MouseY())
       
        ; ------------------
        If Picked<>0 Then
                item_info$=EntityName(Picked)
                item_xxx#=EntityX(Picked)
        Else
                item_info$="none"
                item_xxx#=0
        EndIf
       
        ; ------------------ 
        If Picked<>target Then
                If target Then EntityAlpha target,1
                target=Picked
        EndIf
        If target
                EntityAlpha target,Sin( MilliSecs() )*.5+.5
        EndIf
                               
UpdateWorld
RenderWorld

        Color 255,0,0
        Text 20, 40, "EntityName..."+item_info$
        Text 20, 60, "EntityX......"+item_xxx#               
        Text 20,100, "room_id....."+room_id#
                               
        Rect x_mouse,y_mouse-3,1,7       
        Rect x_mouse-3,y_mouse,7,1
       
Flip
Cls
Wend
End


tormoz 01.09.2009 20:26

Ответ: Camera pick!
 
Можно
Только при создании элемента типа нужно в имя ентити записать хендл элемента типа (по сути это порядковое значение элемента)

Код:

                        room.box=New box
                room\index=i
                room\x=30*a               
                room\z=30*b
                room\entity=CreateCube()
                          room\name$="item_"+i
                NameEntity room\entity,Handle (room)

Потом при пике выдергиваешь хендл и по нему извлекаешь из типа нужный элемент
Код:

If Picked<>0 Then
                    room.box=Object.box(EntityName(Picked))
                item_info$=room\name$
               
                        item_xxx#=EntityX(Picked)
        Else
                item_info$="none"
                item_xxx#=0
        EndIf



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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Перевод: zCarot