Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > BlitzMax

Ответ
 
Опции темы
Старый 28.10.2007, 22:04   #1
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Вопрос В какой объект ткнули

Незнаю, поймете ли вы меня... В общем над этой проблемой уже целый день мучаюсь...

Имеется объекты Окно1 и Окно2. Они оба находятся в одном листе. Выполнчет обновление по очереди - ОкноN .


Нужно узнать, куда ткнули. То есть, в какой объект именно.


Проблема в том, что постоянно получается, что ткнули по объекту не тому. То есть, если у нас Окно1 внизу, а Окно2 выше, но в списках по другому, а ткнули мы, допустим, как на рисунке, то получается, что выбрано Окно1, а не Окно2. Хотя оно выше. То есть мы выбрали объект через другой (визуально).

Так же все объкты имеют переменную Z. Окно1 , допустим, Z=0, а Окно2 : Z=1 . Как-то надо с этими высотами работать, и , сделать так, чтобы через верхний объект нельзя было выбрать нижний.


В общем, как-то из-за положения в списке и из-за Z у нас получается выбрать объект через объект.. как-то надо сделать ограничение, но моего ума не хватило... *даун* ...

Надеюсь ,вы меня поняли. помогите, плиз. Объясните... промучалсо весь день...
[blitz]

Global SGUIWindow:TList=New TList
Global GUI_Z = 0
Global MX, MY, MD, MH


'Главный тип
Type TGUI
Field Name$
Field X,Y
Field Width,Height

Field Text$
Field Image

Field Z
'Прорисовка

Field Visible
'0 - не рисуем
'1 - рисуем темным
'2 - Рисуем нормально

Field Number
'Группа.
Field DrapNDrop[4]

Method UpdateWindow ()

If MH=1 And MX > X And MX < X + width And MY > Y And MY < Y + Height Then GUI_Z:+1 ; Z=GUI_Z
'Таскаем окно
'Если нажали на той полоске, то записываем координаты мыши - х координата окна
If MH=1 And MX > X And MX < X + width And MY > Y And MY < Y + 25 Then
DrapNDrop[0] = MX-X
DrapNDrop[1] = MY-Y
DrapNDrop[2] = 1
End If

'Если драпдроп включен, то перемещаем.
If DrapNDrop[2] = 1
X = MX-DrapNDrop[0]
Y = MY-DrapNDrop[1]
End If

'Если не нажата, то выклчаем драпндроп
If MD=0 Then DrapNDrop[2] = 0
End Method

Method DrawWindow ()
//РИСУЕМ
End Method

Function CreateGUI_Window:TGUI (x,y,width,height,text$,name$,button,number,Visibl e )
Local GUI_Window:TGUI=New TGUI
//СОЗДАЕМ
GUI_Window.z = GUI_Z
GUI_Z:+1
ListAddLast(SGUIWindow , GUI_Window)
Return GUI_Window
End Function

End Type




TGUI.CreateGUI_Window (5,5,630,445,"Create Game","Window",0,1,1 )
TGUI.CreateGUI_Window (120,5,30,45,"Create","Window",0,2,1 )

While Not KeyDown (Key_Escape)
Cls
TileImage Image

MX = MouseX()
MY = MouseY()
MD = MouseDown(1)
MH = MouseHit(1)
Value=GetChar()

For i = 0 To GUI_Z

For GUI_Window:TGUI=EachIn SGUIWindow
If GUI_Window.Z = i Then GUI_Window.UpdateWindow ; GUI_Window.DrawWindow ()
Next

Next

Flip
Wend

[/blitz]
(Offline)
 
Ответить с цитированием
Старый 28.10.2007, 22:11   #2
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Re: В какой объект ткнули

Кстати, если таскать маленькое окно через большое, то фокус так же остается над большим. но надо, чтобы вообще нельзя было таскать маленькое через большое (и большое через маленькое, и т.д..)
(Offline)
 
Ответить с цитированием
Старый 28.10.2007, 22:14   #3
jimon
 
Сообщений: n/a
Re: В какой объект ткнули

Данил
обрабатывай только то окно которое находится активным (в фокусе)
остальные отрубай из цикла обновления
 
Ответить с цитированием
Старый 28.10.2007, 22:16   #4
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Re: В какой объект ткнули

Хм. А как же быть? Ну, как выбрать-то другое окно... Если выбрано Окно1, но нет коллизии визуально. А надо выбрать Окно2... Как в таком случае быть?
(Offline)
 
Ответить с цитированием
Старый 28.10.2007, 22:34   #5
johnk
Легенда
 
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений
(для 568 пользователей)
Re: В какой объект ткнули

Реализуй возможность "таскания" окон.
(Offline)
 
Ответить с цитированием
Старый 28.10.2007, 22:55   #6
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Re: В какой объект ткнули

Реализовано уже.
(Offline)
 
Ответить с цитированием
Старый 28.10.2007, 23:26   #7
jimon
 
Сообщений: n/a
Re: В какой объект ткнули

Данил
если не можеж представить всю работу ГУИ с фокусом
то тогда сортируй список окон по их видимости
 
Ответить с цитированием
Старый 28.10.2007, 23:32   #8
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Re: В какой объект ткнули

jimon
Ну, список, сам, вроде как, сортировать не обязательно. у меня идет соритровка объектов по мере возрастания Z.


Как сделать, чтобы через один объект нельзя ыбло попасть по другому? какое ограничение?

If MouseX()>X And MouseX()<X+Width And MouseY()>Y And MouseY()<Y+Height Then ...

Я уже как-то сделал, что фокус остается на окне, если мы нажимаем через него на другое. ЭТо правильно. Но нижне окно можно таскать через верхнее. .как это исправить. .надо какую-то проверку на координаты.. хз толко какую..
(Offline)
 
Ответить с цитированием
Старый 28.10.2007, 23:37   #9
jimon
 
Сообщений: n/a
Re: В какой объект ткнули

если курсор попадает в рабочую область окна которое находится в фокусе
то нафиг обрезать остальное обновление

если курсор попадает на заголовок окна - работать с заголовком
 
Ответить с цитированием
Старый 29.10.2007, 00:30   #10
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Re: В какой объект ткнули

jimon
Спасибо! Оказывается так все просто. 3 сточки кода ,при чем одна из них - End if... класс. .и все работает.. осталось убрать тока странное мерчание этих самых окон.. и будет все круто..
(Offline)
 
Ответить с цитированием
Старый 29.10.2007, 12:46   #11
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: В какой объект ткнули

Я сделал так: завожу список сортировки, и рендерю исходя из него окна, и обновляю тоже, поэтому обновляються сперва те что самые ближние, и далее по мере заслонённости, тем самым, если мы выбрали какое-то окно, присваеваем его эллемент к глобале, и уже далее если эта переменная <> Null, просто у других окон даже не проверяем на выделение. Оптимально.
Важно только Оптимально реализовать сортировку списка, отвечающего за последовательность рендеров и обновлений.
(Offline)
 
Ответить с цитированием
Старый 29.10.2007, 12:47   #12
Данил
Модератор
 
Аватар для Данил
 
Регистрация: 11.07.2007
Сообщений: 2,910
Написано 686 полезных сообщений
(для 1,694 пользователей)
Re: В какой объект ткнули

Хы. Я как-то все через жопу, извиняюсь, сделал ,но почему-то все нормалньо работает... как всегда...
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Курсор и объект Hurrit 3D-программирование 13 13.10.2009 22:33
Как узать объект? dimanche13 2D-программирование 23 21.07.2009 17:12
Какой объект в TList сейчас обрабатывается? Trilliput BlitzMax 7 04.12.2007 20:12
Объект & функция DRAG C++ 6 02.12.2007 03:18
Толкаем обЪект Horror 3D-программирование 4 31.01.2007 02:06


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com