|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Westbeam
Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 23.02.2013, 13:10 Titel: Chat Problem |
|
|
Hi
Ich schreibe einen kleinen Chat für den Multiplayermodus von X-the forgotten battles. Dafür nutze ich TSNE_Play. Nun habe ich allerdings ein kleines Problem. Ich möchte, dass wenn eine neue Nachricht geschrieben wurde, diese ganz unten vom Chat angezeigt wird. Dabei sollen alle anderen Chateinträge um eine Einheit nach oben verschoben wurden. Jede Chatnachricht ist so aufgebaut:
Code: | Type ChatMessage
As String von,msg
As Integer y
End Type |
Die Einträge werden von unten nach oben angezeigt. Also die neusten Einträge stehen ganz unten:
Code: | Dim Shared As ChatMessage CHAT(56)
For i As Integer=1 To 55
CHAT(i).y=880-i*16
CHAT(i).msg=""
Next |
Der eigentliche Chat sieht so aus:
Code: | If Multikey(&h14) Then 'Wenn [t] gedrückt wurde, Chatmodus starten
chatb=1
End If
If chatb=1 Then
If key<>0 And key<>13 Then chattext=chattext+Chr(key) 'Nachricht schreiben
If Multikey(&h0E) And ktim<=tim-5 Then 'Backspace
chattext=Left(chattext,Len(chattext)-1)
ktim=tim
ElseIf Multikey(&h1C) And ktim<=tim-50 Then 'Enter
If chattext<>"" Then
For i As Integer=1 To 55
CHAT(i).msg=CHAT(i-1).msg 'Alle alten Einträge um eine Einheit nach oben verschieben
Next
CHAT(1).msg=chattext 'Den neusten Eintrag nach ganz unten
chattext=""
chatb=0
ktim=tim
Elseif chattext="" Then
chatb=0
ktim=tim
End If
End If
Color RGB(255,0,0)
Draw String (5,880),chattext 'Die zu schreibende Nachricht anzeigen
For i As Integer=1 To 55
Color RGB(255,255,255)
Draw String (5,CHAT(i).y),CHAT(i).msg 'Alle Einträge des Chats anzeigen
Next
End If |
Der Chat funktioniert so: Wenn [t] gedrückt wurde gelangt der Spieler in den Chatmodus. Dort schreibt er eine Nachricht und drückt [ENTER] um sie zu schicken. Nun werden alle alten Einträge um eine Einheit nach oben verschoben und die neue Nachricht nach ganz unten gesetzt. Wenn ich nun allerdings eine Nachricht schreibe und Enter drücke, verschwinden die alten Nachrichten und nur die neueste Nachricht ist zu sehen.
Vielleicht kann mir da ja jemand helfen?
EDIT: Hmmm, vielleicht wäre der Thread im "Allgemeine Fragen"-Forum besser aufgehoben, da das ganze TSNE-Zeug noch nicht im Chat drin ist. |
|
Nach oben |
|
|
MOD Fleißiger Referenzredakteur
Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 23.02.2013, 13:37 Titel: |
|
|
Schau doch mal in den Code zu Battleship, das hat genau so ein Chat-/Nachrichtenfenster. |
|
Nach oben |
|
|
Toa-Nuva
Anmeldungsdatum: 14.04.2006 Beiträge: 204 Wohnort: München
|
Verfasst am: 23.02.2013, 14:00 Titel: Re: Chat Problem |
|
|
Hmm, ich entdecke spontan an dieser Stelle hier einen kleinen Fehler:
Westbeam hat Folgendes geschrieben: | Code: | For i As Integer=1 To 55
CHAT(i).msg=CHAT(i-1).msg 'Alle alten Einträge um eine Einheit nach oben verschieben
Next |
|
Was du hier machst: Du überschreibst die erste Nachricht mit der nullten Nachricht (die wohl keinen Inhalt haben dürfte). Danach überschreibst du die zweite Nachricht mit der (soeben gelöschten/überschriebenen) ersten Nachricht; danach die dritte Nachricht mit der (soeben gelöschten/überschriebenen) zweiten Nachricht, usw. Am Schluss hast du alle Nachrichten (indirekt) mit der 0. Nachricht überschrieben, und du schreibst die neue Nachricht in die 1. Nachricht.
Das ganze solltest du also eher umgekehrt machen: Die 55. Nachricht mit der 54. Nachricht überschreiben, danach die 54. Nachricht mit der 53. Nachricht, usw.
Die For-Anweisung sollte also wahrscheinlich eher so aussehen:
Code: | For i As Integer=55 To 1 step -1 |
(Ich hoffe, das funktioniert so. ) _________________ 704 Signature not found |
|
Nach oben |
|
|
Westbeam
Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 23.02.2013, 14:09 Titel: |
|
|
So funktioniert es auch, vielen Dank euch beiden. |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|