Texte auf screen automatisch versetzen/neu setzten ?
Verfasst: 25.11.2015 20:36
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.
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
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)