Gamestudio Links
Zorro Links
Newest Posts
Blobsculptor tools and objects download here
by NeoDumont. 03/28/24 03:01
Issue with Multi-Core WFO Training
by aliswee. 03/24/24 20:20
Why Zorro supports up to 72 cores?
by Edgar_Herrera. 03/23/24 21:41
Zorro Trader GPT
by TipmyPip. 03/06/24 09:27
VSCode instead of SED
by 3run. 03/01/24 19:06
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
3 registered members (VoroneTZ, monk12, Quad), 829 guests, and 4 spiders.
Key: Admin, Global Mod, Mod
Newest Members
sakolin, rajesh7827, juergen_wue, NITRO_FOREVER, jack0roses
19043 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Page 2 of 5 1 2 3 4 5
Re: Dialog box darstellung? [Re: tagimbul] #466425
06/13/17 14:08
06/13/17 14:08
Joined: Oct 2008
Posts: 679
Germany
Ayumi Offline
User
Ayumi  Offline
User

Joined: Oct 2008
Posts: 679
Germany


Hier ein zweites Beispiel mit einfärben der Wörter. Du kannst das gerne umbauen und auch die Keywörter aus einer Textdatei laden.

Ausserdem gibt es noch ein Problem mit der Breite jeden Digits. Das laesst sich vermutlich beheben, indem das erstellen entweder ausgelagert wird oder die Digits vorher erstellt werden.

Das Problem mit der Breite geh ich spaeter nochmal an und poste meine Lösung.


Code:
typedef struct Keyword
{
  STRING* Word;
  COLOR Color;
} Keyword;
Keyword Keywords[2];

FONT* fontTest = "Arial#20";

STRING* strFile[4000];

void InitKeywords()
{
	Keywords[0].Word = str_create("unendlich");
	vec_set(Keywords[0].Color, vector(255,0,0));
	Keywords[1].Word = str_create("Satz");
	vec_set(Keywords[1].Color, vector(0,255,0));	
}


action DialogTrigger() 
{
	InitKeywords();
	
	
	DsPanelE.pos_x = 400;
	DsPanelE.pos_y = 400;
	var strWidth = 0;
	var posX =30, posY = 30;
	var charCount;
	var counter = 0;
	int i;
	
	while(1)
	{
		var dist = abs(vec_dist(player.x, my.x));
		if(dist < 255)
		{					
			set(DsPanelE, SHOW);		
			if(key_pressed(key_for_str(keyE))) 
			{				
				while(key_pressed(key_for_str(keyE))) 
					wait(1);
					
				while(!key_pressed(key_for_str(keyE))) 
				{
					set(DsPanel, SHOW);
					
					var fileHandle = file_open_read("ColoredText.txt");
					if (fileHandle)
					{	
						while(1)
						{
							if(charCount == -1)
								break;
								
							strFile[counter] = str_create("");
							charCount = file_str_readto(fileHandle,strFile[counter], " ", 4000);
															
							pan_setdigits(DsPanel, 0, posX,posY, strFile[counter], fontTest, 1, 0);
							
							for(i = 0; i< 2; i++)
							{
								if(str_cmp(Keywords[i].Word, strFile[counter])) {
									pan_setcolor(DsPanel, 1, counter, Keywords[i].Color);
									break;
								}
							}
							
							strWidth += str_width (strFile[counter], fontTest); 
							if(strWidth < 250)
							{
								posX = strWidth + 10;	
							}
							else
							{
								posY += 30;
								posX = 30;
								strWidth = 0;
							}
							
							counter++;						
							wait(1);
						}
										
						file_close (fileHandle);
					}
					
					
					reset(DsPanelE, SHOW);	
					wait(1);
				}
				
				while(key_pressed(key_for_str(keyE))) 
					wait(1);
					
				reset(DsPanel, SHOW);
				set(DsPanelE, SHOW);	
			}
		}
		else
		{
			reset(DsPanelE, SHOW);	
			reset(DsPanel, SHOW);	
		}
			
		wait(1);
	}
}


