FreeEntity bringt nix??!!? - erledigt
Übersicht

![]() |
rctunerBetreff: FreeEntity bringt nix??!!? - erledigt |
![]() Antworten mit Zitat ![]() |
---|---|---|
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
![]() |
darthBetreff: .. |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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 ![]() |
||
MrKeks.net |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
nein, dreamora!! hihi, ich habe das echte problem, denke ich.
man brauchte doch nicht die erstellung ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
juhu danke jungs, endlich so viel schiessen wie ich will ohne dass die fps sinken ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group