forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Клик на объекте (http://forum.boolean.name/showthread.php?t=1355)

Valet 23.08.2006 18:19

Клик на объекте
 
Господа, я никак не возьму в толк, каким образом отслеживать клик 2д-курсора на ёнтити. Запутался в командах. Пик не пик, пикед не пикед...:( Нужно чтобы при нажатии на объект происходило определенное действие. Разъясните мне способ?


Благодарю за внимание.

impersonalis 23.08.2006 18:38

Re: Клик на объекте
 
http://www.boolean.name/showthread.php?t=1327

axel186 23.08.2006 18:41

Re: Клик на объекте
 
Для этого надо знать две команды..
EntityPick и CameraPick =)
Вот пример:

Цитата:

Graphics3D 640,480,16
SetBuffer BackBuffer()

Camera=CreateCamera()
PositionEntity Camera,0,0,-10

Light=CreateLight()
PositionEntity Light,0,0,-10

Cube=CreateCube()
PositionEntity Cube,3,0,0
EntityPickMode Cube,2
Sphere=CreateSphere()
PositionEntity Sphere,-3,0,0
EntityPickMode Sphere,2

Red#=255
Green#=255
Blue#=255

CRed#=255
CGreen#=255
CBlue#=255

Repeat

Pick%=CameraPick(Camera,MouseX(),MouseY())

EntityColor Sphere,Red#,Green#,Blue#
EntityColor Cube,CRed#,CGreen#,CBlue#

UpdateWorld
RenderWorld

If Pick%=Sphere Then
Text 300,100,"Sphere"

If MouseDown(1) Then
Green#=100
Blue#=100
Else
Red#=255
Green#=255
Blue#=255
EndIf

Else

If Pick%=Cube Then
Text 300,100,"Cube"

If MouseDown(1) Then
CGreen#=100
CBlue#=100
Else
CRed#=255
CGreen#=255
CBlue#=255
EndIf

Else

Text 300,100,"None"

EndIf
EndIf
Flip
Until KeyHit(1)
End

Valet 23.08.2006 19:21

Re: Клик на объекте
 
Благодарю. Теперь я разобрался...:super: Только возник новый вопрос. Как теперь клик на 2д-картинке проверять? Сверять координаты курсора? :wallbash:

impersonalis 23.08.2006 20:19

Re: Клик на объекте
 
Вообще говоря - да.

Valet 23.08.2006 22:02

Re: Клик на объекте
 
У меня беда. Теперь после клика в любой точке и при наведении на объект без клика картинка все равно рисуется... Что не так?

Код:

item_pick=CameraPick(camera,MouseX(),MouseY())

If item_pick=item Then
ShowEntity item_selected
Else
HideEntity item_selected
End If

If item_pick=item Then
Text 55,25, "вещь"
If MouseHit(1) Then
activate_item_actions=1
End If
EndIf
If activate_item_actions=1 DrawImage take_button,600,250

:wallbash:

Заранее спасибо...

moka 23.08.2006 22:44

Re: Клик на объекте
 
Код:

item_pick=CameraPick(camera,MouseX(),MouseY())

If item_pick=item Then
ShowEntity item_selected
Else
HideEntity item_selected
End If

If item_pick=item Then
Text 55,25, "вещь"
If MouseHit(1) Then
activate_item_actions=1
End If
EndIf
If activate_item_actions=1 DrawImage take_button,600,250

Замени на:
Код:

item_pick=CameraPick(camera,MouseX(),MouseY())

If PickedEntity()=item
ShowEntity item_selected
Else
HideEntity item_selected
EndIf

If PickedEntity()=item
Text 55,25, "вещь"
If MouseHit(1)
activate_item_actions=1
EndIf
EndIf
If activate_item_actions=1 DrawImage take_button,600,250


Совет насчёт Then: на самом деле это лишнее... =)

Valet 23.08.2006 22:57

Re: Клик на объекте
 
все по прежнему. Если сначала кликнуть на любом месте, а потом не кликая навести курсор на нужный объект, то картинка все равно рисуется...:dontknow:

tormoz 24.08.2006 06:45

Re: Клик на объекте
 
Делай так:

hit_m_1=MouseHit(1)

.... тут код. Вместо MouseHit(1) подставляй перевменную hit_m_1

в конце цикла сброс переменной:
hit_m_1=0

Valet 24.08.2006 13:02

Re: Клик на объекте
 
Tormoz спасибо. Я бы не додумался поставить переменную с моей прямой извилиной :lol: . Кстати, с прошедшим тебя ;).

moka 24.08.2006 13:28

Re: Клик на объекте
 
Поменяй менстами:
If PickedEntity()=item
и
If MouseHit(1)
И всё будет пучком =)


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

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