Last edited by Ayumi; 06/13/17 14:08.
Re: Dialog box darstellung? [Re: tagimbul] #466426
06/13/17 14:53
06/13/17 14:53
Joined: Jun 2010
Posts: 212
tagimbul Offline OP
Member
tagimbul  Offline OP
Member

Joined: Jun 2010
Posts: 212



sooo ich hab mal meinen.... parser?? .. geschriben ^^
ich geb den blauen text rein und bekomme den unteren grünen mit lücken ^^
platzhalter für die gamepad icons.
und ich hab position, nummerierung und anzahl der buchstaben bis zum jeweilig nächsten abschnit =)

macht laune sowas^^



edit: oh sehe deinen post erst jetzt. ich muss noch testen.
hey wenn wir unsere codes kombinieren haben wir ein zelda dialog box system hehe

Last edited by tagimbul; 06/13/17 15:24.

meine website mit 3dgs sachen =) //noch nicht ganz umgebaut ^^"
http://flashbreaker.com/home.html
und mein YT channel mit diversen game entwicklungs videos, vor allem shader zeugs
https://www.youtube.com/user/tagimbul/videos
Re: Dialog box darstellung? [Re: tagimbul] #466429
06/13/17 20:13
06/13/17 20:13
Joined: Jun 2010
Posts: 212
tagimbul Offline OP
Member
tagimbul  Offline OP
Member

Joined: Jun 2010
Posts: 212
ohne wie arschig. str_width liest keine leerschläge nach dem string aus

STRING* test1 = "hallo";
STRING* test2 = "hallo ";

beide haben mit str_width eine pixelbreite von 33

ohhh das ist ärgerlich....


meine website mit 3dgs sachen =) //noch nicht ganz umgebaut ^^"
http://flashbreaker.com/home.html
und mein YT channel mit diversen game entwicklungs videos, vor allem shader zeugs
https://www.youtube.com/user/tagimbul/videos
Re: Dialog box darstellung? [Re: tagimbul] #466432
06/13/17 23:11
06/13/17 23:11
Joined: Nov 2005
Posts: 204
Bavaria
HellThunder Offline
Member
HellThunder  Offline
Member

Joined: Nov 2005
Posts: 204
Bavaria
Schon mal versucht die whitespaces temporär mit einem anderen char zu ersetzen?


Create your own JRPG and join our community: https://www.yrpgtoolkit.com
Re: Dialog box darstellung? [Re: HellThunder] #466435
06/14/17 07:02
06/14/17 07:02
Joined: Jun 2010
Posts: 212
tagimbul Offline OP
Member
tagimbul  Offline OP
Member

Joined: Jun 2010
Posts: 212
guten morgen *kaffe schlürf*
gibt es denn einen unsichtbaren char der sowohl bei normalen fonts als auch bei unicode ist?

edit:
ahs sorry jetzt wirk der kaffe ^^
oh bei fonts kenn ich mich nicht so aus. gibt es denn standart chars die bei jedem font die gleiche pixel grösse haben wie eine leertaste?

edit2:
ok sagen wir mal ich nehme ein "i" als leertasten ersatz. dann kommt es schlussendlich auf das font an und wie das i dort drin ist.
ohman das ist wirklich ärgerlich ^^
aber ich versuchs mal so.
Code:
function str_width2 (STRING* str, FONT* fo, STRING* replace)
{
	str_replace(str, " ",replace); 
	return(str_width(str,fo));
}


Last edited by tagimbul; 06/14/17 07:40.

