Speed-Verlust

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

ZhangHe2

Betreff: Speed-Verlust

BeitragMi, Jan 05, 2005 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Es geht um eine Explosion mit Hilfe von Sprites , obwohl ich dir sprites mit hilfe von hidyentity versteck bzw lösche wird es immer langsamer irgednwie hindert es mich daran weiterzumachen Sad

Ich weiß das die meisten kein bock haben nen code durch zu gucken aber falls wer lust hat.

Habs so gemacht das man es so starten kann , also die Explosion besteht nur aus "CreateSprite".,guckt ruhig rein und sagt mir mal ob die explo gut aussieht.

Code: [AUSKLAPPEN]

graphics3d 1600,1200,16,2
SETBUFFER BACKBUFFER()

type granate
field sphere
field exist
end type

Global fps_anzeige
Global fps_ms=MilliSecs()
Global fps_frames
;plane_tex=loadtexture("grass.bmp")


framer=CREATETIMER(80)
;plane1
global plane=createplane()
;entitytexture plane,plane_tex
;scaletexture plane_tex,80,80
entitycolor plane,125,0,0
;end plane1

;plane2
plane2=createplane()
turnentity plane2,180,0,0
positionentity plane2,0,100,0
entitycolor plane2,0,0,125
;end plane2
;camera
global camera=createcamera()
camerarange camera,1,10000
camerafogmode camera,1
camerafogrange camera,1,1000
entityradius camera,10,1
positionentity camera,0,10,0
;end camera
entitytype camera,1
entitytype plane,2

;ambientlight 255,255,255

repeat
collisions 1,2,2,2
WAITTIMER (framer)
Fps()
seedrnd millisecs()
if keyhit(57) then partikel1(0,0,0,1,1,1,360,360,360,1,0,1,1)
partikel1update(.2,0.03)

;bewegung
if keydown(17) then moveentity camera,0,0,2
if keydown(31) then moveentity camera,0,0,-2
msx#=mousexspeed()
msy#=mouseyspeed()
turnentity camera,0,-msx/10,0 ,1
turnentity camera,msy/10,0,0,0
movemouse 800,600
hidepointer
;end bewegung
;granate
if mousedown(1)
bombe.granate=new granate
bombe.granate\sphere=createsphere(12,camera)
positionentity bombe.granate\sphere,1.5,0,0
entityparent bombe.granate\sphere,0
entitytype bombe\sphere,1
entityradius bombe\sphere,2
bombe\exist=1
endif

for bombe=each granate
   if bombe\exist=1
      moveentity bombe\sphere,0,0,10
      if entitycollided(bombe\sphere,2)
        partikel1(0,0,0,1,1,1,360,360,360,1,bombe\sphere,1,50)
        bombe\exist=0
        hideentity bombe\sphere
        freeentity bombe\sphere
      endif
   endif    
next


;end granate
                                                                                                                                    
updateworld:renderworld
b=renderworld

Text 0,0,"FPS: "+fps_anzeige
Text 0,10,"Linke Maustaste um zu schießen"
Text 0,20,"F1-WireFrame Toggle"

if keyhit(59) then wf=1-wf

flip 0
wireframe wf

until keyhit(1)
FREETIMER framer
clearworld
end





;functionen
Function Fps()
   fps_frames=fps_frames+1
   If MilliSecs()-fps_ms >= 1000 Then
      fps_anzeige=fps_frames
      fps_frames=0
      fps_ms=MilliSecs()
   EndIf
End Function

type partikel
field exist
field spark%
field spark2%
field speed#
field fade#
field typ%
end type

global explosion.partikel,anzahl,typ


function partikel1(p1x,p1y,p1z,p1minx,p1miny,p1minz,p1maxx,p1maxy,p1maxz,typ%,parent$=0,fadewert#=1,anzahl=100)
for i=1 to anzahl
explosion.partikel=new partikel
if typ=1 or typ=3 then explosion.partikel\spark=createsprite(parent$);loadsprite("rauch.bmp",1,parent$)
if typ=2 or typ=4 then  explosion.partikel\spark=createsprite(parent$);loadsprite("partikel.bmp",1,parent$)
explosion.partikel\exist=1
explosion.partikel\typ=typ
explosion.partikel\fade=fadewert
explosion.partikel\speed=rnd(1,2)
scalesprite explosion.partikel\spark,10,10
turnentity  explosion.partikel\spark,rnd(p1minx,p1maxx),rnd(p1miny,p1maxy),rnd(p1minz,p1maxz)
positionentity explosion.partikel\spark,p1x,p1y,p1z
entitycolor explosion.partikel\spark,RAND(255),rand(100),rand(100)
entityparent explosion.partikel\spark,0
entityalpha explosion.partikel\spark,fadewert#

next
end function

function partikel1update(gravitation,autofadespeed#=0)
for explosion=each partikel
translateentity explosion.partikel\spark,0,-gravitation,0
moveentity explosion.partikel\spark,0,0,explosion.partikel\speed#
explosion.partikel\fade=explosion.partikel\fade-autofadespeed
entityalpha explosion.partikel\spark,explosion.partikel\fade
if explosion.partikel\fade=0
       hideentity explosion.partikel\spark
         freeentity explosion.partikel\spark
       delete each partikel
      for i=1 to anzahl
        hideentity explosion.partikel\spark
         freeentity explosion.partikel\spark
       delete each partikel
      next
endif   
next

end function

 

gamble

BeitragMi, Jan 05, 2005 19:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht mal die utopische Auflösung heruntersetzen? Wink
 

ZhangHe2

BeitragMi, Jan 05, 2005 19:50
Antworten mit Zitat
Benutzer-Profile anzeigen
ja,aber hiilft nicht wirklich ^^
 

Dreamora

BeitragMi, Jan 05, 2005 19:54
Antworten mit Zitat
Benutzer-Profile anzeigen
ich vermises da clearcollisions ( oder wie das ging ) aber kann sein dass ich das übersehe

und nur 1x renderworld statt 2x renderworld aufrufen würde sicher auch helfen


und dann wär da noch ...

partikel1 hat load drin und load MUSS vor der mainloop sein nicht in der mainloop sonst überfüllst du den arbeitsspeicher bis dein system abkratzt
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

OJay

BeitragMi, Jan 05, 2005 20:02
Antworten mit Zitat
Benutzer-Profile anzeigen
2mal renderworld? und was soll das: "b=renderworld" ???

dann: du brauchst nicht hideentity aufzurufen, wenn du das entity eh sofort danach löschst...

du solltest sprites per copyentity() von einem mastersprite erstellen. das ist schneller, als sie jedesmal neu zu erstellen

weiterhin solltest du dringend an deinem codestil arbeiten! mal eingerückt, mal nicht, deklarationen UNTERHALB des mainloops (wtf?!), NULL kommentare etc etc...


bei mir läuft das allerdings, trotz extremer fehler, ziemlich flüssig...
 

ZhangHe2

BeitragMi, Jan 05, 2005 20:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo,an meinem Codestil werde ich noch arbeiten , das mit dem Renderworld war ein fehler von mir den ich wohl übersehen habe.Dieser Code besteht eigentlich aus 2 bb files darum die Deklarationen unterhlalb Loops.Ok,Kommentare sind ein bisschen rar Smile.Werd mal mit Copyentity() arbeitenn.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group