Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Qui 21 Nov 2024, 13:33
» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31
» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23
» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49
» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58
» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36
» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36
» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33
» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51
» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28
» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18
» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08
» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10
» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16
» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40
» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01
» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45
» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34
» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28
» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48
» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54
» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14
» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50
Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!
+8
joorock12
Suadao
juao230
lipe1994
wac2007
patofu3.0
vinians
joaoneto
12 participantes
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!
Na aula passada eu prometi que aprenderíamos a fazer um Pong. Como eu acho que Pong é do tempo que eu era criança(a uns 25 anos atrás) então não acho que a galera de hoje queria fazer esse tipo de jogo.
Então, eu resolvi dar um passo um pouco maior, e fazermos logo um exemplo com movimento tipo RPG, com clique de mouse e tudo mais. Não serão necessários muitos eventos, nem código. As coisas começarão a complicar mais para frente, quando trabalharmos com banco de dados. Vamos começar.
Vamos começar um projeto novo. Para deixar o projeto com o “básico” para iniciar, siga as instruções da segunda lição, aqui.
Estando com o projeto iniciado, você com certeza já sabe que devemos iniciar por um objeto Controlador. No exemplo do Chat criamos um ObjStart. Agora, criaremos um ObjControle. É interessante seguir uma nomenclatura para não se perder na hora que o seu projeto estiver enorme.Vou explicar qual será nosso procedimento:
Criaremos 3 Objetos. O ObjControle ficará responsável por logar no Listener, avisar a todos que entramos, controlar nossos movimentos, avisar a todos aonde estamos e por fim, avisar a todos que saímos.
Os outros dois objetos serão idênticos, diferenciados apenas pelo nome. Um deles será o nosso player, o outro será o “Clone” do(s) player(s) que estiver(em) logado(s) no Listener também.
Vamos começar então. Crie um objeto com o nome de ObjControle. Adicione a ele os seguintes eventos:
Em todos eles, Adicione um Execute Code. Agora, Coloque os códigos conforme abaixo:
Create:
Você deve ter notado dois novos comandos, pack e unpack.
pack(numero, tamanho);
retorna o numero compactado no tamanho especificado.
unpack(valor, posição, tamanho);
O inverso do pack. Retorna o numero real descompactado no tamanho a partir da posição. Lembrar que a posição inicial é 1.
O uso do pack é exatamente para diminuir o tamanho do objeto que será passado para o Listener, aumentando assim sua performance de leitura e conseqüente resposta. Como os códigos estão bem comentados, e com certeza você já se familiarizou com eles, não há necessidade de explica-los.
2º passo: Vamos criar agora nossos Objetos Player. Eu aconselho a usar sprites diferentes, para que fique fácil identificar quem é player e quem é clone. O GM possui alguns sprites de modelo, mas use os que você quiser, a seu gosto.
Crie um objeto com o nome de objPlayer. Adicione a ele dois Eventos:
Adicione em cada um um Execute code e neles os códigos abaixo:
Create:
Eu sei, você está louco pra ver o char andando pela tela, e vários chars andando junto com ele. Após tudo que fizemos aí em cima, se tudo estiver correto, faça como na aula passada. Crie uma room, e coloque nela os objetos ObjControle e o ObjPlayer. Compile o projeto, execute e configure o DirectServer, e execute duas ou mais instancias do Client.exe.
A imagem abaixo foi o meu teste, olha só:
Finalmente começamos a fazer “jogos”. Não é mesmo?? Mesmo ainda havendo bugs e mais bugs, pense em como fazer um game Online com o GM está cada vez mais parecendo simples. E olha que eu nem comecei ainda...
Vou dar uma dica: quer fazer o teste com algum amigo?? Simples demais. Se você não sabe como configurar o no-ip, acesse o link abaixo:
http://www.jogosrpg.com.br/forum/index.php/topic,219.0.html
Após configurar o no-ip, mude o script que está no Create, do objeto ObjControle, trocando "LocalHost" pelo endereço do seu no-ip. Abra e configure o DirectServer, e mande o pacote(exe + dll) para o seu amigo. Bugs a parte, é apenas para que você entenda como funciona a criação de um game Online no GM, e em qualquer outro maker, pois a idéia acima(do clone) é exatamente o que acontece em todo jogo Online.
Que tal começarmos a dificultar as coisas? Próxima aula eu começarei a falar de banco de dados. Seus players podem ter contas, e acessar o jogo de qualquer lugar !!
Até a próxima.
Então, eu resolvi dar um passo um pouco maior, e fazermos logo um exemplo com movimento tipo RPG, com clique de mouse e tudo mais. Não serão necessários muitos eventos, nem código. As coisas começarão a complicar mais para frente, quando trabalharmos com banco de dados. Vamos começar.
Vamos começar um projeto novo. Para deixar o projeto com o “básico” para iniciar, siga as instruções da segunda lição, aqui.
Estando com o projeto iniciado, você com certeza já sabe que devemos iniciar por um objeto Controlador. No exemplo do Chat criamos um ObjStart. Agora, criaremos um ObjControle. É interessante seguir uma nomenclatura para não se perder na hora que o seu projeto estiver enorme.Vou explicar qual será nosso procedimento:
Criaremos 3 Objetos. O ObjControle ficará responsável por logar no Listener, avisar a todos que entramos, controlar nossos movimentos, avisar a todos aonde estamos e por fim, avisar a todos que saímos.
Os outros dois objetos serão idênticos, diferenciados apenas pelo nome. Um deles será o nosso player, o outro será o “Clone” do(s) player(s) que estiver(em) logado(s) no Listener também.
Vamos começar então. Crie um objeto com o nome de ObjControle. Adicione a ele os seguintes eventos:
- Create
- Step
- Global Left released
- Press
Em todos eles, Adicione um Execute Code. Agora, Coloque os códigos conforme abaixo:
Create:
- Código:
//Iniciamos a SOC
soc_init();
//Tentamos Conectar
if(!player_connect(8040, "LocalHost")) {
show_message("A conexão Falhou.");
game_end();
exit;
}
//Enviamos a Mensagem de que entramos, e qual é a nossa posição atual
message_send(1, 0, pack((objPlayer).x, 2)+pack((objPlayer).y, 2));
- Código:
// checamos se chegou alguma mensagem
if(message_receive()) {
switch(message_id())
{
case 1:
// Se for um novo player, dizemos a ele que existimos
message_send(2, message_player(), pack((objPlayer).x, 2)+pack((objPlayer).y, 2));
case 2:
// Se for um novo player, ou algum já existente dizendo que existe
// temos que criar um novo objPlayerClone
o=instance_create(xstart, ystart, objPlayerClone);
(o).player=message_player();
(o).target_x=unpack(message_value(), 1, 2);
(o).target_y=unpack(message_value(), 3, 2);
break;
case 3:
// Atualizando a posição dos Players existentes
with(objPlayerClone) {
if(player==message_player()) {
target_x=unpack(message_value(), 1, 2);
target_y=unpack(message_value(), 3, 2);
}
}
break;
case 4:
// Quando algum sair, destruir seu clone
with(objPlayerClone) {
if(player==message_player()) {
instance_destroy();
}
}
break;
}
}
- Código:
//Achamos a posição do mouse
posX = mouse_x;
posY = mouse_y;
// Setamos nosso Player na posição do clique
(objPlayer).target_x=posX;
(objPlayer).target_y=posY;
// depois avisamos a todos os players que mudamos de posição
message_send(3, 0, pack(posX, 2)+pack(posY, 2));
- Código:
// Avisamos a todos que saimos
message_send(4, 0, "");
// Desconectamos...
player_disconnect();
// ... Finalizamos a SOC...
soc_free();
// ... E finalizamos o Jogo.
game_end();
Você deve ter notado dois novos comandos, pack e unpack.
pack(numero, tamanho);
retorna o numero compactado no tamanho especificado.
unpack(valor, posição, tamanho);
O inverso do pack. Retorna o numero real descompactado no tamanho a partir da posição. Lembrar que a posição inicial é 1.
O uso do pack é exatamente para diminuir o tamanho do objeto que será passado para o Listener, aumentando assim sua performance de leitura e conseqüente resposta. Como os códigos estão bem comentados, e com certeza você já se familiarizou com eles, não há necessidade de explica-los.
2º passo: Vamos criar agora nossos Objetos Player. Eu aconselho a usar sprites diferentes, para que fique fácil identificar quem é player e quem é clone. O GM possui alguns sprites de modelo, mas use os que você quiser, a seu gosto.
Crie um objeto com o nome de objPlayer. Adicione a ele dois Eventos:
- Create
- Step
Adicione em cada um um Execute code e neles os códigos abaixo:
Create:
- Código:
//Iniciando as Variáveis usadas por ele
player=-1;
target_x=x;
target_y=y;
- Código:
// Calculamos se onde o objeto está em relação aos pontos passados
dist=point_distance(x, y, target_x, target_y);
//Se for maior..
if(dist>0) {
// Movemos o objeto até ele
direction=point_direction(x, y, target_x, target_y);
speed=min(dist, 4);
} else {
// Caso contrário paramos.
speed=0;
}
Eu sei, você está louco pra ver o char andando pela tela, e vários chars andando junto com ele. Após tudo que fizemos aí em cima, se tudo estiver correto, faça como na aula passada. Crie uma room, e coloque nela os objetos ObjControle e o ObjPlayer. Compile o projeto, execute e configure o DirectServer, e execute duas ou mais instancias do Client.exe.
A imagem abaixo foi o meu teste, olha só:
Finalmente começamos a fazer “jogos”. Não é mesmo?? Mesmo ainda havendo bugs e mais bugs, pense em como fazer um game Online com o GM está cada vez mais parecendo simples. E olha que eu nem comecei ainda...
Vou dar uma dica: quer fazer o teste com algum amigo?? Simples demais. Se você não sabe como configurar o no-ip, acesse o link abaixo:
http://www.jogosrpg.com.br/forum/index.php/topic,219.0.html
Após configurar o no-ip, mude o script que está no Create, do objeto ObjControle, trocando "LocalHost" pelo endereço do seu no-ip. Abra e configure o DirectServer, e mande o pacote(exe + dll) para o seu amigo. Bugs a parte, é apenas para que você entenda como funciona a criação de um game Online no GM, e em qualquer outro maker, pois a idéia acima(do clone) é exatamente o que acontece em todo jogo Online.
Que tal começarmos a dificultar as coisas? Próxima aula eu começarei a falar de banco de dados. Seus players podem ter contas, e acessar o jogo de qualquer lugar !!
Até a próxima.
Última edição por joaoneto em Qua 04 Fev 2009, 14:15, editado 1 vez(es)
Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!
Otimo tutorial, essa DLL parece muito boa mesmo. Só algumas perguntas:
1-Essa DLL é melhor que 39DLL ?
2-É uma DLL free ou seja podemos distribuir com nossos jogos?
3-Sobre o tutorial, quando eu crio um novo Player vc envia uma mensagem para todos os players com o valor '0' quando cada player recebe esta mensagem o a própria DLL da um valor para o player?
Valeu
1-Essa DLL é melhor que 39DLL ?
2-É uma DLL free ou seja podemos distribuir com nossos jogos?
3-Sobre o tutorial, quando eu crio um novo Player vc envia uma mensagem para todos os players com o valor '0' quando cada player recebe esta mensagem o a própria DLL da um valor para o player?
Valeu
Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!
- na verdade ela não é "melhor" que a 39Dll, ela é mais simples de usar.
- Sim, ela é free.
- Quando se passa 0, significa que todos os players logados receberão a mensagem. Se for passado um ID específico( por exemplo 1 = Server ) Significa que só aquele player receberá a mensagem. Se enviar como no exemplo ( Player = 1 ) O servidor receberá uma mensagem para ele, e não replicará a ninguém.
O código usado nesta aula permite que haja apenas 2 players. observe o script que valida o ID da mensagem que chegou. para que haja mais players este código tem que conter uma validação do ID do player, Código esse que será explicado nas próximas lições.
Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!
ei o meu da isso alguem me ajuda
___________________________________________
FATAL ERROR in
action number 1
of Create Event
for object ObjControle:
COMPILATION ERROR in code action
Error in code at line 2:
soc_init();
at position 2: Unknown function or script: soc_init
___________________________________________
FATAL ERROR in
action number 1
of Create Event
for object ObjControle:
COMPILATION ERROR in code action
Error in code at line 2:
soc_init();
at position 2: Unknown function or script: soc_init
patofu3.0- Data de inscrição : 10/08/2009
Reputação : 0
Número de Mensagens : 54
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!
patofu3.0 escreveu:ei o meu da isso alguem me ajuda
___________________________________________
FATAL ERROR in
action number 1
of Create Event
for object ObjControle:
COMPILATION ERROR in code action
Error in code at line 2:
soc_init();
at position 2: Unknown function or script: soc_init
Seu erro é que deu conflito no script. Tipow tenta ver se o nome do script num tah errado. Se o nome é soc_init() ev se num tah escrito soc_ini lembre-se que liguagem de programação é case-sensitive ;)
Flws o/
Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!
ta certo o ta assim:
//Iniciamos a SOC
soc_init();
//Tentamos Conectar
if(!player_connect(8040, "LocalHost")) {
show_message("A conexão Falhou.");
game_end();
exit;
}
//Enviamos a Mensagem de que entramos, e qual é a nossa posição atual
message_send(1, 0, pack((objPlayer).x, 2)+pack((objPlaye
//Iniciamos a SOC
soc_init();
//Tentamos Conectar
if(!player_connect(8040, "LocalHost")) {
show_message("A conexão Falhou.");
game_end();
exit;
}
//Enviamos a Mensagem de que entramos, e qual é a nossa posição atual
message_send(1, 0, pack((objPlayer).x, 2)+pack((objPlaye
patofu3.0- Data de inscrição : 10/08/2009
Reputação : 0
Número de Mensagens : 54
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!
gente deu certomas so que ao contrario de entrar so um entra tres players tipo
new conection from 127.00.1 assigned to player id 2
new conection from 127.00.1 assigned to player id 3
new conection from 127.00.1 assigned to player id 4
isso so com uma pessoa online eu e depois que abro outra tela copmo na imagem do tutorial ai aparece ...to player id 5...(repete o de cima sendo com id 6,7)
depois disso os dois players nao so diferentes e nao andam um na tela do outroquando um anda o outro fica parado sem falar que e o mesmo sprite de ambos mas quando configurei coloquei para ser diferente
new conection from 127.00.1 assigned to player id 2
new conection from 127.00.1 assigned to player id 3
new conection from 127.00.1 assigned to player id 4
isso so com uma pessoa online eu e depois que abro outra tela copmo na imagem do tutorial ai aparece ...to player id 5...(repete o de cima sendo com id 6,7)
depois disso os dois players nao so diferentes e nao andam um na tela do outroquando um anda o outro fica parado sem falar que e o mesmo sprite de ambos mas quando configurei coloquei para ser diferente
patofu3.0- Data de inscrição : 10/08/2009
Reputação : 0
Número de Mensagens : 54
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!
Bom,gostei do Tuto e não sei se estou revivendo :p (Mais tuto pode reviver não é??)
Como eu faria para colocar mais de 2 players???
O João neto Não vai responder,mais alguem pode me ajudar??
GRATO
Como eu faria para colocar mais de 2 players???
O João neto Não vai responder,mais alguem pode me ajudar??
GRATO
Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!
Quem nem o cara ai de cima, tem um problema...
Nem um dos dos links que ele passou pegou no meu, os dois deram erro.
Se puder ajeita ai o link por favor.
Nem um dos dos links que ele passou pegou no meu, os dois deram erro.
Se puder ajeita ai o link por favor.
juao230- Data de inscrição : 17/12/2009
Reputação : 0
Número de Mensagens : 217
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!
No meu também não pegou o link,
Que pena que o joaoneto
não visita mais o fórum :/
Valew!
Que pena que o joaoneto
não visita mais o fórum :/
Valew!
Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!
Aqui como eu faço pra criar um "Poder" do player?
joorock12- Games Ranking :
Notas recebidas : E
Data de inscrição : 26/01/2010
Reputação : 0
Número de Mensagens : 154
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!
O meu tá dando esse erro :
Maus se estou revivendo, mas eu preciso de ajuda :oops:
- Spoiler:
___________________________________________
ERROR in
action number 1
of Create Event
for object objStart:
In script message_send:
Error in code at line 14:
/* message_send( id, player, value);Sends a message.id - The message id.player - The player.value - The string to send.*/var buf, cur, size, i;// Create a buffer.buf=buffer_create();// Fills it.buffer_add(buf, global.SOC_BYTE, argument0);if(global.___SOC_PLAYER_HOST) { if(argument3==0) { buffer_add(buf, global.SOC_SHORT, 1); } else { buffer_add(buf, global.SOC_SHORT, argument3); }} else { buffer_add(buf, global.SOC_SHORT, argument1);}buffer_add(buf, global.SOC_BYTE, min(255, string_length(argument2)));buffer_add(buf, global.SOC_STRING, min(255, string_length(argument2)), argument2);// If we are hosting...if(global.___SOC_PLAYER_HOST) { // If the message is for all players... if(argument1==0) { size=ds_map_size(global.___SOC_PLAYER_MAP); cur=ds_map_find_first(global.___SOC_PLAYER_MAP); // Loop through all players and send the message to them. for(i=0; i<size; i+=1) { if(cur!=argument3&&ds_map_exists(global.___SOC_PLAYER_MAP, cur)) { soc_send(ds_map_find_value(global.___SOC_PLAYER_MAP, cur), buf); } cur=ds_map_find_next(global.___SOC_PLAYER_MAP, cur); } } else { // Else send the message to the player is directed to. if(ds_map_exists(global.___SOC_PLAYER_MAP, argument1)) { soc_send(ds_map_find_value(global.___SOC_PLAYER_MAP, argument1), buf); } }} else { // Just send it to the server, and let it handle the message. soc_send(global.___SOC_PLAYER_SOCKET, buf);}// Destroy the buffer.buffer_destroy(buf);
^
at position 11: Unknown variable ___SOC_PLAYER_HOST
Maus se estou revivendo, mas eu preciso de ajuda :oops:
Adriel- Data de inscrição : 18/07/2009
Reputação : 2
Número de Mensagens : 924
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!
Ta dando isso alguem por favor me ajuda:
___________________________________________
ERROR in
action number 1
of Create Event
for object objControle:
Error defining an external function.
___________________________________________
ERROR in
action number 1
of Create Event
for object objControle:
Error defining an external function.
shaedol- Data de inscrição : 21/09/2010
Reputação : 0
Número de Mensagens : 45
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!
quando da esse erro do 'Error defining an external function'
voce tem de ir á pasta onde guardou o jogo juntamente com o DirectServer
e abrir o direct server escrever '8040' e carregar 'enter' depois vai aperecer 'y/n' voce carrega 'y' depois sim abre o jogo.
Ah eu tambem tenho uma duvida quando abro o jogo aparece 'Error in code at line 2:
case 2:
^
at position 9: Case statement only allowed inside switch statement.
'
voce tem de ir á pasta onde guardou o jogo juntamente com o DirectServer
e abrir o direct server escrever '8040' e carregar 'enter' depois vai aperecer 'y/n' voce carrega 'y' depois sim abre o jogo.
Ah eu tambem tenho uma duvida quando abro o jogo aparece 'Error in code at line 2:
case 2:
^
at position 9: Case statement only allowed inside switch statement.
'
joaomalhao- Data de inscrição : 08/06/2011
Reputação : 0
Número de Mensagens : 35
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Curso GM Online - 4º Lição - Que Pong que nada, Movimento de Players !!
o link ta quebrado!
O link ta quebrado, não da pra entrar, mais da pra fazer sem o download? oque eu preciso?
O link ta quebrado, não da pra entrar, mais da pra fazer sem o download? oque eu preciso?
Tópicos semelhantes
» Curso GM Online - 1º lição - Saiba como funciona um jogo Online
» Curso GM Online - 5º Lição - 1º parte - Banco de dados
» Curso GM Online - 5º Lição - 2º parte - Banco de dados
» Curso GM Online - 5º Lição - 3º Parte - Banco de Dados
» Curso GM Online - 2º Lição - Primeiro teste Client/Listener
» Curso GM Online - 5º Lição - 1º parte - Banco de dados
» Curso GM Online - 5º Lição - 2º parte - Banco de dados
» Curso GM Online - 5º Lição - 3º Parte - Banco de Dados
» Curso GM Online - 2º Lição - Primeiro teste Client/Listener
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos