forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Уже наболевшее.. (http://forum.boolean.name/showthread.php?t=6097)

Samarik 17.07.2008 20:07

Ответ: Уже наболевшее..
 
весь код создания частиц
Код:

Type blood_particle

Field x#,y#,z#
Field speed#
Field speed2#
Field life#
Field particle_type
Field particle_copy

End Type

Function Create_blood(x#,y#,z#,col)

For i=1 To col
e.blood_particle=New blood_particle
e\x=x
e\y=y
e\z=z
e\speed=Rnd(.03,.09)
e\speed2=Rnd(.05,.1)
e\life=45

size#=Rnd(.1,.5)
e\particle_type=CreateSprite()
ScaleSprite e\particle_type,size,size
HideEntity e\particle_type

blood_tex=LoadTexture("tex/blood_particle2.png")
TextureFilter "blood_particle2",2
EntityTexture e\particle_type,blood_tex

e\particle_copy=CopyEntity(e\particle_type)

RotateSprite e\particle_copy,Rnd(360)
PositionEntity  e\particle_copy,x,y+.8,z
RotateEntity e\particle_copy,Rnd(-180),Rnd(-180),Rnd(-180)
EntityType e\particle_copy,Blood
Next

End Function



Function Update_blood()

For w.blood_particle=Each blood_particle

w\life=w\life-1*framePeriod*.01

MoveEntity w\particle_copy,0,w\speed2*framePeriod*.1,0
w\speed=w\speed-.03*framePeriod*.01
TranslateEntity w\particle_copy,0,w\speed*framePeriod*.08,0

bloodcoll=EntityCollided(w\particle_copy,PlaneC)
If bloodcoll <> 0 w\speed2 = .01

EntityAlpha w\particle_copy,w\life*.1*framePeriod*.02

If w\life < 0 Then
FreeEntity w\particle_copy
Delete w
particle2=0
Else
particle2=1
EndIf

Next

End Function


ABTOMAT 17.07.2008 21:21

Ответ: Уже наболевшее..
 
blood_tex=LoadTexture("tex/blood_particle2.png")
Грузим текстуру с винчестера по нескольку раз.
Отсюда и тормоза.

Samarik 17.07.2008 21:28

Ответ: Уже наболевшее..
 
чё??

ABTOMAT 17.07.2008 21:33

Ответ: Уже наболевшее..
 
Цитата:

Сообщение от Samarik (Сообщение 82456)
чё??

хде??
Кстати это ещё и память засирает
т.к. грузишь много раз но не удаляешь.

после объявления граф. режима прописать это:
Global blood_tex=LoadTexture("tex/blood_particle2.png",2)

и вот эти 2 строчки выкинуть из ф-ии создания спрайта:
blood_tex=LoadTexture("tex/blood_particle2.png")
TextureFilter "blood_particle2",2

HolyDel 17.07.2008 21:47

Ответ: Уже наболевшее..
 
Samarik, мсье маньяк?

nuclear-90 17.07.2008 22:11

Ответ: Уже наболевшее..
 
звезда в шоке))

Samarik 18.07.2008 00:03

Ответ: Уже наболевшее..
 
АВТОМАТУ спасибо, во всем разобрались. холидел и нуклеар, вы че имели ввиду?:)

FrankH 18.07.2008 00:05

Ответ: Уже наболевшее..
 
У тя функция загрузки прототипа и копирование готового прототипа на конвеер совмещены в одну, ты каждый раз создаешь спрайт, загружаешь текстуру, копируешь этот спрайт, в итоге у тебя в 2 раза больше спрайтов(и половина не удаляется) и куча тектур(они тоже не удаляются, а заполняют память), и в добавок еще тормоза от кучи лишних действий.
Загрузи частицу и текстуру ОДИН РАЗ, примени текстуру и свойства, хайдни, а уже при создании частиц крови просто копируй ее, затем удаляя копию...

Samarik 18.07.2008 10:22

Ответ: Уже наболевшее..
 
С этим я и разобрался уже. все, не смотрите на тот код шо в начале страницы:)

Dream 19.07.2008 04:21

Re: Уже наболевшее..
 
Я делал так
Код:


add_spark(0,0,38,100,2,monster\model,1,2)

где monster\model - модель бота. пишем это там где у тебя идёт колиззион с ботом

Код:


Function add_spark(x#,y#,z#,times#,scale#,parent,types,ismagic)
 spark.spark=New spark
 spark\is=1
 spark\ismagic=ismagic
 ;add_spark(0,0,0,30,1,allfire\spr[i],2,2)
If ismagic<2
 If types=1
  spark\img=CopyEntity(flame01,parent)
  EntityColor spark\img,Rnd(150,250),Rnd(0,100),0
 ElseIf types=2
  spark\img=CopyEntity(flame02,parent)
  EntityColor spark\img,0,Rnd(0,100),Rnd(150,250)
 
 EndIf
ElseIf ismagic=2
 spark\img=CopyEntity(spr1,parent)
 EntityColor spark\img,Rnd(150,250),Rnd(0,100),0
ElseIf ismagic=3
 spark\img=CopyEntity(flame01,parent)
 EntityColor spark\img,Rnd(150,250),Rnd(0,100),0
EndIf
EntityType spark\img,20
 
 spark\parent=parent
If ismagic=0
 spark\x#=Rnd(-0.8,0.8)
 spark\y#=Rnd(0.8,1.6)
 spark\z#=Rnd(-0.8,0.8)
 PositionEntity spark\img,x#,y#,z#
ElseIf ismagic=1
 spark\x#=Rnd(-0.4,0.4)
 spark\y#=Rnd(-0.1,0.6)
 spark\z#=Rnd(-0.3,1)
 PositionEntity spark\img,x#,y#,z#
 EntityParent spark\img,0
ElseIf ismagic=2
 spark\x#=Rnd(-0.3,0.3)
 spark\y#=Rnd(-0.1,0.4)
 spark\z#=Rnd(-0.1,0.2)
 PositionEntity spark\img,x#,y#,z#
 EntityParent spark\img,0
ElseIf ismagic=3
 spark\x#=Rnd(-0.04,0.04)
 spark\y#=Rnd(0.01,0.08)
 spark\z#=Rnd(-0.04,0.04)
EndIf
 
 ScaleSprite spark\img,scale,scale
 ShowEntity spark\img
 spark\scale#=scale#
 spark\times#=times#
 spark\alp#=1/times#*1000
End Function


Function update_spark()
For spark.spark=Each spark
 If spark\is=1
  spark\times#=spark\times#-1
  If spark\times>0
  If EntityCollided (spark\img,1)
    FreeEntity spark\img
    Delete spark
    Goto nesx
  EndIf
  MoveEntity spark\img,spark\x#,spark\y#,spark\z#
  EntityAlpha spark\img,spark\times#*spark\alp#/1000
  If spark\ismagic<>1
    spark\y#=spark\y#-Rnd(0.01,0.03)
  Else
    spark\y#=spark\y#-Rnd(0.004,0.008)
  EndIf
  Else
  FreeEntity spark\img
  Delete spark
  EndIf
 EndIf
 .nesx
Next
End Function

где flame01,flame02, spr1 - загруженые спрайты.
update_spark() - вставь в основном цикле
поэксперементируй с параметрами add_spark(x#,y#,z#,times#,scale#,parent,types,isma gic)

Samarik 20.07.2008 03:15

Ответ: Уже наболевшее..
 
эт ты к чему ваще все это написал?

Dream 20.07.2008 03:22

Re: Уже наболевшее..
 
небуду сорить в форуме, напишу тут..

у меня проблема с реализацией частиц, проблема состоит в том что я немогу сделать так чтоб частицы летели из бота, в которого я попал.
создал я частицы, они работают, создал условие что при коллизии пули с ботом летят частицы, всё это работает..
добился того что при колизии пули с ботом вылазит ошибка "ентити даз нот ексист.." ну эт када я пробовал с командами EntityX(Bot),y,z и тд..

выложу код частиц

К этому гг))):-D


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot