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

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

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

Ответ
 
Опции темы
Старый 04.12.2007, 16:28   #1
Trilliput
Знающий
 
Регистрация: 27.07.2006
Сообщений: 250
Написано 6 полезных сообщений
(для 7 пользователей)
Какой объект в TList сейчас обрабатывается?

Экземпляры класса заносятся в Obj:TList. Потом при помощи ф-ии UpdateEntities (Obj) происходит перебор всех объектов в списке с выполнением метода класса Update(). Возникла проблема как можно узнать какой объек из списка сейчас обрабатыется прямо из метода Update()? Нехотелось бы что бы при переборе передавать обрабатываемый объект в метод Update() (те Update(Obj)), тк придется переписывать все методы Update у всех классов.
(Offline)
 
Ответить с цитированием
Старый 04.12.2007, 16:33   #2
johnk
Легенда
 
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений
(для 568 пользователей)
Re: Какой объект в TList сейчас обрабатывается?

Ну так элемент, что перебирается то и есть текущий.
(Offline)
 
Ответить с цитированием
Старый 04.12.2007, 16:43   #3
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Re: Какой объект в TList сейчас обрабатывается?

код дай
__________________
(Offline)
 
Ответить с цитированием
Старый 04.12.2007, 16:43   #4
Trilliput
Знающий
 
Регистрация: 27.07.2006
Сообщений: 250
Написано 6 полезных сообщений
(для 7 пользователей)
В том то и дело что просто для того что бы получить обрабатывемый элемент мне нужно пердать его методу Update(), но для этого мне придется дописывать все Update() - а мне это наф ненадо.
Есть ф-ия которая обрабатывает все списки:
Function UpdateEntities( list:TList )
For Local entity:TEntity=EachIn list
entity.Update
Next
End Function
Есть класс TEntity c абстрактным методом Update(), у него есть потомок класс TBuilding в котором и расписан метод Update().
Во время выполнения ф-ии UpdateEntities(list:TList) выполняется метод Update() класса TBuilding. Те из самого метода TBuilding.Update() я немогу узнать какой объект из списка выполняется.

В этом то и вся проблема, нехотелось бы в TBuilding.Update() делать еще один перебор For .. Next по списку объектов TBuilding.

Все это нужно для организации "выбора объекта" на который кликнули. У класса Tbuilding есть поле IsSelected. В методе Update() происходит проверка: Если кликнули на объекте, то IsSelected = true. А теперь надо сделать все IsSelected = false у других объектов. Делать для этого еще один перебор кокраз нехочеться. Идея была в том, что бы занести выбраный объект в поле "Global SelectedBuilding" и проверить если "текущий объект" <> "SelectedBuilding", то Selected = false.

При создании экземпляра класса используется:
Local Building:TBuilding=New TBuilding

Если занести Building при этом, например, в поле Obj этого же экземпляра класса будет ли он указывать именно на себя?
По логике: когда заносим созданый экземпляр класса в TList(например List.AddLast(Building), потом при переборе и изменении TList всеравно идет указание на созданый объект, НО вот будут ли те ссылки в TList и в поле класса Obj одинаковыми, что бы можно было использовать a=b?
(Offline)
 
Ответить с цитированием
Старый 04.12.2007, 17:31   #5
dimanche13
Мастер
 
Регистрация: 19.03.2007
Сообщений: 1,039
Написано 153 полезных сообщений
(для 252 пользователей)
Re: Какой объект в TList сейчас обрабатывается?

мда... нифига не понял, надеюсь, что хть ты сам понимаешь что делаешь. Если хочешь, чтобы тебе помогли, учись правильно и четко формулировать вопросы.
Короче, попробуй так: сделай метод get()
type TBuilding
...
method Get:TBuilding()
  return self ' вернуть себя
end method
...
end type
и в любой момент можешь "взять" объект этим методом.
__________________
(Offline)
 
Ответить с цитированием
Старый 04.12.2007, 17:48   #6
Trilliput
Знающий
 
Регистрация: 27.07.2006
Сообщений: 250
Написано 6 полезных сообщений
(для 7 пользователей)
Re: Какой объект в TList сейчас обрабатывается?

Сделал немного подругому:
Type TBuilding

' ссылка на себя, значение присваиватся при создании экземпляра класса
Field TowerName
'Текущий выбраный объект
Global TowerS = Null
'Выбран ли объект
IsSelected = false

Method Update()
If Click() then Not(IsSelected)
If IsSelected then
TowerS = TowerName
else
TowerS = Null
endif
If TowerName <> TTower.TowerS Then Selected=0
end method()

Ну а дальше Draw() уже рисует согласно разным параметрам.

Тк нет смысла каждый раз выполнять "вернуть себя", решил просто добавить еще одно поле в класс, но за метод спасиб, думаю что понадобиться.
(Offline)
 
Ответить с цитированием
Старый 04.12.2007, 18:54   #7
jimon
 
Сообщений: n/a
Re: Какой объект в TList сейчас обрабатывается?

не знаю нафиг такой гемор, я для редактора зделал
отдельный тип SelectedObjects и всю работу с ними
типа повернуть выделеные обьекты, переместить выделеные обьекты
и тд удобно и практично

ps. что мешает в Building.Update писать так ?
if something then
Selected = true
LastSelected.Selected = false
LastSelected = self
end if
 
Ответить с цитированием
Старый 04.12.2007, 20:12   #8
Trilliput
Знающий
 
Регистрация: 27.07.2006
Сообщений: 250
Написано 6 полезных сообщений
(для 7 пользователей)
Re: Какой объект в TList сейчас обрабатывается?

Гы, можно и так.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Курсор и объект Hurrit 3D-программирование 13 13.10.2009 22:33
TList<> Fla Проекты C++ 7 25.04.2008 23:42
Объект & функция DRAG C++ 6 02.12.2007 03:18
В какой объект ткнули Данил BlitzMax 11 29.10.2007 12:47
Help:::TList zheland 2D-программирование 1 28.10.2007 18:15


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


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