-
Üdvözletem!
Van ez a string-es dolog. Igazából fogalmam sincs mi ez. El tudnátok mondani, mire jó, mikor használjuk, és még ha kell valamit tudni róla?
És még itt van ez:
new string[] //A kapcsos zárójelek közé mitõl függ hanyas számot írok, és mely számokat írhatom ide?
-
Általában ezt a változót használjuk szövegformázásra,de lehet mást is.
Példa:
new string[200];
new pName[MAX_PLAYER_NAME];
new Float:x,Float:y,Float:z;
GetPlayerPos(playerid,x,y,z);
GetPlayerName(playerid,pName,sizeof(pName));
format(string, sizeof(string),\"%s mondja: %s\", pName, text[1]);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(IsPlayerInRangeOfPoint(i, 7.0, x, y, z))
{
SendClientMessage(i, 0x33FF33AA, string);
}
}
}
-
Nagyon nem részletezem hány byte meg bit a lényeg hogy megértsd:
new karakterlanc[6];
Minden egyes cella megszámozva a következõképpen néz ki:
karakterlanc[0];
karakterlanc[1];
karakterlanc[2];
karakterlanc[3];
karakterlanc[4];
karakterlanc[5];
Látványban azt jelenti 6 darab ilyen változót hoztál létre, amit a [] jelek közt számokkal azonosítva meghívhatsz.
Ha ezt így írod le pawnban:
karakterlanc[6] = \"hello\";
vagy így
karakterlanc[] = \"hello\";
azzal gyakorlatilag ezt csináltad:
karakterlanc[0] = \'h\';
karakterlanc[1] = \'e\' ;
karakterlanc[2] = \'l\';
karakterlanc[3] = \'l\';
karakterlanc[4] = \'0\';
karakterlanc[5] = \'\\0\';
Röviden, minden egyes cella egyetlen egy karaktert tartalmaz. (tömörítetlenül,<-ez késõbbi dolog egyelõre ne foglalkozz vele)
Természetesen szinte minden írásjelet képes tárolni egy ilyen cella, beleértve a számokat is lásd: http://www.asciitable.com/
Létrehozhatsz egy ilyen filterscriptet és lefuttatva, meglátod mit is csinál:
#include <a_samp>
public
OnFilterScriptInit()
{
new
str[] = \"hello\";
print(str);
printf(\"%c%c%c%c%c\", str[0], str[1], str[2], str[3], str[4]);
//***************
print(\"\\n\\n\");
strteszt();
//***************
print(\"\\n\\n\");
strteszt2();
//***************
return 1;
}
stock
strteszt()
{
new
str[6];
str = \"hello\";
print(str);
printf(\"%c%c%c%c%c\", str[0], str[1], str[2], str[3], str[4]);
}
stock
strteszt2()
{
new
str[6];
str[0] = \'h\';
str[1] = \'e\';
str[2] = \'l\';
str[3] = \'l\';
str[4] = \'0\';
str[5] = \'\\0\';
print(str);
printf(\"%c%c%c%c%c\", str[0], str[1], str[2], str[3], str[4]);
}
Ebbõl igazából azt lehet látni hogy többféleképpen használható az így létrehozott változó, de az eredmény ugyanaz.
-
Nagyon nem részletezem hány byte meg bit a lényeg hogy megértsd:
new karakterlanc[6];
Minden egyes cella megszámozva a következõképpen néz ki:
karakterlanc[0];
karakterlanc[1];
karakterlanc[2];
karakterlanc[3];
karakterlanc[4];
karakterlanc[5];
Látványban azt jelenti 6 darab ilyen változót hoztál létre, amit a [] jelek közt számokkal azonosítva meghívhatsz.
Ha ezt így írod le pawnban:
karakterlanc[6] = \"hello\";
vagy így
karakterlanc[] = \"hello\";
azzal gyakorlatilag ezt csináltad:
karakterlanc[0] = \'h\';
karakterlanc[1] = \'e\' ;
karakterlanc[2] = \'l\';
karakterlanc[3] = \'l\';
karakterlanc[4] = \'0\';
karakterlanc[5] = \'\\0\';
Röviden, minden egyes cella egyetlen egy karaktert tartalmaz. (tömörítetlenül,<-ez késõbbi dolog egyelõre ne foglalkozz vele)
Természetesen szinte minden írásjelet képes tárolni egy ilyen cella, beleértve a számokat is lásd: http://www.asciitable.com/
Létrehozhatsz egy ilyen filterscriptet és lefuttatva, meglátod mit is csinál:
#include <a_samp>
public
OnFilterScriptInit()
{
new
str[] = \"hello\";
print(str);
printf(\"%c%c%c%c%c\", str[0], str[1], str[2], str[3], str[4]);
//***************
print(\"\\n\\n\");
strteszt();
//***************
print(\"\\n\\n\");
strteszt2();
//***************
return 1;
}
stock
strteszt()
{
new
str[6];
str = \"hello\";
print(str);
printf(\"%c%c%c%c%c\", str[0], str[1], str[2], str[3], str[4]);
}
stock
strteszt2()
{
new
str[6];
str[0] = \'h\';
str[1] = \'e\';
str[2] = \'l\';
str[3] = \'l\';
str[4] = \'0\';
str[5] = \'\\0\';
print(str);
printf(\"%c%c%c%c%c\", str[0], str[1], str[2], str[3], str[4]);
}
Ebbõl igazából azt lehet látni hogy többféleképpen használható az így létrehozott változó, de az eredmény ugyanaz.
Ez olyan mint egy tutorial [mert az xd]
Miért nem írod ki TuT -nak? :D
Sztem érdemes, jó lett és érthetõ is.. :D
[bocs az offért :)]
Dexter
-
Ez most így fura, egy kérdés, ha már témánál vagyunk.
Ha beírjuk hogy
new string[];
Akkor úgy lesz, hogy ha írok valamit, akkor pont annyi karaktert fog használni, ami nekem kell? Lehet rosszul magyaráztam, de normálisan sose tudtam elmagyarázni semmit.
-
Köszönöm a gyors és érthetõ válaszokat!
Ez most így fura, egy kérdés, ha már témánál vagyunk.
Ha beírjuk hogy
new string[];
Akkor úgy lesz, hogy ha írok valamit, akkor pont annyi karaktert fog használni, ami nekem kell? Lehet rosszul magyaráztam, de normálisan sose tudtam elmagyarázni semmit.
Ezt még én is kérdezném :D Lehet hogy amit beírsz értéknek, pl 200, maximum annyi karakternyi szöveg lehet? :question:
-
Nem, amit beleírsz annál egyel kisebb, mert a végén ott lesz a \'\\0\' karakter.
-
Köszönöm! Zárom
-
new
str[] = \"hello\";
Ebben a formában a pawn fordító megállapítja mekkora méretnek kell benne lennie.
Ilyen kis szövegeknél se meddig nem tartana megszámolni mekkora méretet kell oda írni.
new str[] = \"De ha hosszabb karakterláncot alkalmazunk, már idõigényes megszámolni a karakterek számát, és nekünk megadni.\";
Ezt a feladatot veszi le a vállunkról a pawncc.exe.
Értéket akkor érdemes meghatározni, ha másvalamire is szeretnénk használni ezt a változót, az értéke általában jóval több mint a benne tárolt adat, de sosem lehet kevesebb annál, a fordító hibaüzenettel jelezni is fogja.
A 128-as érték igazából csak egy megszokott érték, ami a legtöbb helyen bõven elegendõ.
A ShowPlayerDialog-ban megjelenített üzenet már akár 4000-es méretet is megkívánhat.