FreeEntity bringt nix??!!? - erledigt

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

rctuner

Betreff: FreeEntity bringt nix??!!? - erledigt

BeitragSo, Apr 30, 2006 16:22
Antworten mit Zitat
Benutzer-Profile anzeigen
hi ich hab ein Problem:

in meiner schuss function werden sprites abgefeuert. In meiner MaschienPistole also 10 schuss die sek. Am start des Spiels hab ich ca. 70 Frames. Nachdem ich ca. 500 Schuss abgefeuert hab (und die Sprites nach der Unteren Function wieder verschwunden sind) hab ich nurnoch ca. 50 Frames.

Warum sinken wie Frames? Die Sprites sind ja schon lange wieder verschwunden und durch FreeEntity gelöscht worden.




Code: [AUSKLAPPEN]
bullets\destroys = now + 5000
      bullets\alpha# = 1.0


Code: [AUSKLAPPEN]

      If now >= bullets\destroys - 1000 Then
         bullets\alpha# = bullets\alpha# -0.01   
         EntityAlpha bullets\objs,bullets\alpha#
      ElseIf now >= bullets\destroys Then
         FreeEntity bullets\objs
               FreeEntity bulletsprite2
      FreeEntity bulletsprite
Delete bullets


      EndIf
  • Zuletzt bearbeitet von rctuner am Di, Mai 02, 2006 14:22, insgesamt einmal bearbeitet

darth

Betreff: ..

BeitragSo, Apr 30, 2006 19:32
Antworten mit Zitat
Benutzer-Profile anzeigen
löschst du auch die types?
wenn du nur den schuss löschst, aber alle 500 types bestehen,
dann muss der immer eine 500er schleife durchgehen, und das braucht auch seine zeit...

[edit]
oops :/ übersehen... naja vergiss was ich geschrieben hab
Diese Signatur ist leer.
  • Zuletzt bearbeitet von darth am Mo, Mai 01, 2006 11:16, insgesamt einmal bearbeitet

Mr.Keks

BeitragSo, Apr 30, 2006 23:49
Antworten mit Zitat
Benutzer-Profile anzeigen
@dg: da steht doch "delete bullets"!


das finde ich allerdings seltsam:
Code: [AUSKLAPPEN]
FreeEntity bulletsprite2
FreeEntity bulletsprite

scheint ja nicht direkt mit einem einzelnen bullet zusammenzuhängen.
wäre vielleicht ganz interessant, wenn du auch den erstellungscode des bullets posten könntest Smile.
MrKeks.net

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Mai 01, 2006 3:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Pack ein Zähler in die For/Each -Schleife ein, um zu sehen ob sie auch wirklich gelöscht werden und nicht nur durch Alpha unsichtbar geworden sind. Wenn das nicht das Problem ist, dann versuche es mal als Singlesurface zu machen. Sprites sind eines der langsamsten Entitys die B3D zu bieten hat (keine Ahnung warum). Als Singlesurface hast du eine um etwa zehnfache Geschwindigkeitssteigerung.

rctuner

BeitragMo, Mai 01, 2006 12:16
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Inarie:

FreeEntity bulletsprite2
FreeEntity bulletsprite

hab ich nur dazu ergänzt als reinen Test.

Eigendlich müsste nur "FreeEntity bullets\objs" ausreichen.
Hängt also doch mit allen Bullets zusammen.

@ hectic:

Ich hab auch schon versucht ein einfaches Sphere zu nehmen. Hab geschossen, gewartet biss sie verschwunden sind und hab in den WireFrame geschaltet. Aber da waren sie auch net mehr zu sehen.

Singlesurface?? Hab ich noch nie gehört. Wie mach ich das?
 

Dreamora

BeitragMo, Mai 01, 2006 12:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein nur den Sprite ausradieren wäre nicht ausreichend, weil dann die liste aller Sprite Types immer länger wird. (speicherverbrauch, braucht länger zum durchloopen)

Dennoch müssten wir den Code deiner Erzeugungsfunktion haben mit welcher du neue bullets erzeugst, da entweder dort oder in der speicherung einer globalen variable der Fehler drin stecken dürfte.

PS: Code in der Art von "der war nur für xy ist aber nicht im echte" machen wenig sinn zu posten. Wir brauchen jeweils den effektiven Code (am besten ein beispiel das genau das Problem hat aber kurz ist, so das man es auch wirklich analysieren kann. denn 200 zeilen code werden dir nur wenige analysieren)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

