Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Chat Problem

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Bibliotheken
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 23.02.2013, 12:10    Titel: Chat Problem Antworten mit Zitat

Hi lächeln

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? zwinkern

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
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 989

BeitragVerfasst am: 23.02.2013, 12:37    Titel: Antworten mit Zitat

Schau doch mal in den Code zu Battleship, das hat genau so ein Chat-/Nachrichtenfenster.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Toa-Nuva



Anmeldungsdatum: 14.04.2006
Beiträge: 201
Wohnort: München

BeitragVerfasst am: 23.02.2013, 13:00    Titel: Re: Chat Problem Antworten mit Zitat

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. happy)
_________________
704 Signature not found
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 23.02.2013, 13:09    Titel: Antworten mit Zitat

So funktioniert es auch, vielen Dank euch beiden. lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Bibliotheken Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz