[Tutorial] PlayerTextDraw - Onde devemos usar? Pra que serve?
#1

Introduзгo
Visto que muita gente tem uma certa dificuldade neste ponto, resolvi entгo fazer este pequeno tutorial explicando um pouco das funзхes de cada tipo de TextDraw.

Qual a diferenзa dela para a TextDraw Global?
Como o prуpio nome jб fala, ela й global e й criada pra todos os jogadores que estгo conectados, jб as PlayerTextDraw sгo criadas pra um jogador especнfico.
* Exemplo: Se vocк for criar uma TextDraw colocando a quantidade de jogadores online, vocк terб que usar a global, mas se for usar apenas pra jogadores especнficos usarб a PlayerTextDraw.

Qual TextDraw devemos usar?
Quando se deve usar TextDraws estбticas (TextDraws):
  • TextDraws em geral que nгo precisem alterar seu valor ou outras instruзхes como cor, tamanho, sombra, cor da sombra, box, etc, para cada player, caso altere, tem que alterar para todos.
Quando se deve usar TextDraws dinвmicas (PlayerTextDraws):
  • Opostamente аs estбticas, sу use TextDraws dinвmicas caso seu valor ou outras informaзхes precisam ser modificadas para um player especнfico. Caso vocк queira que uma textdraw tenha uma string, cor, tamanho, etc, diferentes para cada player, aн vem a necessidade de textdraws dinвmicas.
Quais sгo os seus limites?
O limite de PlayerTextDraw sгo de apenas 256 PER-PLAYER, enquanto as globais sгo de 2048.

Exemplo de cуdigo com PlayerTextDraw.
PHP Code:
/*
    ipsLuan - since 2013
    www.ipsteam.net
*/
#include <a_samp> //Incluimos a biblioteca a_samp.
/* vars */
new
    
PlayerText: @_teste[MAX_PLAYERS], //Criamos a variбvel e definimos como PlayerText.
    
@_format[34], //Criamos o variбvel @_format.
    
