| 
				
					|  | 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, 12: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, 12: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, 13: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, 13: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.
 
 |  |