rctuner

BeitragMo, Mai 01, 2006 12:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay hier mal alles was dazu gehört:

Code: [AUSKLAPPEN]
Type bullets
Field objs
Field destroys
Field alpha#
End Type



Code: [AUSKLAPPEN]
Global bulletsprite2 = LoadSprite("data\bluspark.bmp")

EntityType bulletsprite2,TYPE_SHOT

HideEntity bulletsprite2

EntityRadius bulletsprite,30.5
ScaleSprite bulletsprite2,10,10







Code: [AUSKLAPPEN]
If weapon$ = "Gewehr"
If MouseDown(1)
If muniS>0
If sek>1/10 Then


muniS=muniS-1
bullets.bullets = New bullets
      bullets\objs = CopyEntity(bulletsprite2)
      ShowEntity bullets\objs
      PositionEntity bullets\objs,EntityX(dragon),EntityY(dragon)+45,EntityZ(dragon),1
      RotateEntity bullets\objs,EntityPitch(camera),EntityYaw(dragon),EntityRoll(dragon)
      EntityType bulletsprite2,TYPE_SHOT
MoveEntity bullets\objs,0,0,2.0
     ;ClearCollisions
ResetEntity bullets\objs
PlaySound (pistol_sound)

MoveEntity dragon,0,0,-65 * frametime_sec#



 If EntityPitch(camera)+mys#>-70
TurnEntity camera,-1.4,0,0
EndIf


bullets\destroys = now + 5000
      bullets\alpha# = 1.0
   




EndIf
EndIf
EndIf
EndIf














   For bullets.bullets = Each bullets
      MoveEntity bullets\objs,0,0,15.0 * frametime_sec#
       

      If now >= bullets\destroys - 1000 Then
         bullets\alpha# = bullets\alpha# -0.01   
         EntityAlpha bullets\objs,bullets\alpha#
      ElseIf now >= bullets\destroys Then
         FreeEntity bullets\objs
               FreeEntity bulletsprite2
      FreeEntity bulletsprite
Delete bullets


      EndIf
 

Dreamora

BeitragMo, Mai 01, 2006 12:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Immerhin steht die Antwort drin:

;ClearCollisions

Das ist das Problem.
Es hat rein garnix mit der Grafik zu tun, der Kollisionsarray explodiert lediglich.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Mr.Keks

BeitragMo, Mai 01, 2006 13:02
Antworten mit Zitat
Benutzer-Profile anzeigen
nein, dreamora!! hihi, ich habe das echte problem, denke ich.
man brauchte doch nicht die erstellung Very Happy

Code: [AUSKLAPPEN]

If now >= bullets\destroys - 1000 Then
        bullets\alpha# = bullets\alpha# -0.01   
        EntityAlpha bullets\objs,bullets\alpha#
ElseIf now >= bullets\destroys Then
       FreeEntity bullets\objs
       FreeEntity bulletsprite2
       FreeEntity bulletsprite
       Delete bullets
EndIf

wenn man sich das mal richtig eingerückt gaaaanz genau anschaut...
dann fällt auf, dass der löschcode aufgrund des "else" nie ausgeführt wird, da das erste if, das elseif nicht ausschließt.

zum lösen einfach mal andersrum anordnen.

Code: [AUSKLAPPEN]

If now >= bullets\destroys Then
       FreeEntity bullets\objs
       ;FreeEntity bulletsprite2
       ;FreeEntity bulletsprite
       Delete bullets
ElseIf now >= bullets\destroys - 1000 Then
        bullets\alpha# = bullets\alpha# -0.01   
        EntityAlpha bullets\objs,bullets\alpha#
EndIf




... mensch leute, dass wir sonen simples iflogikproblem nicht sofort erkennen ^^.
MrKeks.net
 

Dreamora

BeitragMo, Mai 01, 2006 15:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt auch.

Aber das mangelnde ClearCollisions wird auch zu Problemen führen, da vorher erkannte Kollisionen nicht gelöscht werden und sich so kontinuierlich aufsummieren.

Und das wir sowas nicht direkt sehen, liegt wohl mittlerweile daran, dass wir intuitiv die IF Reihenfolge richtig machen mit den Tests in welchem Zeitsegment wir uns aktuell befinden.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

rctuner

BeitragMo, Mai 01, 2006 17:30
Antworten mit Zitat
Benutzer-Profile anzeigen
juhu danke jungs, endlich so viel schiessen wie ich will ohne dass die fps sinken Wink

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group