meine website mit 3dgs sachen =) //noch nicht ganz umgebaut ^^"
http://flashbreaker.com/home.html
und mein YT channel mit diversen game entwicklungs videos, vor allem shader zeugs
https://www.youtube.com/user/tagimbul/videos
Re: Dialog box darstellung? [Re: tagimbul] #466436
06/14/17 08:32
06/14/17 08:32
Joined: Jun 2010
Posts: 212
tagimbul Offline OP
Member
tagimbul  Offline OP
Member

Joined: Jun 2010
Posts: 212


ich habs hingekrigt =) pixel perfekt für "Arial#20b"
ein "f" entspricht der gleichen pixel breite wie ein leerschlag.
anzeige ist mit digits.

dann tüftle ich nun mal an colorisierten wörtern.
aus deinem code, Ayumi, werd ich nicht so ganz schlau.


meine website mit 3dgs sachen =) //noch nicht ganz umgebaut ^^"
http://flashbreaker.com/home.html
und mein YT channel mit diversen game entwicklungs videos, vor allem shader zeugs
https://www.youtube.com/user/tagimbul/videos
Re: Dialog box darstellung? [Re: tagimbul] #466448
06/14/17 17:50
06/14/17 17:50
Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
Kartoffel Offline
Expert
Kartoffel  Offline
Expert

Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
hier ein str_width, das trailing whitespaces mitzählt:

Code:
var my_str_width(STRING * Str, FONT * Font)
{
	char StrTemp[3];
	StrTemp[0] = ' '; StrTemp[1] = '.'; StrTemp[2] = '\0';
	
	var WhitespaceWidth = str_width(StrTemp, Font) - str_width(&(StrTemp[1]), Font);
	
	var StrWidth = str_width(Str, Font);
	
	int i;
	for(i = str_len(Str) - 1; i > 0; i--)
	{
		if((Str->chars)[i] == ' ')
		{
			StrWidth += WhitespaceWidth;
		}
		else
		{
			break;
		}
	}
	
	return StrWidth;
}


ist evtl. noch etwas optimierbar (indem man sich die whitespace breite zwischenspeichert anstatt sie jedes mal wieder auszurechnen).

Last edited by Kartoffel; 06/14/17 17:55. Reason: forum messed up my 'backslash zero'

POTATO-MAN saves the day! - Random
Re: Dialog box darstellung? [Re: Kartoffel] #466449
06/14/17 18:12
06/14/17 18:12
Joined: Jun 2010
Posts: 212
tagimbul Offline OP
Member
tagimbul  Offline OP
Member

Joined: Jun 2010
Posts: 212
oh cool danke vielmal!!

edit:
ich verstehe nicht ganz wie der funktioniert.
wenn ich ihn durch meine funktion austausche hab ich abweichungen.
da in der schrift die ich nutze ein "f" genau soviel pixel hat wie ein " " kann ich ziemlich save davon ausgehen das es klapt. bei deiner ist dann mein letztes symbol nicht am richtigen platz
was genau macht du hier?
Code:
str_width(&(StrTemp[1]), Font)



edit2:
die funktion crasht auch bei sehr vielen stings...

Last edited by tagimbul; 06/14/17 18:42.

meine website mit 3dgs sachen =) //noch nicht ganz umgebaut ^^"
http://flashbreaker.com/home.html
und mein YT channel mit diversen game entwicklungs videos, vor allem shader zeugs
https://www.youtube.com/user/tagimbul/videos
Re: Dialog box darstellung? [Re: tagimbul] #466450
06/14/17 18:57
06/14/17 18:57
Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
Kartoffel Offline
Expert
Kartoffel  Offline
Expert

Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
Originally Posted By: tagimbul

was genau macht du hier?
Code:
str_width(&(StrTemp[1]), Font)



Das ist der string StrTemp nicht von anfang an, sondern ab der 2. stelle (index [1]). Damit rechne ich: leerz. = länge(" .") - länge(".");

Warum es crasht, kann ich mir nicht erklären. Evtl. kommt die engine nicht mit den vielen temporären char arrays (StrTemp) klar. Syntaxmäßig bin ich mir aber fast sicher dass kein fehler drin ist.