@_nome[24]; //Criamos a variбvel @_nome.
;
public 
OnPlayerConnect(playerid) {
    
/* PlayerTextDraw */
    
@_teste[playerid] = CreatePlayerTextDraw(playerid296.111083165.407409"Seu nome: ipsLuan.");
    
PlayerTextDrawLetterSize(playerid, @_teste[playerid], 0.2816661.164445);
    
PlayerTextDrawAlignment(playerid, @_teste[playerid], 1);
    
PlayerTextDrawColor(playerid, @_teste[playerid], -1);
    
PlayerTextDrawSetShadow(playerid, @_teste[playerid], 0);
    
PlayerTextDrawSetOutline(playerid, @_teste[playerid], 1);
    
PlayerTextDrawBackgroundColor(playerid, @_teste[playerid], 51);
    
PlayerTextDrawFont(playerid, @_teste[playerid], 3);
    
PlayerTextDrawSetProportional(playerid, @_teste[playerid], 1);
    return 
1;
}
public 
OnPlayerSpawn(playerid) {
    
GetPlayerName(playerid, @_nomesizeof(@_nome); //Armazenamos o nome na string @_nome.
    
format(@_formatsizeof(@_format), "Seu nome: %s", @_nome); //Formatamos @_format.
    
PlayerTextDrawSetString(playerid, @_teste[playerid], @_format); //Setamos a PlayerTextDraw.
    
PlayerTextDrawShow(playeridPlayerText:@_teste[playerid]);
    print(
"DEBUG: Mostrou o nome"); //DEbug bбsico.
    
return 1;

Exemplos de cуdigo com TextDraw global.
PHP Code:
/*
    ipsLuan - since 2013
    www.ipsteam.net
*/
#include <a_samp> //Incluimos a biblioteca a_samp.
/* vars */
new
    
Text: @_teste//Criamos a variбvel e definimos como Text global.
    
@_nome[24]; //Criamos a variбvel @_nome.
;
public 
OnGameModeInit() {
    @
_teste TextDrawCreate(240.0580.0"Bem vindo."); //Criamos a TextDraw.
    
SetTimerEx("@_esconder"2000false"i"playerid); //Criamos um timer de 2 segundos.
    
return 1;
}
public 
OnPlayerConnect(playerid) {
    
TextDrawShowForPlayer(playerid, @_teste); //Mostramos a TextDraw.
    
return 1;
}
forward @_esconder(playerid);
public @
_esconder(playerid) {
    
TextDrawHideForPlayer(playerid, @_teste); //Escondemos a TextDraw.
    
print("[DEBUG] TextDraw escondida."); //Debug bбsico.
    
return 1;

Perguntas frequentes
Pergunta: A TextDraw sу aparece pro ID 0, o que fazer?
Resposta: Use PlayerTextDraw.

Pergunta: Vou criar um sistema de informaзхes de cada jogador, qual devo usar?
Resposta: Use PlayerTextDraw.

Pergunta: Vou criar uma TextDraw pra mostrar o nome do servidor, qual devo usar?
Resposta: Use TextDraw global.

Crйditos
SA:MP Team - Pela include a_samp.
ipsLuan - Criador dos tutorial e pela maioria dos cуdigos.
Jimmmy - Pelo cуdigo @_teste. (Peguei de um sistema dele e adaptei).
ipsLeon - Por reportar algumas irregularidades.


*** ATENЗГO: Tуpico sujeito а alteraзхes.
Reply
#2

Muito bom tutorial, +REP.
Reply
#3

Muito bom Luan, bem explicado e organizado o tуpico, vai ajudar muito a galera que estб aprendendo ou que ainda tem duvidas relacionadas a TextDraw e PlayerTextDraw
Reply
#4

Essa nomenclatura de variбveis fica confuso, fora do padrгo, estranho e atй mesmo "feio" no script em si.

Do mais, bom tutorial, apesar de simples.
Reply
#5

Quote:
Originally Posted by Lуs
View Post
Essa nomenclatura de variбveis fica confuso, fora do padrгo, estranho e atй mesmo "feio" no script em si.

Do mais, bom tutorial, apesar de simples.
Costumo a usar ela, e acho um tesгo, fora dos padrхes porйm perfeita.
Reply
#6

Quote:

new
Text: @_teste[MAX_PLAYERS],

Textdraws globais nгo devem ser indexadas com MAX_PLAYERS, visto que criando assim vocк terб 500 textdraws criadas, quando na verdade sу precisa de 1.

Textdraws tкm que ser divididas em estбticas e dinвmicas, sendo respectivamente textdraws globais e playertextdraws.

Quando se deve usar TextDraws estбticas (TextDraws):
  • TextDraws em geral que nгo precisem alterar seu valor ou outras instruзхes como cor, tamanho, sombra, cor da sombra, box, etc, para cada player, caso altere, tem que alterar para todos.
Quando se deve usar TextDraws dinвmicas (PlayerTextDraws):
  • Opostamente аs estбticas, sу use TextDraws dinвmicas caso seu valor ou outras informaзхes precisam ser modificadas para um player especнfico. Caso vocк queira que uma textdraw tenha uma string, cor, tamanho, etc, diferentes para cada player, aн vem a necessidade de textdraws dinвmicas.
Limites:

TextDraws estбticas: 2048 <- Nгo й recomendado indexar valores altos.
TextDraws dinвmicas: 256 POR PLAYER, ou seja, vocк pode indexar 256 PlayerTextDraws com MAX_PLAYERS.


Espero ter esclarecido, bom tutorial apesar de alguns erros.
Reply
#7

Quote:
Originally Posted by ipsLeon
View Post
Textdraws globais nгo devem ser indexadas com MAX_PLAYERS, visto que criando assim vocк terб 500 textdraws criadas, quando na verdade sу precisa de 1.

Textdraws tкm que ser divididas em estбticas e dinвmicas, sendo respectivamente textdraws globais e playertextdraws.

Quando se deve usar TextDraws estбticas (TextDraws):
  • TextDraws em geral que nгo precisem alterar seu valor para cada player, caso altere, tem que alterar para todos.
Quando se deve usar TextDraws dinвmicas (PlayerTextDraws):
  • Opostamente аs estбticas, sу use TextDraws dinвmicas caso seu valor ou outras informaзхes precisam ser modificadas para um player especнfico. Caso vocк queira que uma textdraw tenha uma string, cor, tamanho, etc, diferentes para cada player, aн vem a necessidade de textdraws dinвmicas.
Limites:

TextDraws estбticas: 2048 <- Nгo й recomendado indexar valores altos.
TextDraws dinвmicas: 256 POR PLAYER, ou seja, vocк pode indexar 256 PlayerTextDraws com MAX_PLAYERS.


Espero ter esclarecido, bom tutorial apesar de alguns erros.
Correto, esqueci de retirar o MAX_PLAYERS e de citar algumas caracterнsticas.
Reply
#8

Otimo tutorial parabкns
Reply
#9

Saudaзхes !


Nгo esqueзa de citar que PlayerTextDraw costumam bugar com algumas sprites ... ao entrar uma quantidade de players ela buga ...


@recomendaзгo: nгo use muitos sprites em playertext ...



Bem legal, parabйns !
Reply
#10

Espero que agora aprendam a usar isso corretamente.
Reply
#11

Bem explicado e organizado, parabйns.
Reply
#12

Muitos nгo sabem mesmo sobre isso.
Bom tutorial
Reply
#13

Bom tutorial.
Reply
#14

Quote:
Perguntas frequentes
Pergunta: A TextDraw sу aparece pro ID 0, o que fazer?
Resposta: Use PlayerTextDraw.

Pergunta: Vou criar um sistema de informaзхes de cada jogador, qual devo usar?
Resposta: Use PlayerTextDraw.

Se a textdraw sу aparecer pro ID 0 provavelmente й algum erro no script do jogador e nгo do id ou tipo da textdraw em si. Caso o scripter faзa um loop incorreto ou passe parвmetros incorretos na instruзгo de mostrar a textdraw pode causar o erro.

Ao criar qualquer tipo de sistema dinвmico (onde hб playertextdraws) geralmente vocк tambйm poderб usar textdraws estбticas para economizar, por exemplo, uma box de fundo padrгo pra todos os usuбrios nгo precisa ser em PlayerText, dб pra fazer uma boa economia de textdraws dinвmicas com isso.





Muito bom tutorial Luan, espero que continue a trazer conteъdos assim
Reply
#15

Sim, geralmente faзo isso.
Os boxs crio como global, mas as informaзхes coloco em PlayerTextDraw.
Reply
#16

Parabйns.
Reply
#17

Boas dicas, serб de grande utilidade em caso de dъvidas.
Reply
#18

Bom tutorial
Reply
#19

Muito bom o tutorial luan.
Reply
#20

Grato pelos feedbacks.
Reply


Forum Jump:


Users browsing this thread: 6 Guest(s)