Показать сообщение отдельно
Старый 05.03.2012, 07:32   #10
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Упорядоченное исчезновение объектов

Сообщение от Devilox Посмотреть сообщение
for...each я пробовал и функцию отдельную делал, но я не могу понять, как в этом случае мне выделять отдельные объекты и для каждого прописывать координаты...
ты пули создаёшь, и ставишь им координату, так же и тут:

;1й блок
local b.blocks = New blocks
b\ent = CopyEntity(block)
;сохраняем в имени объекта "указатель на тип", который позволит 
;без перебора в цикле получить доступ к объекту типа
NameEntity (b\ent, Handle(b))
PositionEntity b\ent, 0, -6, 5
;2й блок
b.blocks = New blocks
b\ent = CopyEntity(block)
NameEntity (b\ent, Handle(b))
PositionEntity b\ent, 0, -2, -15
;и так далее
для обработки коллизии игрока с блоками не нужно пробегать в цикле по блокам, т.к. можно сделать проверку коллизии не блоков с игроком, а игрока с блоками. При этом пригодятся команды Handle и Object:

Local blockEntity% = EntityCollided(player, Tblock)
If (blockEntity<>0)
	;получаем "указатель на тип", который заранее сохранили в имени энтити
	Local b.blocks = Object.blocks (EntityName (blockEntity))
	FreeEntity (blockEntity)
	Delete (b)
EndIf
а если надо по порядковому номеру (index) или идентификатору (id) получить объект из списка, то можно такие функции применить:

Function getBlockByIndex.blocks(index%)
	Local b.blocks
	Local i%=0
	For b = Each blocks
		If(i = index) Return b
		i = i+1
	Next
	Return Null
End Function

Function getBlockById.blocks(id%)
	Local b.blocks
	For b = Each blocks
		If(b\id = id) Return b
	Next
	Return Null
End Function
предварительно добавив в тип blocks поле id%.

Я рекомендую по стилю вот что:

- типы называй начиная с заглавной буквы T: TBullet, TBlock и т.д.
- типы коллизий объявляй константой и большими буквами, как сделано для пуль:
Const TYPE_PLAYER = 1
Const TYPE_BLOCK = 2
Const TYPE_BULLET = 3
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Жека за это полезное сообщение:
Devilox (05.03.2012), LLI.T.A.L.K.E.R. (06.03.2012)