Seite 1 von 1

Liste überfüllt sich

Verfasst: 25.11.2013 23:01
von NeoRon
Hallo,

ich beziehe die Daten der Sprites aus einer verknüpften Liste aus Parameter. Daten wie x und y Position usw.

Das Problem ist das ich Sie nicht leeren kann ohne das es nen RunTime Error gibt oder das die Sprites nicht mehr angezeigt werden.

Könnt ihr mir da bei einer Lösung helfen?

LG
Manuel

Hier der Code:

Code: Alles auswählen

Structure struct_enemy
  x.i
  y.i
  speedX.i
  speedY.i
  objectID.i
  armor.i
EndStructure

Global NewList enemy.struct_enemy()

Code: Alles auswählen

Procedure AddEnemy(x, y, speedX, speedY, objectID, armor)  
     AddElement(enemy()) 
    With Enemy()
    \x = x
    \y = y
    \speedX = speedX
    \speedY = speedY
    \objectID = objectID
    \armor = armor
  EndWith
 EndProcedure

Code: Alles auswählen

Procedure EnemySetPlanes(c.l, List Planes.struct_enemy())
  
  Protected i
  
  Define x, y, speedX, speedY, objectID, armor
  
  AddElement(Planes())
  With  Planes()
    \x = x
    \y = y
    \speedX = speedX
    \speedY = speedY
    \objectID = objectID
    \armor = armor
  EndWith

  If enemy\ENEMY_PLANE_DELAY = 0 And enemy\ENEMY_ON_SCREEN < #MAX_ENEMY_ON_SCREEN
    
    ADDEnemy(0 - SpriteWidth(#Sprite_EYPlane), Random(200 - SpriteHeight(#Sprite_EYPlane),0 ) , Random(3, 1),0 ,2, 100) ;x, y, speedX, speedY, objectID
    Planes()\x + Planes()\speedx 
    enemy\ENEMY_PLANE_DELAY = #ENEMY_SET_PLANE_DELAY : enemy\ENEMY_ON_SCREEN + 1
    
    ElseIf enemy\ENEMY_PLANE_DELAY > 0 : enemy\ENEMY_PLANE_DELAY - 1 : EndIf  
  
  ForEach planes()
    If planes()\Armor < 1 And planes()\objectID = 2
      For i = 0 To 4
        ADDeffect(planes()\x, planes()\y, Random(6)-3, Random(6)-3, 100, 108, 5)  ;x, y, speedX, speedY, spriteStart, spriteEnd, animSpeed
      Next  
    :DeleteElement(planes()): PlaySound(#Sound_FXExplosion)  :enemy\ENEMY_ON_SCREEN - 1 : EndIf
  Next
  
  ForEach Planes()
    
    If planes()\objectID = 2
      DisplayTransparentSprite(#Sprite_EYPlane, Planes()\x,Planes()\y)
      Planes()\x + Planes()\speedx
      PlanesLocationX = Planes()\x
      PlanesLocationY = Planes()\y
      
      If Planes()\x > 1024  + SpriteWidth(#Sprite_EYPlane) : DeleteElement(Planes()) : enemy\ENEMY_ON_SCREEN - 1 : EndIf
    EndIf 
  Next
  
EndProcedure

Code: Alles auswählen

  EnemySetPlanes(1,enemy())

Re: Liste überfüllt sich

Verfasst: 25.11.2013 23:26
von _sivizius
1. Schau dir mal Interfaces an.
2. hat da eine Liste den selben Name wie eine Variable? (enemy) -.-
3. Versuch mal zu debuggen, wann du ein Element hinzufügst und wie groß die Liste ist.
Ich kann mir grad wenig vorstellen, was Sache ist :-/

Re: Liste überfüllt sich

Verfasst: 25.11.2013 23:48
von NeoRon
Interface kannte ich noch nicht werds mir auf jedenfall anschaun.

Code: Alles auswählen

Global enemy.game
lautet eine strukuriete Variable

Soll ich den ganzen code posten?

Re: Liste überfüllt sich

Verfasst: 26.11.2013 07:21
von Danilo
Benutzt Du EnableExplicite?

2 globale Variablen mit dem gleichen Namen ist aber auch nicht unbedingt
einen gute Idee:

Code: Alles auswählen

Structure struct_enemy
  x.i
  y.i
  speedX.i
  speedY.i
  objectID.i
  armor.i
EndStructure

Global NewList enemy.struct_enemy()

Structure game
EndStructure

Global enemy.game
Wenn Du die Liste enemy() an eine Funktion übergibst, und nur mal die Klammern vergisst (enemy statt enemy()),
könnte das schon einen Programmabsturz verursachen. Ist nicht zu empfehlen.