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)

Fatalix3d 16.07.2009 13:22

Camera pick!
 
Имею модель бутылки,хлеба,яблока у них соответственно NameEntity botle,hleb,apple так вот, как как мне получить в переменную, этот самый EntityName через CameraPick?

Надо чтобы над предметом появлялась надпись "Яблоко" которое мы пишем исходя из полученого entityName.

Вообщем парни:SOS:.

IGR 16.07.2009 13:27

Ответ: Camera pick!
 
покажи кусок кода как ты пишеш ??

Цитата:

Надо чтобы над предметом появлялась надпись "Яблоко" которое мы пишем исходя из полученого entityName.
нада спрецировать его координаты на экран !!
потом:
text coord1, coord2, "Яблоко"

Fatalix3d 16.07.2009 13:47

Ответ: Camera pick!
 
global item_info ;cюда заносим EntityName
global picked

;яблоко
apple=loadmesh("mesh/apple.b3d")
positionentity apple,25,1,33
entitypickmode apple,2
nameentity apple,apple_item

в цикле
if game=0 then
picked=CameraPick(camera,MouseX(),MouseY())
item_info=nameentity(picked)
endif

ну и ...
text,400,500,""+item_info

Надпись должна появляться не при нажатии, а при наведении.

IGR 16.07.2009 14:05

Ответ: Camera pick!
 
Цитата:

global item_info ;cюда заносим EntityName
а заносиш:
Цитата:

item_info=nameentity(picked)

Mr_F_ 16.07.2009 14:07

Ответ: Camera pick!
 
Цитата:

picked=CameraPick(camera,MouseX(),MouseY())
item_info=nameentity(picked)
меняй на
CameraPick(camera,MouseX(),MouseY())
item_info=nameentity(pickedentity())

и обозначь итем_инфо как стринг:

global item_info$

Fatalix3d 16.07.2009 14:45

Ответ: Camera pick!
 
Вложений: 1
Ура! Заработало! Кстати там надо еще было исправить nameentity apple,apple_item на nameentity apple,"apple_item"
Ребята спасибо за помощь!

SBJoker 16.07.2009 15:04

Ответ: Camera pick!
 
Fatalix3d, Блин на скрине перебор с DoF, я ощутил себя слепым кротом глядя на него.

impersonalis 16.07.2009 15:20

Ответ: Camera pick!
 
надо в динамике смотреть
демку давай

Fatalix3d 16.07.2009 15:27

Ответ: Camera pick!
 
:-D Так он включается только при диалогах, инвентаре и когда переходим в режим взаимодействия с некоторыми предметами (как раз скрин из квеста "Грибы для лесников" из которых они сварят супчик ... так грибов насобирал ... и ... пол лагеря в астрале!!!:4to: ... кто знал что половина из них галлюциногенные:rolleyes: )

P.S О! нашел вторую половину в кустах!:-D )

SBJoker 16.07.2009 15:48

Ответ: Camera pick!
 
Fatalix3d, Вы случайно не работаете в одной аусорсной студии?

Fatalix3d 16.07.2009 16:00

Ответ: Camera pick!
 
Да нет, а что?

SBJoker 16.07.2009 16:02

Ответ: Camera pick!
 
Просто, показалось знакомым что-то в скрине.

johnk 16.07.2009 16:42

Ответ: Camera pick!
 
Классная графика :) Модельки свои? А человек?

Fatalix3d 16.07.2009 16:48

Ответ: Camera pick!
 
Все свое, кроме человека он для тестов (просто вчера вечером решил делать полноценную RPG, и с видом от 3 лица, первая концепция кроме трупа, персонажей не подразумевала ). Потом конечно смоделю и добавлю собственных.

maxim7788 31.08.2009 18:51

Ответ: Camera pick!
 
Столкнулся с той же проблемой. Для примера создан куб, кубу задано имя, как присвоить переменной "item_info$" имя куба "item_001", используя CameraPick и PickedEntity ? Не совсем понятно, ведь CameraPick работает с числовой переменной, а имя кубика это строка. Объясните, заранее спасибо.

Код:

Global item_info$ ;cюда заносим EntityName
Global picked

Windowed3D
Graphics3D 800,600,16,1
SetBuffer BackBuffer()

Global camera=CreateCamera()
PositionEntity camera,0,400,0
TurnEntity camera,90,0,0
SetFont LoadFont("courier",14)

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

; создание куба
box=CreateCube()
PositionEntity box,0,0,0
ScaleEntity box,20,20,20
EntityPickMode box,2
NameEntity box,"item_001"

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

While Not KeyHit(1)
       
        xxx=MouseX()
        yyy=MouseY()
       
        picked=CameraPick(camera,MouseX(),MouseY())
        item_info=EntityName(PickedEntity())
                               
UpdateWorld
RenderWorld
       
        Text 20,60,"picked......."+picked
        Text 20,80,"item_info$..."+item_info$
                       
        Rect xxx,yyy-3,1,7       
        Rect xxx-3,yyy,7,1
               
Flip
Cls
Wend
End


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, время: 07:41.

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