[Types] Text untereinander anzeigen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

N0X

Betreff: [Types] Text untereinander anzeigen

BeitragSa, März 20, 2010 18:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey!
Ich möchte Text aus einem Type untereinander anzeigen lassen.
Allerdings wird der Text hier nur aufeinander angezeigt.
Warum?

Code: [AUSKLAPPEN]
Type message
   Field txt$,y%
End Type

While Not KeyHit(1)
   If KeyHit(59) Then
      m.message = New message
      m\y% = m\y%+12
      m\txt$ = Rnd(-10,10)
   EndIf
   
   For m.message = Each message
      Text 0,m\y%,m\txt$
   Next
Wend
End


Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

mpmxyz

BeitragSa, März 20, 2010 18:52
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
m\y% = m\y%+12

m\y ist nach dem Erstellen immer 0. -> Nach dieser Operation ist der Wert immer 12.
Du musst dir die Position des letzten Textes merken und bei einem neu erstellten Text diese, um den entsprechend Wert erhöht, für den nächsten Text nutzen.
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
  • Zuletzt bearbeitet von mpmxyz am Sa, März 20, 2010 18:53, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragSa, März 20, 2010 18:53
Antworten mit Zitat
Benutzer-Profile anzeigen
y ist ein Field des Types d.h. jeder Type Eintrag hat die Variable y, die du bei allen auf 12 setzt und dann den Text dort ausgibst. Du brauchst eine Locale Variable die unabhängig von den Types hochgezählt wird.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Eingeproggt

BeitragSa, März 20, 2010 18:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
m\y% = m\y%+12


Da liegt das Problem.
Entweder du machst ein "globales" y (Muss nicht Global sein, aber muss unabhängig vom Type in der Schleife sein!) das du immer erhöhst oder du musst dir mittels Before den vorherigen Type-Eintrag herholen. Dieser darf dann aber logischerweise nicht m überschreiben Wink

mfG, Christoph.

EDIT: Schon wieder soviele hilfbereite BBler Razz
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

N0X

BeitragSa, März 20, 2010 19:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hui, dankeschön! Smile
Hab's mal probiert, aber so klappts nicht, denn jetzt werden ja alle Texte übereinander geschrieben, in jeder Zeile.
Wie kann ich das umgehen?

Code: [AUSKLAPPEN]
Local my

Type message
   Field txt$,y%
End Type

While Not KeyHit(1)
   If KeyHit(59) Then
      m.message = New message
      m\txt$    = Rnd(-10,10)
      my = my+12
   EndIf
   
   For m.message = Each message
      Text 0,my,m\txt$
   Next
Wend
End
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Xeres

Moderator

BeitragSa, März 20, 2010 19:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Beim erstellen musst du m\y schon einen Wert zuweisen... oder du zählst die Variable beim darstellen gleich hoch.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

N0X

BeitragSa, März 20, 2010 19:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm?
Ich bekomm das nicht hin...

Code: [AUSKLAPPEN]
Local my

Type message
   Field txt$,y%
End Type

While Not KeyHit(1)
   If KeyHit(59) Then
      m.message = New message
      m\txt$    = Rnd(-10,10)
   EndIf
   
   For m.message = Each message
      Text 0,my,m\txt$
      my = my+12
   Next
Wend
End


So wird der erste Typeeintrag immer weiter nach unten gereiht.
Das soll ja nicht sein.

Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%
 

da_poller

BeitragSa, März 20, 2010 19:14
Antworten mit Zitat
Benutzer-Profile anzeigen
ungetestet aber sollte gehen:

BlitzBasic: [AUSKLAPPEN]

Type message
Field txt$,y%
End Type

Global y_diff%
Local m.message
While Not KeyHit(1)
If KeyHit(59) Then
y_diff=y_diff+12
m.message = New message
m\txt$ = Rnd(-10,10)
m\y=y_diff
EndIf

For m.message = Each message
Text 0,m\y,m\txt$

Next
Wend
End


so war das von eingeproggt mit der globalen gemeint. geh es schritt für schritt durch und versuch zu verstehen.
viel erfolg

Xeres

Moderator

BeitragSa, März 20, 2010 19:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Entweder...
Code: [AUSKLAPPEN]
Local my

Type message
   Field txt$,y%
End Type

While Not KeyHit(1)
   If KeyHit(2) Then
      m.message = New message
      m\txt$    = Rnd(-10,10)
      m\y = my
      my = my + 12
   EndIf
   
   For m.message = Each message
      Text 0,m\y,m\txt$
   Next
Wend
End


Oder:
Code: [AUSKLAPPEN]
Local my

Type message
   Field txt$,y%
End Type

While Not KeyHit(1)
   If KeyHit(2) Then
      m.message = New message
      m\txt$    = Rnd(-10,10)
   EndIf
   
   my=0
   For m.message = Each message
      Text 0,my,m\txt$
      my=my+12
   Next
Wend
End
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

N0X

BeitragSa, März 20, 2010 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Und wie mache ich das, wenn ich die neuste Nachricht ganz unten angezeigt haben möchte und die Alten dann nach oben hin "weggehen"?

Hab' das mal so probiert, allerdings wird die neuste Nachricht nicht unten angezeigt sondern "aufgestapelt"!
Wie krieg ich die Neuste jetzt ganz nach unten und die Alten nach oben?

||||||||||||||||||||||||||||||||
-Älteste!
-Alt 4
-Alt 3
-Alt 2
-Alt 1
- Neu!
||||||||||||||||||||||||||||||||

Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

mpmxyz

BeitragSa, März 20, 2010 19:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann musst du die Position von den Nachrichten trennen:
1. Positions-Field entfernen
2. eine Zeichenfunktion für die Nachrichten erstellen
3. In dieser Funktion gibt es eine lokale Variable mit der aktuellen Position, welche für jeden durchlaufenen Text erhöht wird.
4. Damit alte Nachrichten verschwinden, muss noch eine Bedingung zum Verschwinden eingeführt werden. (Selber denken! Wink)
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

N0X

BeitragSa, März 20, 2010 19:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, da steh ich jetzt aber irgendwie auf'm Schlauch...
Kannst du mir das nochmal genauer erklären?

Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

count-doku

BeitragSa, März 20, 2010 19:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab grad auch sowas gemacht:
BlitzBasic: [AUSKLAPPEN]

;in der Mainloop zum anzeigen:
y=45
For Txt.TText=Each TText
If y<120
Text 1,y,Txt\txt
Else
Delete Txt.TText
End If
y=y+15
Next
;Als Event wenn neuer Text erzeugt wurde:
Txt.TText=New TText
Txt\txt=t
Insert Txt Before First TText


Abgeändert dann auf deinen Fall:
BlitzBasic: [AUSKLAPPEN]
;in der Mainloop zum anzeigen:
y=45
For m.Message=Each Message
If y<120
Text 1,y,m\txt
Else
Delete m.Message
End If
y=y+15
Next
;Als Event wenn neuer Text erzeugt wurde:
If KeyHit(2)
m.Message=New Message
m\txt=Rnd(-10,10)
Insert m After Last Message
End If

mfg,
count-doku

N0X

BeitragSa, März 20, 2010 19:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, danke, aber wie krieg ich das jetzt hin, dass die neuste Nachricht immer unten angezeigt wird und wenn eine neue hinzukommt das die erste dann um 12 Pixel nach oben wandert usw. ?

Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

count-doku

BeitragSa, März 20, 2010 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier: BlitzBasic: [AUSKLAPPEN]
Graphics 800,600,0,2

Type Message
Field txt$
End Type
While Not KeyHit(1)
y=250;anfangs wert
For m.Message=Each Message
If y<100;wenn die msg´s zu hoch kommen
Delete m.Message;löschen
Else
Text 1,y,m\txt;Ansonsten Texten
EndIf
y=y-12;Höhe verringern
Next
If KeyHit(2);Neue Nachricht erstellen
m.Message=New Message
m\txt=Rnd(-10,10)
Insert m Before First Message
End If
Flip
Cls
Wend

Wo das eintragen beginnt/aufhört musst du halt verändern.
Die Einträge sollen doch wenn sie zu hoch kommen gelöscht werden, oder?

mfg,
count-doku

PS: Der Code ist sehr schlampig geproggt Smile

N0X

BeitragSa, März 20, 2010 20:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah, dankeschön! Smile
Das klappt jetzt wunderbar, und jetzt versuch ich noch das zu verstehen, dann ist alles gut!

Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

das wurgel

BeitragSa, März 20, 2010 20:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Du zählst jedes mal wenn eine nachricht dazu kommt wie viele Nachrichten es sind und löscht so oft die erste Nachricht (die neu dazukommenden werden hinten dran gehängt) bis sie eine bestimmte anzahl erreicht haben:
Code: [AUSKLAPPEN]

Local my
local anzahlNachrichten=0

Type message
   Field txt$,y%
End Type

While Not KeyHit(1)
   If KeyHit(2) Then
      m.message = New message
      m\txt$    = Rnd(-10,10)
      anzahlNachrichten=anzahlNachrichten+1
      if anzahlNachrichten>10 then
          local zuviele=anzahlNachrichten-10
          for i=1 to zuviele
               local ersteNachricht.message=first message
               delete ersteNachricht
               anzahlNachrichten=anzahlNachrichten-1
          next
      endif
      cls
   EndIf

   my=0
   For m.message = Each message
      Text 0,my,m\txt$
      my=my+12
   Next

Wend
End


edit: Ooh zu spät, aber vll hilfts dir noch beim verstehen Wink

edit2: noch ein Cls eingesetzt
1 ist ungefähr 3

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group