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

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

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

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 17.03.2011, 22:54   #1
Drayfer
Нуждающийся
 
Регистрация: 14.02.2011
Адрес: Украина, Луганск
Сообщений: 67
Написано 0 полезных сообщений
(для 0 пользователей)
Как обратиться к экземпляру структуры по индексу?

Как в нижеприведенном коде обратиться к полям динамически создаваемым экземплярям структуры door.doortype по индексу?
map=LoadAnimMesh("pri.b3d") 

Type doortype
	Field mesh
	Field state
End Type

For i=2 To CountChildren(map)
	child=GetChild(map,i)
	name$=EntityName(child)
	If Left$(name$,4)="dver"   ; проверка имени объекта данного в максе
		door.doortype=New doortype
		door\mesh=child
		door\state=1                    
	EndIf 
Next
Этот пример считывает чайлды - т.е. двери с карты уровня. Вот например допустим я хочу обратиться к полю door\state третьей двери. Как это сделать?
door(3)\state - не получается, как по другому?
(Offline)
 
Ответить с цитированием
Старый 17.03.2011, 23:24   #2
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,741
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Как обратиться к экземпляру структуры по индексу?

Насколько я знаю, это не предусмотрено.
Можешь сделать массив и совать ссылки на объекты класса door туда, потом уже по индексу обращаться.

Вдруг не знал:
Ко всем объектам класса можно обратиться так
For d.doortype = Each doortype
     EntityColor(d\mesh,255,0,0); например
next
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Старый 17.03.2011, 23:36   #3
ІГРОГРАЙКО
ПроЭктировщик
 
Аватар для ІГРОГРАЙКО
 
Регистрация: 20.06.2009
Адрес: Україна
Сообщений: 152
Написано 10 полезных сообщений
(для 24 пользователей)
Ответ: Как обратиться к экземпляру структуры по индексу?

Да. Только через
For <indef.type> Each <type>
В Блице иначе никак...
__________________
Blitz3D, XNA, WebGL, OpenGL, Unity3D
PC: ASUS A55VM Core i3 (2.4Ghz), 6 Gb RAM, Nvidia GF 630M GT 2Gb
(Offline)
 
Ответить с цитированием
Старый 18.03.2011, 00:38   #4
Hurrit
Мастер
 
Аватар для Hurrit
 
Регистрация: 27.01.2008
Адрес: Россия, СКФО, ЧР, Грозный
Сообщений: 1,144
Написано 578 полезных сообщений
(для 2,207 пользователей)
Ответ: Как обратиться к экземпляру структуры по индексу?

Ну, вариант первый это использовать массив, а вариант второй может быть такой:

Function GetEntityHandle%(num)
d.door=first door

for i=1 to num-1
 d
.door=after door
next
return handle(d.door)
end function 
че-то вроде этого, фунцкция должна возвращать хэндл объекта по списку, однако возможно надо подработать, так как писал по памяти.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
LLI.T.A.L.K.E.R. (18.03.2011)
Старый 18.03.2011, 09:56   #5
Venom2
 
Сообщений: n/a
Ответ: Как обратиться к экземпляру структуры по индексу?

Type Door
	Field ID%
End Type

Local Door.Door, i%

For i = 1 To 10
	Door = New Door
	; Функция Handle формирует индексную карту
	; записывая туда указатель на объект под его порядковым номером
	; возвращает соответственно порядковый номер
	Door\ID = Handle(Door)
Next

; Достаем из карты объект по индексу - порядковому номеру (1...N)
Door = Object.Door(3)
; Обязательно проверяем на нуль
; т.к. после удаления обьекта слот карты остается
; и под тем же индексом уже будет нуль
If Door <> Null Then Print(Str(Door\ID)) Else Print("Слот пустой!")

; Ну и еще один трюк, удаление всех объектов встроеным циклом
Delete Each Door

WaitKey()

End
И пример подобной карты на блице
Type Door
	; обязательные поля для размещения в индексной карте
	Field Link.Door, Index%
	; тут какие-то свои поля
End Type

;
; Кол-во слотов в индексной карте
;
Const MapSize% = 1024

;
; Создает дверь с индексом Index и размещает в карте Map
;
Function NewDoor.Door(Map.Door[MapSize], Index%)
	Local Door.Door
	Door = New Door
	Door\Index = Index
	Index = Index Mod MapSize
	Door\Link = Map[Index]
	Map[Index] = Door
	Return Door
End Function

;
; Удаляет дверь по индексу Index из карты Map
;
Function DeleteDoor(Map.Door[MapSize], Index%)
	Local Temp.Door, Door.Door
	Temp = Null
	Door = Map[Index Mod MapSize]
	While Door <> Null
		If Door\Index = Index Then
			If Temp <> Null Then
				Temp\Link = Door\Link
			Else
				Map[Index Mod MapSize] = Door\Link
			End If
			Delete Door
			Exit
		End If
		Temp = Door
		Door = Door\Link
	Wend
End Function

;
; Возвращает дверь по индексу Index из карты Map
;
Function GetDoor.Door(Map.Door[MapSize], Index%)
	Local Door.Door
	Door = Map[Index Mod MapSize]
	While Door <> Null
		If Door\Index = Index Then Return Door
		Door = Door\Link
	Wend
	Return Null
End Function

;
; Пример
;

Local DoorMap.Door[MapSize]

Local Door.Door, i%

For i = 1 To 10
	Door = NewDoor(DoorMap, i)
Next

Door = GetDoor(DoorMap, 3)
If Door <> Null Then Print(Str(Door\Index)) Else Print("Слот пустой!")

DeleteDoor(DoorMap, 3)

Door = GetDoor(DoorMap, 3)
If Door <> Null Then Print(Str(Door\Index)) Else Print("Слот пустой!")

WaitKey()

End
Т.е. получается массив однонаправленных списков, список растет в случае добавления обьекта в уже занятый слот, зависит от размера массива и функции распределения указателей (в данном элементарном случае это Mod)
 
Ответить с цитированием
Старый 18.03.2011, 12:17   #6
Alex_Noc
Разработчик
 
Регистрация: 02.04.2007
Сообщений: 353
Написано 54 полезных сообщений
(для 289 пользователей)
Ответ: Как обратиться к экземпляру структуры по индексу?

Слушай - ты вообще двери тупо расставить хочешь или что? Они у тя открываться то будут? Открываться чем? Открываться как?(Все поворотные , или половину опускающихся, или половину на ключах или от погоды зависят...) Дистанция или пики? Связывай события !!!
Если дистанс меньше значения то
если нажата кнопка или мышка или зачесалось в ухе тогда
передать хендл обьекта в переменную "текущая дверь"
если статус текущей двери "закрыт" тогда открыть
иначе закрыть.
ну или чтото типа того %)))
Чето последнее время у всех туго с дверьми стало!!! (задачка для 3-текласника!)
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
maxturbo (18.03.2011)
Старый 18.03.2011, 12:34   #7
maxturbo
Разработчик
 
Аватар для maxturbo
 
Регистрация: 19.05.2009
Адрес: Россия Иркутская область
Сообщений: 350
Написано 51 полезных сообщений
(для 66 пользователей)
Ответ: Как обратиться к экземпляру структуры по индексу?

Сообщение от Alex_Noc Посмотреть сообщение
Чето последнее время у всех туго с дверьми стало!!! (задачка для 3-текласника!)
Видать игры такие пошли в последнее время что одни двери
__________________
(Offline)
 
Ответить с цитированием
Старый 18.03.2011, 12:38   #8
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 502 полезных сообщений
(для 1,012 пользователей)
Ответ: Как обратиться к экземпляру структуры по индексу?

можно порще, пикаем дверь (он возращает хандл),а потом ето хандл используем например в TurnEntity
__________________
Сайт: http://iexpo.ml
(Offline)
 
Ответить с цитированием
Старый 18.03.2011, 14:10   #9
Alex_Noc
Разработчик
 
Регистрация: 02.04.2007
Сообщений: 353
Написано 54 полезных сообщений
(для 289 пользователей)
Ответ: Как обратиться к экземпляру структуры по индексу?

Ага Костян )), это ты мой пост прочитал ), ибо я поэтому и сказал что много чето парок с дверьми - отвечал недавно на подобный вопрос.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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