POTATO-MAN saves the day! - Random
Re: Dialog box darstellung? [Re: tagimbul] #466451
06/14/17 18:57
06/14/17 18:57
Joined: Jun 2010
Posts: 212
tagimbul Offline OP
Member
tagimbul  Offline OP
Member

Joined: Jun 2010
Posts: 212
hey kartoffel irgendwas stimmt mit deiner funktion nicht.
Code:
///////////////////////////////
#include <acknex.h>
#include <default.c>

FONT* arial_font = "Arial#20b"; // truetype font, 20 point bold characters


var my_str_width(STRING * Str, FONT * Font)
{
	char StrTemp[3];
	StrTemp[0] = ' '; 
	StrTemp[1] = '.'; 
	StrTemp[2] = '';
	
	var WhitespaceWidth = str_width(StrTemp, Font) - str_width(&(StrTemp[1]), Font);
	
	var StrWidth = str_width(Str, Font);
	
	int i;
	for(i = str_len(Str) - 1; i > 0; i--)
	{
		if((Str->chars)[i] == ' ')
		{
			StrWidth += WhitespaceWidth;
		}
		else
		{
			break;
		}
	}
	
	return StrWidth;
}




///////////////////////////////
function main()
{
	
	wait(4);
	var temp1, temp2;
	
	temp1 = 	my_str_width("f a f a",arial_font);
	temp2 = 	my_str_width("WhitespaceWidth",arial_font);
	
	//	var WhitespaceWidth = str_width("a a", arial_font) - str_width("aa", arial_font);
	

	while(1)
	{
		DEBUG_VAR(temp1,0);
		DEBUG_VAR(temp2,20);
		wait(1);
	}
}



es crasht sehr oft.

eine alternative zu deinem StrTemp wäre[quote][/quote]

Code:
var temp1 = str_width("a a", arial_font) - str_width("aa", arial_font);
		var temp2 = str_width("f", arial_font) ;


f hat wie ein leerschlag in Arial#20b genau 5 pixel
und temp2 ergibt hier 5 ^^

ahh jetzt versteh ich wieso der dort breaken soll. die leerzeichen am ende eines stringes werden nicht gezählt und dort schneidest du ab. leerzeichen in der mitte oder am anfang gehen auch mit
es geht auch so ^^
Code:
var temp1 = str_width(" a", arial_font) - str_width("a", arial_font);



aber ich weis echt nicht warum der so oft crasht...

edit:
ah ok die funktion mag es nicht wenn man ihr direkt etwas mit "blabla" reingibt
nun scheint es stapiel zu sein.
aber den teil mit dem char array hab ich zu meiner variante geändert.
Code:
var my_str_width(STRING * Str, FONT * Font)
{
	
	var WhitespaceWidth  = str_width(" a", arial_font) - str_width("a", arial_font);
	
	var StrWidth = str_width(Str, Font);
	
	var i;
	
	if( (Str->chars)[i] == ' ')
	{
		for(i = str_len(Str) - 1; i > 0; i--)
		{
			if( (Str.chars)[i] == ' ')
			{
				StrWidth += WhitespaceWidth;
			}
			else
			{
				break;
			}
		}
	}		
	return StrWidth;
}



edit2:

ja mit meiner modifikation ist es nun auch wieder pixel perfekt :DDD
danke nochmal für die funktion =)

Last edited by tagimbul; 06/14/17 19:20.

meine website mit 3dgs sachen =) //noch nicht ganz umgebaut ^^"
http://flashbreaker.com/home.html
und mein YT channel mit diversen game entwicklungs videos, vor allem shader zeugs
https://www.youtube.com/user/tagimbul/videos
Page 2 of 5 1 2 3 4 5

Moderated by  HeelX, Lukas, rayp, Rei_Ayanami, Superku, Tobias, TWO, VeT 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1