Тема: Type in Type
Показать сообщение отдельно
Старый 05.01.2008, 18:10   #4
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Type in Type

а вот и черезжопное решение (оказывается можно сделать):
1.ето работает
2. код абсолютно не читаем. идея аффтора не сохранена.
3. зато всего один перебор
; Надеюсь, _здесь_ комментарии не нужны?
Graphics3D 800,600,32,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()

cam = CreateCamera()
lit = CreateLight()
RotateEntity lit, 0,80,34
PositionEntity cam, 0,0,-30
;----------------
; Главный тип, содержащий поле из типа "coords"
Type player
Field img
Field pos.coords
End Type

; Подтип. ID-поля нужны для "синхронизации" главного типа и подтипа.
Type coords
Field ID
Field x#
Field y#
End Type
;----------------
; Генерим 30 спрайтов, и объектов соответственно
For c=1 To 30
p.player = New player
p\img = CreateSprite()
; выбираем ID... Как видно, шансы совпадения ID->0. Для чего? А сами поразмыслите...
; Можно конечно было сделать все через счетчик, но данный метод довольно надежен
p\pos.coords = New coords ; Обращаемся непосредственно к подтипу
p\pos\x = Rand(-40,40)
p\pos\y = Rand(-40,40)
p\pos\ID = Handle(p)
; Начальная расстановка
PositionEntity p\img,p\pos\x,p\pos\y,0
EntityColor p\img,Rand(255),Rand(255),Rand(255)
Next
;----------------
While Not KeyDown(1)=True
;----------------

;Хитрозакрученное черезжопное решение
For ps.coords = Each coords
ps\x = ps\x-0.003*Sgn(ps\x)
ps\y = ps\y-0.003*Sgn(ps\y)

p.player=Object.player(ps\ID)
PositionEntity p\img,ps\x,ps\y,0
Next

;----------------
RenderWorld()
Flip
Wend
End ; no comments for this block. . .
;----------------
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо HolyDel за это полезное сообщение:
DeadElf (18.09.2009), tormoz (03.03.2008)