![]() |
Удаление частиц
Добрый день, в поиске почему-то я по конкретному вопросу не нашел... В общем пишу систему частиц(типа шлейф за чем-нибудь) для небольшой аркады. Смысл такой - рисуется пять спрайтов за один цикл на месте player'a, и так как он у меня с постоянной скоростью перемещается(что-то типа летящего самолетика подбитого), то этого в полне хватает визуально. Но проблема в другом - спрайты у меня вырисовываются через массив и я никак не могу избавиться от переполнения массива. Ну а если делать просто через нью тайп, то не получается удалять лишний хвост. А библиотеки левые прикручивать не хочу. Вот простой исходничек, посмотрите пожалуйста:
Dim particle(20000) Graphics3D 1024,768,32,1 light=CreateLight() TurnEntity light, 45,45,0 Player=CreateCube() PositionEntity Player,0,5,15 cam=CreateCamera() PositionEntity cam,14,0,-20 CameraRange cam,0.1,110000 plane=CreatePlane() PositionEntity plane,0,-20,0 EntityColor plane,20,120,20 asp = LoadTexture("media/tex.jpg") ScaleTexture asp, 50, 50 EntityTexture plane, asp hvost = LoadSprite("media/lens.jpg") Repeat For b=1 To 5 i=i+1 particle(i) = CopyEntity(hvost,particle(i)) PositionEntity particle(i),EntityX(Player)+Rnd(-1,1),EntityY(Player)+Rnd(-0.5,0.5),EntityZ(Player) If i>150 Then HideEntity particle(i-150) Next MoveEntity cam,1,0,0 MoveEntity player,0,-0.3,0 MoveEntity player,1,0,0 If KeyDown(200) Then MoveEntity player,0,0.4,0 If KeyDown(1) Then Exit UpdateWorld RenderWorld Text 10,14,"Array "+i Flip Forever |
Re: Удаление частиц
Так у тебя счетчик все время увеличивается. Сделай лимит чтоли или или уменьшай его. А вообще нужно создать еще один цикл и усе.
For b=1 To 5 For i=0 to 19999 particle(i) = CopyEntity(hvost,particle(i)) PositionEntity particle(i),EntityX(Player)+Rnd(-1,1),EntityY(Player)+Rnd(-0.5,0.5),EntityZ(Player) If i>150 Then HideEntity particle(i-150) Next |
Re: Удаление частиц
Цитата:
Код:
Graphics3D 1024,768,32,1 |
Re: Удаление частиц
Что-то он p\entity найти не может...
|
Re: Удаление частиц
Не делай, как говорит Nord)
Можно заранее сделать массив, как у тебя. Тогда при достижении счетчика максимального значения, обнуляй его. При этом самые страые спрайты, которые уже наверняка не видно, будут подставляться вместо новых. Естественно, надо задать каждому спрайту время жизни, чтобы он не болтался вечно. Можно через тип создавать каждый раз необходимое количество. Этот подход может быть проще. Опять же каждому спрайту задавай значение жизни, отнимай его каждый кадр и удаляй спрайт, когда жизнь = 0. Только ни в коем случае нельзя грузить картинку в главном цикле. Тут или CopySprite, или лучше реализовать первый вариант: создать вначале определенное количество спрайтов, а потом их прятать, когда жизнь = 0. При этом будет лучше производительность. А в конце программы все удалить. |
Re: Удаление частиц
Нечайно lens.jpg.bmp прописал. Пробуй, сейчас всё работает.
alcoSholik, может объяснишь мне на будущее чем мой вариант плох. Я вроде это же и сделал: Цитата:
|
Re: Удаление частиц
Спасибо Nord, сейчас все работает отлично, поменял loadsprite на copy и все замечательно... и производительность хорошая!
|
Re: Удаление частиц
Nord
"Низя грузить" ты уже потом сделал. А так, действительно, это тот же второй вариант, о котором я упомянул. |
Re: Удаление частиц
[offtоp]
Следует отвлеченно заметить, что в случае, когда необходимое кол-во партиклов довольно велико, заранее известно, количество создавамых партиклов должно ограничиваться неким максимальным числом- использование группы обычных одномерных массивов вместо типов даст преимущество в скорости просчёта логики от 10% до 30% в зависимости от метода реализации. Если используются простейшие сингсёрфейсные партиклы, количество которых ограничено по определению- массивы тоже весьма удобны. Однако, использование массивов в данной конкретной специфике всё же следует признать скорее своеобразным финтом ушами, - местами неудобным, местами "непедагогичным", и как правило не дающим значительного прироста скорости. Потому начинающему пользователю, который еще довольно смутно представляет суть происходящих процессов лучше от использования массивов воздержаться. P.S. я же массивы люблю и уважаю. [/offtоp] |
Часовой пояс GMT +4, время: 18:50. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot