Seite 1 von 1

Texte auf screen automatisch versetzen/neu setzten ?

Verfasst: 25.11.2015 20:36
von True29
hi , hab das problem bei einem game von mir hier kommen wenn der spieler schaden bekommt ein text auf dem Bildschirm.
nun kann es passieren das hier 2 texte gleichzeitig ausgelöst werden also liegen 2 texte übereinander was ich aber nicht möchte.

hier nun mein versuch das zu vermeiden leider endet das ganze in einer dauerschleife.
meine idee war falls ein text in der liste an position exisitiert verschiebe den neuen text langsam wo anderst hin zur seite. bzw positioniere diesen neu jedoch nicht zu weit weg ;) soll ja seine zugehörigkeit beibehalten (einheit).

hoffe das jemand von euch ne idee hat ;)

hier mal der lauffähige code . in diesem beispiel würde der spieler 5 x getroffen werden innerhalb von einem frame.
nur um das ganze mal etwas zu verdeutlichen .
im Spiel kann diese Situation auftreten .

an der stelle wo Debug "dauerschleife" steht entsteht diese . die break condition ist wohl falsch.

Code: Alles auswählen

EnableExplicit

Structure Vector2d
  x.f
  y.f
  Vx.f
  Vy.f
  Fieldx.i
  Fieldy.i
  radius.f    
EndStructure

Structure Struct_text
  fposition.Vector2d    
  text.s
  typeface.i
  duration.i
  durationdone.i
  rate.f
  TextTimer.l
  SetTimer.i
  fEndTime.f
  StartTime.l
  loop.i
  ftransparent.f
  Sprite.i
  Color.i
  Size.f
  TimerID.i
EndStructure

Global NewList text.Struct_text()


Procedure IsInBox(fromX.i,fromY.i,X.i, Y.i, Width.i, Height.i) 
  If fromX >= x And fromX < x+Width And fromY >= y And fromY < y+Height
    ProcedureReturn #True
  EndIf
EndProcedure


Procedure ADD_Text(List Texte.Struct_text(),typeface,x,y,text.s,Color,duration.i,fStartTransparent.i,loop.i,EndTime.f,StartTime.f,Size.f = 1.0)      
  
  ;existiert text an gleicher stelle ? oder in sichtbereich ?
  Define.i bereichx,bereichy
  Define found = #False   
  
  ForEach Texte()
    With Texte() 
      
      bereichx = 0
      bereichy = 0
      
      Repeat 
        found = #False
        
        For bereichx = 0 To 50
          For bereichy = 0 To 50
            
            Debug "dauerschleife"

            If IsInBox(\fPosition\x,\fPosition\Y,x+bereichx,y+bereichy,20,20)         
              found = #True              
            Else
              Break 2
            EndIf
            
          Next bereichy
        Next bereichx
      
      Until found = #False
      x + bereichx
      y + bereichy
        
    EndWith
  Next  
  
  AddElement(Texte())  
  
  Texte()\StartTime     = Starttime.f
  Texte()\fEndTime      = EndTime.f
  Texte()\loop          = loop.i
  Texte()\duration      = duration.i    
  Texte()\typeface      = typeface.i  
  Texte()\fPosition\X   = x
  Texte()\fPosition\Y   = y
  Texte()\text          = text  
  Texte()\ftransparent  = fStartTransparent
  Texte()\Color         = Color
  Texte()\Size          = Size.f
  
  ProcedureReturn Texte()\Sprite
EndProcedure


ADD_Text(text(),0,0,0,"test",0,0,0,0,0,0,0)  
ADD_Text(text(),0,0,0,"test",0,0,0,0,0,0,0)
ADD_Text(text(),0,0,0,"test",0,0,0,0,0,0,0)
ADD_Text(text(),0,0,0,"test",0,0,0,0,0,0,0)
ADD_Text(text(),0,0,0,"test",0,0,0,0,0,0,0)


Re: Texte auf screen automatisch versetzen/neu setzten ?

Verfasst: 25.11.2015 21:08
von True29
eine problemlösungsweg gefunden ;) danke an man-in-black.
ich werd die texte auf dem bildschirm je nach Aktivität schneller anzeigen lassen .
Sollte funktionieren