|
3D-программирование Вопросы, касающиеся программирования 3D мира |
14.01.2009, 02:16
|
#1
|
AnyKey`щик
Регистрация: 13.01.2009
Сообщений: 8
Написано 0 полезных сообщений (для 0 пользователей)
|
Выбор объекта, как сделать?
Здорова, такой вопросик:
Создал кучу мешей и теперь надо организовать их выбор, там у меня чувак бродит-вид от первого лица, надо чтобы при наведении мыши (то бишь прицела) объект подсвечивался (то есть было видно, что на него навели мышь), а при нажатии ЛКМ осуществлялась его деактивация (причем если он не нажал ЛКМ и отвел прицел в сторону-тоже деактивация), а также какой либо счетчик считает его выбранным. Причем надо чтобы это происходило 1 раз, а потом сколько не наводи, не щелкай - ничего не происходит. Как бы один раз использовал - и все...
Уже голову сломал - и все безрезультатно, не получается...
|
(Offline)
|
|
14.01.2009, 02:29
|
#2
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Ответ: Выбор объекта, как сделать?
CameraPick ?
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
14.01.2009, 21:35
|
#3
|
злобный флудер
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений (для 1,476 пользователей)
|
Re: Выбор объекта, как сделать?
))) делай каконить пик - потом всё что хошь, а потом поменый переменную котору проверял при пике на что-то другое (ну чтоб тока 1 раз можно было использовать)
|
(Offline)
|
|
14.01.2009, 23:37
|
#4
|
AnyKey`щик
Регистрация: 13.01.2009
Сообщений: 8
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Выбор объекта, как сделать?
Да, реализовывал выбор через CameraPick, вот функция:
Function MouseTest()
Local mx#,my#
mx#=MouseX()
my#=MouseY()
Local pick
pick=CameraPick (camera,mx#,my#); выбирает объект, находящийся в области просмотра камеры и координатах mx и my (в данном случае указателя мыши)
If pick<>0 Then ;если указатель мыши находится на объекте
SelectEntity PickedEntity()
If MausHitR Then; если нажата правая клавиша мыши
DeleteTex PickedEntity();
EndIf
If MausHitL Then
SelectBox PickedEntity()
EndIf
EndIf
End Function
А вот функции SelectEntity PickedEntity(), DeleteTex PickedEntity(), SelectBox PickedEntity() у меня реализовать никак не получалось, уже как только не пробовал...
|
(Offline)
|
|
15.01.2009, 00:19
|
#5
|
злобный флудер
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений (для 1,476 пользователей)
|
Re: Выбор объекта, как сделать?
Graphics3D 800,600,32,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()
light=CreateLight()
cam=CreateCamera()
MoveEntity cam,0,0,-30
Type cube
Field scale#
Field cube
Field work
Field life
Field x#
Field y#
Field col1
Field col2
Field col3
End Type
Function nCreateCube()
c.cube = New cube
c\scale = Rnd(.5,1.4)
c\cube=CreateCube()
c\work=1
c\life=100
c\x=Rnd(-20,20)
c\y=Rnd(-20,20)
c\col1=Rnd(255)
c\col2=Rnd(255)
c\col3=Rnd(255)
ScaleEntity c\cube,c\scale,c\scale,c\scale
EntityColor c\cube,c\col1,c\col2,c\col3
PositionEntity c\cube,c\x,c\y,0
EntityPickMode c\cube,1
End Function
Repeat
If MouseHit(1)
pick=CameraPick(cam,MouseX(),MouseY())
ent = pick
For c.cube = Each cube
If pick=c\cube
EntityColor c\cube,255,0,0
c\work=0
EndIf
Next
EndIf
For c.cube = Each cube
If c\work=0
c\life=c\life-1
If c\life=<0
FreeEntity c\cube
Delete c
EndIf
EndIf
Next
If KeyHit(57)
For cik=1 To 5
ncreatecube()
Next
EndIf
UpdateWorld
RenderWorld
Text 20,20,pick
Flip
Until KeyHit(1)
End
|
(Offline)
|
|
16.01.2009, 11:08
|
#6
|
AnyKey`щик
Регистрация: 13.01.2009
Сообщений: 8
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Выбор объекта, как сделать?
Разобрался в твоем коде, хорошо сделан, только не совсем то... Видишь тут какая проблема, у тебя кубы исчезают после отметки, а надо сделать такую ситуацию: Допустим на доме решетка, и мне надо проверить целая ли она, я подхожу, визуально осматриваю, а после осмотра щелкаю на нее (причем когда я навожу на нее курсор-она подсвечивается). Она помечается как осмотренная, т.е. заносится в какой-то счетчик и перестает реагировать на наведение курсора и на щелчки ЛКМ. При этом если я не щелкаю на нее, а просто отвел курсор в сторону она перестает подсвечиваться, а если еще раз навел - опять подсвечивается, пока не щелкну на ней ЛКМ... такая вот задачка Решетка то никуда не девается после осмотра
Кстати я только начал программировать, с графикой вроде разобрался, а в типах и движении - вообще тяжело дается
|
(Offline)
|
|
17.01.2009, 10:58
|
#7
|
Разработчик
Регистрация: 02.04.2007
Сообщений: 353
Написано 54 полезных сообщений (для 289 пользователей)
|
Ответ: Выбор объекта, как сделать?
Тип присвой обьектам пикнутым новый и все - в чем проблема то
|
(Offline)
|
|
17.01.2009, 13:42
|
#8
|
AnyKey`щик
Регистрация: 13.01.2009
Сообщений: 8
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Выбор объекта, как сделать?
Алекс, NitE спасибо, получилось, что хотел...
|
(Offline)
|
|
17.01.2009, 22:21
|
#9
|
Разработчик
Регистрация: 02.04.2007
Сообщений: 353
Написано 54 полезных сообщений (для 289 пользователей)
|
Ответ: Выбор объекта, как сделать?
в боке спасибо нада говорить ---> вон тама кнопярочка
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
18.01.2009, 11:27
|
#10
|
Знающий
Регистрация: 12.07.2007
Сообщений: 297
Написано 50 полезных сообщений (для 133 пользователей)
|
Ответ: Выбор объекта, как сделать?
Только лучше не использовать CameraPick каждый цикл, на некоторых картах будут тормоза.
Лучше LinePick , при виде от 1-ого лица это не сложно.
|
(Offline)
|
|
28.01.2009, 01:01
|
#11
|
Разработчик
Регистрация: 02.04.2007
Сообщений: 353
Написано 54 полезных сообщений (для 289 пользователей)
|
Ответ: Выбор объекта, как сделать?
А неужели не видно что не каждый цикл используеться пик , а определяеться после клика мыши
|
(Offline)
|
|
28.01.2009, 02:52
|
#12
|
злобный флудер
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений (для 1,476 пользователей)
|
Re: Выбор объекта, как сделать?
да лучше вообще блиц не использовать, тормозит уж очень...
|
(Offline)
|
|
28.01.2009, 13:06
|
#13
|
AnyKey`щик
Регистрация: 13.01.2009
Сообщений: 8
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Выбор объекта, как сделать?
Нет, не тормозит... тут еще проблема наклюнулась, создаю забор, с помощью CopyMesh размножаю, а копиям ПикМод не присваивается и получается, что только самый последний пролет на выбор реагирует, а остальной забор - нет. Перерисовывать с помощью каждый раз загружать объект неохота, там координатов много высчитывать. Может кто знает, как эту проблему решить:
.Zabor
; Создание забора через MESH объект===========================
fundament=CreateCube()
PositionMesh fundament, 0,0,0
ScaleMesh fundament,.16,.3,2
PaintMesh fundament,brush5
stolb=CreateCube(): stolb2=CreateCube()
PositionMesh stolb, xzab,0.5,zzab-9
PositionMesh stolb2, xzab,30,zzab-7.2
ScaleMesh stolb,.2,2,.2 :ScaleMesh stolb2,.25,.1,.25
PaintMesh stolb,brush6: PaintMesh stolb2,brush6
ograda=CreateCube ()
PositionMesh ograda, xzab,1.32,zzab
ScaleMesh ograda,.0,1.3,2
PaintMesh ograda,brush7
verx=LoadMesh ("Data\objects\verx.3ds")
PositionMesh verx, -.07,1.9,-1.35
ScaleMesh verx,1,1,1.2: PaintMesh verx,brush11
; объединение разных составляющих забора в один объект===========
;AddMesh stolb,fundament: AddMesh fundament,ograda
AddMesh stolb2,ograda: AddMesh verx,ograda: AddMesh stolb,ograda
FreeEntity stolb: FreeEntity stolb2: FreeEntity verx
;рисуем колючую проволоку
Koluch=CreateCylinder (28,False)
PaintMesh Koluch,BrushKoluch: RotateMesh Koluch,90,0,0
ScaleMesh Koluch,0.2,.2,1.8: BrushFX BrushKoluch,16
; Рисуем забор при помощи заданных ранее MESH ===========================================
PositionMesh ograda,-20.4,0,-18.3
PositionMesh Koluch,-20.4,3.1,-18.15
PositionMesh fundament,-20.4,0.1,-18.15
EntityFX Koluch,16: EntityPickMode ograda,2
EntityPickMode Koluch,2: EntityPickMode fundament,2
For a=1 To 10
CopyMesh ograda: CopyMesh Koluch: CopyMesh fundament
PositionMesh ograda,0,0,4: PositionMesh Koluch,0,0,4
PositionMesh fundament,0,0,4
EntityType ograda,8: EntityType Koluch,8
EntityFX Koluch,16: EntityPickMode ograda,2
EntityPickMode Koluch,2: EntityPickMode fundament,2
Next
CopyMesh ograda: CopyMesh Koluch: CopyMesh fundament
PositionMesh ograda,0,0,16: PositionMesh Koluch,0,0,16
PositionMesh fundament,0,0,16
EntityType ograda,8: EntityType Koluch,8: EntityFX Koluch,16: EntityPickMode ograda,2: EntityPickMode Koluch,2
EntityPickMode fundament,2
For a=11 To 5
CopyMesh ograda: CopyMesh Koluch: CopyMesh fundament
PositionMesh ograda,0,0,4: PositionMesh Koluch,0,0,4
PositionMesh fundament,0,0,4
EntityType ograda,8: EntityType Koluch,8: EntityFX Koluch,16
EntityPickMode ograda,2: EntityPickMode Koluch,2
EntityPickMode fundament,2
Next
|
(Offline)
|
|
28.01.2009, 15:58
|
#14
|
злобный флудер
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений (для 1,476 пользователей)
|
Re: Выбор объекта, как сделать?
код читать лень но должно быть что-то вроде
zabor=loadmesh("shit")
for i=1 to 10
compymesh zabor
entitypickmode zabor,2,2
next
|
(Offline)
|
|
28.01.2009, 18:02
|
#15
|
AnyKey`щик
Регистрация: 13.01.2009
Сообщений: 8
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Выбор объекта, как сделать?
Чего-то не догоняю, откуда у entitypickmode zabor,2,2 второй параметр - цифра? В хелпе нарисовано, что он может быть только TRUE или FALSE...
В том-то и проблема, что я примерно так и делал... только объект я не грузил, а с помощью кубиков и текстур создавал... НО НЕ РАБОТАЕТ!!!
Еще вопрос - у меня игрок пока состоит из пивота, к которому крепятся камера и прямоугольник. Пытался определить расстояние от игрока до объекта (PickedEntity ()) с помощью EntityDistance (player,PickedEntity ()) - возвращает почему-то ноль, на какое бы расстояние к объекту не подходил... причем в качестве игрока проверял и камеру, и пивот и прямоугольник...
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:20.
|