Makers a Mil
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Procurar
 
 

Resultados por:
 


Rechercher Pesquisa avançada

Últimos assuntos
» Fórum de Panda
[tuto(GM)]Tutorial completo de GML I_icon_minitimeQua Jul 06, 2011 12:48 pm por guilherme

» [tuto(GM)]Tutorial completo de GML
[tuto(GM)]Tutorial completo de GML I_icon_minitimeQua Jul 06, 2011 12:38 pm por guilherme

» [Softwares(GM)] Navegador Oficial Makers a Mil ™ !
[tuto(GM)]Tutorial completo de GML I_icon_minitimeTer Jul 05, 2011 4:28 pm por !G☼.☼┴£?

» COMO USAR O SITE
[tuto(GM)]Tutorial completo de GML I_icon_minitimeTer Jul 05, 2011 12:04 pm por Henrique_GJ

» [GM] B & W
[tuto(GM)]Tutorial completo de GML I_icon_minitimeSeg Jul 04, 2011 4:56 pm por !G☼.☼┴£?

» [GM] R B G
[tuto(GM)]Tutorial completo de GML I_icon_minitimeSeg Jul 04, 2011 4:50 pm por !G☼.☼┴£?

» [GM] MiNuS
[tuto(GM)]Tutorial completo de GML I_icon_minitimeSeg Jul 04, 2011 4:47 pm por !G☼.☼┴£?

» [GM]DESTROYER
[tuto(GM)]Tutorial completo de GML I_icon_minitimeSeg Jul 04, 2011 4:45 pm por !G☼.☼┴£?

» [GM]EsKELetoN
[tuto(GM)]Tutorial completo de GML I_icon_minitimeSeg Jul 04, 2011 4:43 pm por !G☼.☼┴£?

Palavras-chaves

Parceiros
Fórum grátis
Os membros mais ativos da semana
Nenhum usuário

Votação

[tuto(GM)]Tutorial completo de GML

2 participantes

Ir para baixo

[tuto(GM)]Tutorial completo de GML Empty [tuto(GM)]Tutorial completo de GML

Mensagem  Henrique_GJ Ter Jul 05, 2011 11:44 am

[tuto(GM)]Tutorial completo de GML 1-71
um Tuto_GJ de Henrique_GJ

ola galera vejo que eu não estou ajudando muito com o forum então resolvi fazer um tuto para os iniciantes que estão em D&D

alias vou ver se faço varios, mas eu não entendo tanto assim para aprofundar os tutoriais então vou ensinar so os iniciantes a começarem com GML o resto é com eles


1°, como usar codigos?

vc devera colocar os codigos que eu ensinarei como utilizar em um script ou em um objeto

primeiro

para colocar um codigo em um objeto, va no evento desejado e insira o icone "execute code" e nele vc colocara o codigo que eu ensinarei daqui a pouco como se faz para criar

para fazer um script, clique no icone "create a script" ao lado de pacth, e font, depois vocÊ pode "mandar" um objeto executar esse script com o icone "execute script" (na aba control) ou, por codigos, mas quanto aos codigo ensinarei agora:


primeiro o que eu vou ensinar primeiramente

o que é uma variavel

se vc ja souber o que é mesmo assim não pule pois eu ensinarei a alterá-la em codigos

primeiro, uma variavel é um espaço na memoria no computador que vai guardar uma informação, ex: em um jogo de mario, o numero de vidas fica numa variavel, quando o jogo começa a variavel que guarda o numero de vidas é 5, e toda vez que o mario morre o numero diminui 1, exemplo, se for 5, quando ele morrer vai virar quatro e se for quatro vai virar 3 e assim por diante, quando chegar a zero, vai pra room Game Over

entendeu? se vc não entendeu, uma variavel guarda uma informação na memoria, como um texto por exemplo, se vc quizer fazer uma contagem de vidas, vai ter que criar uma variavel pra armazenar o numero de vidas, uma variavel nesse caso pode funcionar como uma contagem de vidas, pontos, e etc

existem variaveis locais e globais, as variaveis locais só funcionam em um objeto especifico, ja as globais agem sobre todos os objetos

os nomes das variaveis locais são simples, só pode ter letras, numero e o simbolo _

exemplo, eu posso criar uma variavel chamada "vidas"

para criá-la basta ir no create de um player e colocar vidas = # trocando o # pelo numero que ela deve ter guardado

se vc nã entendeu nada, supondo que eu queira fazer um jogo onde o player devera ter 3 vidas no inicio

eu vou no create e coloco vidas = 3 e pronto, simples neh?

lembrando que as variaveis podem ter um numero com virgula, mas no GM não se usa virgulas em numero e sim o . exemplo 0.5


depois vem a parte de se alterar as variaveis, supondo que vc tenha um objeto chamado "espinho" e toda vez que o player tocar o espinho ele devera perde uma vida, como vc vai fazer ele morrer eu ensino depois, mas para diminuir o valor da variavel vc deveria colocar, nesse caso, o seguinte codigo no evento colisão do player com o espinho:

vidas -= 1

meio complicado neh esse "-=" mas é assim mesmo

supondo que eu tenha um objeto "ponto" e toda vez que o player tocar o ponto, a variavel "pontos" devera almentar em 1, primeiro vc deve colocar:

pontos += 1 pois nesse caso queremos almentar o valor dela em um, exemplo, se vc colocar isso, se o player tiver 51 pontos e tocar no objeto ponto passra a ter 52 pontos

obs.: nesse caso do ponto, vc devera colocar tbm no objrto ponto pra quando colidir com o player o objeto ponto se destruir, pois se vc não fizer isso a moedinha vai continuar ali e o player vai continuar ganhando ponto sem parar, logo alem de almentar os pontos a moeda deve se destruir

da mesma forma que vc colocou

vidas -= 1
pontos +=1

e etc vc pode aumentar uma variavel, diminuí-la, multiplicar por um numero qualquer, dividi-la, e varias outras coisas

exemplo supondo que quando tocar no objeto x5 o objeto x5 vai se destruir e os pontos serão multiplicados por 5

vc coloca

pontos*=5

e supondo que fosse para dividir ao inves de multiplicar ao inves de colocar pontos*=5 vc colocaria pontos/=5

e assim por diante mas o importante é que

+ soma
- diminui
* multiplica
/ divide


agora vc ja sabe o que é uma variavel, ela guarda um texto ou um numero, nos exemplos que dei ensinei a fazer uma contagem de vidas e de pontos

obs.: supondo que vc quizesse guardar um texto iria ficar variavel = "texto" não se esqueça de colocar o texto entre aspas



variaveis globais

as variaveis globais são variaveis que agem sobre todos os objetos, as variaveis locais só agem sobre o objeto que a criou, mas a variavel globai existe para todos ele, para criar e usar um variavel global, é praticamente a mesma coisa que a local, a diferença é que o nome dela deve começar com global. e sempre que você for criar ou utiliza-la devera colocar global. antes ou dara erro

exemplo, criando uma variavel global chamada tempo

global.tempo = 100

exemplo, diminuindo a variavel tempo em 1

global.tempo -= 1

e assim por diante

as variaveis locais se você cria ela no objeto player e depois altera ela no objeto inimigo dara erro, pois essa variavel so existe para o player, agora, se você precisar alterar ela no inimigo essa variavel devera ser global, ai vc pode criar ela e depois altera-la em qualquer objeto, observação, como eu disse no create vc deve criar a variavel, se você criar um objeto que va alterar essa variavel, lembre-se que se ele alterar a variavel, antes dela ser criada, dara erro pois ele tentara alterar uma variavel que não existe, exemplo, o evento create acontece quando um objeto é criado certo? se vocÊ coloca global.tempo = 100 no create do objeto player, e o objeto inimigo devera diminui-la, no step, mas se o objeto inimigo ja existir antes do player, a variavel global.tempo so existira quando o player for criado, e o inimigo, antes do player ser criado ja estara tentando altera-la logo isso dara erro, nesse caso você teria que criar um outro objeto que crie essas variaveis, normalmente criase um objeto chamado controle e no create dele se coloca todas as variaveis, e vc coloca esse objeto controle no inicio do jogo, assim não dara erro nenhuma vez




*a "logica" da programação





primeiro, como é a logica?

o basico é você dar uma ordem ao GM

existem funções e ações que vc so coloca ela e ela se executa, ex:

instance_destroy()

esse codigo faz o objeto se destruir, ele apaga a sim mesmo da room, é como se vc mandasse o objeto se destruir, porem, normalmente um objeto não existe somente para se destruir, o objeto instance_destroy() deve ser utilizado em um momento especifico para isso existem as condições

a condição é mais ou menos assim, IF (no GMem letras minusculas, if) significa SE, vc usa esse codigo para executar um outro codigo somente se algo estiver acontecendo, ex:

if condição
{
ação
}

como assim cara nem entendi nada

eu sei que vc não entendeu e é por isso mesmo que eu lhe darei um exempl oligado a vida real, supondo que vc tivesse uma caixinha lacrada e tivesse umas balinhas no fundo, mas vc so gosta da de morango então, o codigo ficaria mais ou menos assim:

if bala é de morango
{
chupar bala
}

entendeu +/- como é a logica?

então ta bom!

vamos para os codigos agora voltando ao GM


voltando ao exemplo das vidas, eu ensinei a fazer a contagem, mas só porque falamos pro GM contar as vidas isso não significa que ele vai fazer o Game Over sozinho

por exemplo, supondo que o Game Over deva acontecer quando a variavel vidas for igual a zero, você poderia colocar, no step do player:

if vidas = 0
{
instance_destroy()
}

se eu coloco vidas = 0, as vidas ficam iguais a zero, se eu coloco if antes, aquilo que eu colocar entre { e } só sera executado se a variavel vidas realmente for igual a zero

lembrando que sempre depois de uma condição como essa, o que deverá acontecer deve estar entre { e }, exemplo

if condição
{
quando temos uma condição, essa condição podera dar true ou false, no exemplo das vidas, se as vidas forem iguais a 0 mesmo, dará true, que significa verdadeiro, se não for 0 dara false que significa falso, no caso de der verdadeiro, ou seja, nesse exemplo, se vidas realmente for igual a zero, dara true, e então, tudo o que eu colocar dentro de { e } sera executado, ou seja, se a condição acima de verdadeiro, tudo o que eu colocar aqui, sera executado
}

obs.: no exemplo que dei em que coloquei instance_destroy() caso vidas for igual a zero, é só um exemplo bem, simples que utilizei, na verdade, se você colocar isso, quando vidas for igual a zero, o objeto vai ser destruido, ou seja, quando a variavel vidas for igual a zero o objeto vai simplesmente sumir da tela, foi so um exemplo pra vc entender a logica, depois eu ensinarei como fazer esse codigo completo

você ainda não e capaz de fazer praticamente nada em GML, mas vai por mim: vc ja progrediu muitoooooooooo


funções


funções são... são... script enormes que ja vem no GM prontos para serem utilizados somente digitando o nome da função

exemplo, instance_destroy() esse instance_destroy() é uma função que destroi um objeto, é um script enorme que esta dentro do GM, e para utilizar esse script basta digitar instance_destroy()

existem milhares de funções que você pode usar, o nome de uma função é sempre assim:

nome_da_função()

onde em nome_da_função vc coloca o nome da função, e dentro de () vc coloca os argumentos

o que é argumentos?

argumentos são informações que uma função precisa para ser executada, no caso do instance_destroy() vc não precisa dar argumentos pois a função é simples, ela só serve para apagar um objeto, mas à funções que necessitam de que você coloque varios argumentos dentro, os argumentos são separadosa por virgula, deixe-me dar um exemplo de uma função que só usa 1 argumento: room_goto(nome da room)

a função room_goto(nome da room) troca de room, dentro dos parentes () vc deve colocar pra que room deve ir

exemplo, supondo que você tenha feito uma room chamada "game_over" e quando as vidas acabarem o player deva ir para a room game_over

então você pode colocar:

if vidas = 0
{
room_goto(game_over)
}

ou seja: quando vidas forem iguais a zero, deve ir pra room que vc criou chamada game_over, observação, esse exemplo deve ser checado sempre, a variavel vidas deve ser checada o tempo todo pois assim que as vidas acabarem o player deve ir automaticamente pra room game_over, logo esse codigo deve ser colocado no step, pois se você não sabe, o step é o evento que acontece o tempo todo, o que vc colocar lah sera executado o tempo todo sem parar, 2° observação, a variavel vidas foi um exemplo, para esse codigo funcionar a variavel vidas tem que existir, se não dara erro, como eu ja disse, para criara a variavel vidas você devera ir no create e colocar vidas = numero qualquer

bom, espero que vc tenha entendido, se vc não entendeu sinta-se a vontade para perguntar, o que eu mais quero a ajudar os outros

se você entendeu direitinho você ja sabe ate como fazer para trocar de rooms usando codigos, sem ter que ficar olhando como eu fiz, se vc entendeu direito

existem milhares de funções como eu ja disse, e se você quizer baixar um lista com todas as funções, entre no link a seguir:

Código:
http://www.megaupload.com/?d=MFF3V7N4
lembrando que nem tudo que vc encontrar ai serão funções, se você não sabe o que uma função faz, traduza o nome dela do ingles pro portugues e se ainda assim não conseguir, pergunte pra alguem na GMBR, se for coisa simples, por favor não crie um topico, pergunte por mp pode ser pra mim mesmo =D

ps.: o script completo do GM8 foi disponibilizado por um usuario da GMBR chamado souzalucasjosé


continuando a falar de funções, a função room_goto() é uma função que troca de room, mas para trocar de room ela precisa saber pra que room o player deve ir, entendeu? logo ela precisa somente de um unico argumento que é o nome da room para qual o player deverá ir

mas existem função que precisam de varios argumentos, o maximo de argumentos que uma função pode pedir de vc é 16, não existe nenhuma função que precise de mais de 16 argumentos, mas a room_goto() por exemplo so precisa de um argumento, a instance_destroy() nem precisa de argumento nenhum, e eu vou dar um simples exemplo de uma função que precisa de 3 argumentos, a instance_create() a instance_create cria um objeto dentro da room

você deve saber o que é x e o que é y, correto? se não sabe, x e y são variaveis, que guardam onde esta um objeto dentro da room, x, guarda a distancia do inicio da room (a esquerda) do objeto, em pixeis, e y guarda a distancia do objeto do inicio da room (a cima), ou seja, quanto maior o x, mais pra direita o objeto estara, e quanto maior o y, mais pra baixo o objeto estara, a variavel x e y ja existem em todos os objetos, e vc não precisa criar ela, você pode alterá-la ou usa-la como usa qualquer variavel

exemplo da utilização do x e do y

x+= 5
faz com que o player ande 5 pixeis pra direita
distancia = x
faz a variavel distancia ficar igual ao x do objeto
if x = 5
executa uma ação de o x do objeto for igual a 5

agora que você ja sabe o que é x e o que é y, voltemos a função instance_create

essa função como ja disse ela cria um objeto na room, mas ela não sabe que objeto deve criar, nem aonde, logo você devera coloca

instance_create(x,y,obj)

onde em x você deve colocar o valor x do lugar onde o objeto deve ser criado
em y o y do lugar onde o objeto deve ser criado
e em obj o nome do objeto que deve ser criado

exemplo, supondo que vc tenha um room de tamanho 2000 px horizontais e 1000 px verticais, e você quer criar o objeto chamado botao no meio da room, coloque no evento que você você achar ncessario:

instance_create(1000,500,botao)

entendeu? no meio da room pois primeiro você deve colocar x que é o valor "horizontal" da posição do objeto, se eu quero que seja no meio, e a room é 2000, eu coloco 1000 e pra colocar no meio verticalmente, coloco 500, que é a metado do tamnho vertical da room, e depois o nome do objeto que nesse caso é botao




mais sobre variaveis

checando se é maior, menor ou diferente


com ate agora você aprendeu se uma variavel é igual é um numero ou a outra variavel, mas você pode checar se uma variavel é maior, menor, ou ate mesmo diferente de outro valor! nos exemplo abaixo usarei 2 vartiaveis, a variavel vidas e a variavel energia

if vidas = 5 <- isso checa se a variavel vidas é igual a 5
if vidas = energia <- isso checa se a variavel vidas tem o mesmo valor que a variavel energia, exemplo, se a variavel vidas, no momento em que for checada for igual a 4, a ação sera executada se a variavel energia também for igual a 4


if vidas > 5 <- isso checa se a variavel vidas é maior que 5
if vidas > energia <- isso checa se a variavel vidas é maior que a variavel energia

if vidas < 5 <- isso checa se a variavel vidas é menor que 5
if vidas < energia <- isso checa se a variavel vidas é menor que a variavel energia

if vidas <> 5 <- isso checa se a variavel vidas é diferente de 5
if vidas <> enrgia <- isso checa se a variavel energia é diferente da variavel energia





usando variaveis de outros objetos

da mesma forma que você ja fez uma variavel global., pode alterar uma variavel de outro objeto, como por exemplo, o numero de HP, pontos, vidas, x, y, etc

para isso basta colocar nome do objeto.nome da variavel

exemplo, supondo que você esteja fazendo um jogo, e o player deverá pegar todas as manivelas, ao pegá-las a variavel energia almenta em 10 e então quando for 100, todos os objetos inimigo que perceguem o player morrem, mas suponha que a variavel energia pertença ao objeto player, como então fazer o inimigo checar?

existem 2 formas mas esse exemplo eu dei pra poder explicar o seguinte, você simplesmente, da mesma forma que você cria uma variavel global colocando global.nome da variavel, você iria no inimigo e colocaria nome do objeto.nome da variavel, nesse caso ficaria assim (no step no inimigo)

if player.energia = 100
{
instance_destroy()
}

entendeu?

você também pode alterar esse valor, supondo que o player possa lançar uma corda por exemplo e se essa corda pegar no objeto "vida" o player deverá ganhar uma vida, então no objeto vida você coloca, no evento colisão com o objeto corda:

player.vidas += 1
instance_destroy()

ou seja, quando o objeto "vida" colidir com o objeto "corda" a variavel vidas, do player, devera almentar em um, le depois se destruir pois normalmente em jogos desses quando você pega um ponto, uma moeda ou um coração esse objeto some. como as moedinha no jogo de mario, logo eu coloquei pra almentar o numero de vidas e depois se destruir (se tiver duvidas, pergunte, eu responderei com certeza)





usando variaveis como argumentos

você pode usar uma variavel como argumento, exemplo, supondo que eu queira que o objeto player crie um objeto chamado pontos na room, no lugar onde esta o objeto caixa, mas não tem como você informar, em numeros, o lugar ondeesta o objeto caixa

logo você utiliza a variavel x e a variavel y do objeto caixa

então você coloca no evebto desejado:

instance_create(caixa.x,caixa.y,pontos)


sacou?


outro exemplo, suponhamos que seja um jogo, onde o player usara botões para criar um objeto "caixa" na room, então ele controlará onde o objeto será criado utilizando as setas, e o enter para criar o objeto

então, você precisará criar 2 variaveis, uma para setar o x de onde o objeto caixa sera criado, e a outra para setar o y, vamos criar as variaveis (lembrando que o nome de uma variavel só pode ter letras, sem acento e sem ç, numero e o simbolo_ não pode ter sem espaço)

crie as variaveis colocando no create:

posicao_x = 0
posicao_y = 0

essas variaveis guardara a posição x e a posição y do lugar onde a caixa sera criada

então coloque no evento keyboard left (left é a seta pra esquerda)

posicao_x -= 5

e no keyboard right

posicao_x += 5

agora falta o y, no keyboard up coloque

posicao_y -= 5 (lembrando que quanto menor o y, mas alto estara o objeto)

e no keyboard down

posicao_y += 5


pronto, agora o player controlará com as setas o local onde o objeto sera criado, só falta colocar para que quando o player apertar enter o objeto seja criado, vá no keyboard enter e coloque

instance_create(posicao_x, posicao_y,caixa)

ou seja, o player usara as setas para controlar as variaveis posicao_x e posicao_y e quando apertar enter o objeto caixa é criado nessas posições (em caso de duvida pergunte)



usando calculos matematicos para usar o valor de uma variavel como argumento


supondo que você queira criar um objeto que deva ter uma variavel energia1 e outra energia2, a energia2 sempre será metade da energia1, então você coloca

energia2 = energia1/2

ou seja a variavel energia 2 sempre será igual ao valor da variavel energia1 dividido por 2

lembrando, + soma, - diminui, * multiplica, e / divide




supondo que você queira criar um objeto caixa 5 pixeis abaixo da posicao_x e posicao_y, coloque no evento desejado:

instance_create(posicao_x,posicao_y + 5,caixa)

nesse exemplo estamos criando o objeto caixa no x da posicao_x e 5 pixeis abaixo da posicao_y (que é uma variavel só de exemplo que você precisaria criar no create como as outras). lembrando que o x, é maior para direita e menor pra esquerda, o y é maior pra baixo e menor pra cima (se tiver duvida, me pergunte)



mais sobre checagem

agora uma das partes mais importantes, como ja disse la emcima, toda vez que você checa alguma coisa, você deve colocar o que deve acontecer entre { e }, exemplo

if vidas = 0
{
room_goto(game_over)
}

vai pra room "game_over" caso a variavel vidas for menor que 1


mas há outras formas de se checar uma condição, a primeira coisa que vou ensinar é checar se algo não esta acontecendo, exemplo, no codigo que coloquei acima o player devera ir pra room game_over caso a variavel vidas seja igual a 0, mas e se eu quizer ir pra room game_over caso a variavel não seja igual a zero?

simplesmente colocamos o ! na frente do if

o simbolo de exclamação (!) em GML significa NÃO, ou seja, se "if" significa SE, "if !" significa SE NÃO

nesse caso, se eu quizer checar se a variavel vidas não é igual á zero, hà duas formas, a primeira eu ja ensinei

if vidas <> 0
{
room_goto(game_over)
}

onde o simbolo <>, como ja disse, checa se a variavel é diferente de outro valor

a segunda forma é a que eu quero ensinar, é o if !

if ! vidas = 0
{
room_goto(game_over)
}

ou seja, SE A VARIAVEL VIDAS NÃO FOR IGUAL A ZERO, vai pra room game_over, sacou?



usando funções para checar

existem funções que FAZEM coisas, como a instance_destroy() que destroi um objeto, ou a room_goto() que leva o player para outra room, mas algumas funções não fazem nada, elas funcionam como variaveis, mas não podem ser alteradas, tipo, você pode checar usando elas

vou ensinar agora um codigo chamado "place_free(x,y)" essa função checa SE NÃO tem um objeto solido na posição X e na posição Y que você colocar entre os parenteses, lembra-se que quando você faz um objeto, você pode marcar a opção solid? pois é, essa função checa se NÃO há um objeto que tenha essa opção marcada no x e no y que você colocar dentro do parenteses. ou seja, ele checa se essa posição esta livre

exemplo: supondo que eu tenha um objeto "cachorro", esse objeto cachorro anda o tempo todo pra direita, caso não tenha nada nada solido na frente (no mundo real um cachorro não pode ficar no mesmo lugar que outro objeto solido) então eu colocaria no step do objeto cachorro:

if place_free(x + 5,y)
{
x += 5
}

ou seja, eu coloquei x+=5, ou seja, como x é uma variavel, eu posso mudar o valor dela certo? logo se eu coloc x += 5, eu almento o valor de x em 5, ou seja, se ele estiver no x 500, por exemplo, e esse codigo for executado, ele vai andar 5 pixeis pra direita, mas como o objeto cachorro não pode ficar em um lugar que ja se tenha um objeto, pois por logica ele bate nele, eu devo checar se não tem nada solido 5 pixeis a direita antes de eu andar 5 pixeis pra direita, logo eu coloco if place_free(x+5,y)

sendo x+5, a posição x que fica 5 pixeis a direita do cachorro, e y a posição y do cachorro, lembre-se sempre que as posições x e y SEMPRE devem ser inseridas, você não pode deixar um espaço em branco


mais exemplo

vou dar mais exemplos, o place_empty, o place_meeting, e o keyboard_check (essenciais)

o place_free, checa se tem um objeto solido na room, ja o place_empty checa se naquela posição não tem NENHUM OBJETO

suponodo que o cachorro bata em qualquer objeto, tanto os solidos quanto os que não são solidos, você usa o place_empty

o place_empty funciona da mesma forma que o place_free só que se chama place_empty, logo se eu quizesse checar se não tem nenhum objeto, no caso do cachorro ficaria assim:


if place_empty(x +5, y)
{
x+=5
}


simples neh


agora vem o place_meeting, o place_meeting é parecido com o place_free e o place_empty, mas no nosso caso o place_meeting checa se ESTÁ COLIDINDO com um objeto em especial

lembrando que o place_free e o place_empty checa SE NÃO ESTA colidindo, ja o place_meeting checa SE ESTÁ COLIDINDO, ele checa o contrario

nele eu preciso colocar, o x, o y e o nome do objeto que deve ser checado, exemplo, supondo que no caso do cachorro eu tivesse um objeto parede e o cacho saia corendo e so parasse quando batesse na parede, eu precisaria de usar place_meeting: veja como ficaria nosso codigo:

if ! place_meeting(x + 5,y,parede)
{
x+=5
}

lembrando que nesse caso é "if !" pois o cachorro só irá correr se não estiver colidindo =D

a função place_meeting() substitui o evento collision!!!!!



agora o keyboard_check()


o keyboard_check checa se uma tecla esta sendo pressionada, para isso ela só pede que vc coloque o nome da tecla dentro dos parenteses e pronto, veja abaixo o nome de algumas teclas

spoiler, clique para visualizar o nome das teclas:

a função keyboard_check() serve para checar se uma tecla esta sendo pressionada (e subistitui o evento keyboard!!!!!!!!) supondo que eu queira checar se uma tecla é pressionada, eu coloca:

if keyboard_check(nome da tecla)

supondo que eu quizesse fazer um jogo onde o jogador apertasse a tecla da direita e o player fosse pra direita, eu colocaria:

if keyboard_check(vk_right)
{
x+=5
}

lembrando que o numero 5 você pode trocar por qualquer outro, quanto maior o numero mais rapido o player vai ser, quando for escolher uma velocidade, lembre-se sempre de medir bem para que não fique muito rapido ou muito lento, players lentos deixam o jogo entediante pois perde toda a adrenalina, o jogador tem que ficar esperando, ja rapidos demais ficam fora de logica, em alguns jogos como RPGs em que você utilizam mapas grandes, com ruas largas, o jogador devera ser um pouco mais rapido, em plataformas que tenham muitas coisas em um caminho, a velocidade deve ser mais baixa, em plataformas em que o cenario tenha varias retas sem nada é bom ter uma velocidade media


esta quase terminando


usando AND, OR e ELSE


é mais uma forma de se checar, bem simples, o mais complicado é o else mas eu não deixarei você ficar com duvida, =D primeiro o and

o and significa E, serve para checar se 2 ou mais coisas estão acontecendo, supondo que você controle o player, quando você aperta a seta pra direita ele vai pra direita, normalmente ele não deverá andar caso tenha uma parede na frente, então eu uso o and, pois eu preciso checar tanto se a tecla vk_right esta sendo pressionada, quanto se á uma parede na frente

então o codigo ficaria assim

if keyboard_check(vk_right) and place_free(x + 5,y)
{
x+=5
}

facil neh, nem tenho o que explicar

agora o OR

o or significa OU, se usa semelhantemente ao and, mas o and checa se duas coisas estão acontecendo, ja o or checa se só uma estiver acontecendo, veja um exemplo, supondo que você tenha feito um menu, e para selecionar uma opção que leva o jogador a room FASE1, o jogador tenha que apertar ou a tecla ESPAÇO ou a ENTER

á duas formas, você poderia fazer:

if keyboard_check(vk_space)
{
room_goto(fase1)
}

if keyboard_check(vk_enter)
{
room_goto(fase1)
}

mas esse codigo esta meio confuso.... ele ficou grande e não há necessidade de tudo isso, eu poddo usar o OR, veja

if keyboard_check(vk_space) or keyboard_check(vk_enter)
{
room_goto(fase1)
}

isso é o mesmo que dizer:

se a tecla espaço OU a tecla enter estiverem sendo pressionadas
{
vai pra fase1
}



ELSE

o else significa SE NÃO, ele checa se a coisa que foi checada por ultimo não era verdade

entendeu? não? então vamos sair da teoria que explicar é dificil

suponhamos que eu tenha um objeto que, se não tiver nada na frente ele anda 5 pixeis pra direita, em caso contrario, ele va 5 pra direita (ele kica em outras palavras) então eu colocaria



if place_free(x + 5,y)
{
x+=5
}
else
{
x-=5
}

ou seja, eu chequei se não há nada na frente, em caso positivo, ou seja, se não tiver nada na frente, ele anda, em caso negativo, ele executara o else, nesse caso ele anda 5 pixeis pra esquerda

se vc não entendeu, ele checa uma coisa, se a condição não der certo e a ação não for executada, ele executa o que estiver entre o { e o } depois do else (caso tenha um else logo apos a checagem)












coisas uteis


bom, eu ensinei algumas funções mas não ensinei muita coisa, anda fica dificil vocÊ fazer um jogo, vou ensinar mais funções, mais variaveis que ja vem no GM prontas pra serem utilizadas e constantes

constantes são nomes no GM que são como variaveis, porem variaveis podem mudar, constantes não, como por exemplo, o nome das teclas, se você não leu o nome das teclas, clique no spoiler abaixo, e leia:

spoiler, clique para visualizar o nome das teclas:


temos variados tipos de constantes, vou dar mais exemplos:

cores:

Spoiler:

efeitos: (temos as funções effect_create_below(kind,x,y,size,color) cria um efeito em cima dos objetos, coloque o nome do efeito em kind, depois o x, o y, o tamanho, e a cor. effect_create_above(kind,x,y,size,color)semelhante a outra função mas cria atras dos objetos. effect_clear() destroy os efeitos da room)

Spoiler:



ALL, SELF, OTHER

all, self e other são constantes que servem para se referir a objetos

all - supondo que você use o place_meeting para checar a colisão com o objeto no ponto x,y, mas queira checar a colisão com qualquer objeto, coloque all, pois all se refere a todos os objetos (all significa todos, sacou?)

self - self serve pra se referir ao proprio objeto, por exemplo, supondo que um objeto tenha uma variavel, e essa variavel vai guarda um objeto para atirar na direção dele, assim que esse objeto chamado player toque no objeto lazer, ou seja, quando o player tocar o lazer, a variavel "alvo" do inimigo vai guardar QUAL objeto player tocou no lazer, mas quem vai checar se o player ta tocando no lazer deve ser o proprio player pois pode haver multiplos player's pale room, logo o player teria que alterar a variavel no inimigo, logo na colisão com o lazer, você deveria colocar, inimigo.alvo = self ou seja, eu vou dizer pro inmigo que o alvo, SOU EU, sacou? não o muro, não a lampada, nem ninguem, EU

other - significa outro, só pode ser utilizado do evento collision, e consiste em tornar uma variavel ou argumento, igual ao outro objeto, imagine o caso anterior, mas que por algum problema você não pode checar no player, você teria que checar no lazer se o lazer ta tocando no player, pra fazer a variavel "inimigo.alvo" ficar igual ao player que bateu no lazer, então se você não pode colocar no player, coloque no lazer: "inimigo.alvo = other" é como dizer, inimigo, o seu alvo é esse outro que tocou em mim!







pronto, isso é tudo sobre constantes, você pode colocar essas constantes dentro das funções sempre que pedir cor, tecla, efeito, e etc, existem inumeras constantes, eu citei as mais importantes e as mais usadas



variaveis

você pode criar variaveis, mas tem variaveis que ja existem por padrão, como o X e o Y de um objeto, por exemplo. veja algumas outras:

vspeed <- velocidade vertical, o objeto anda o valor dessa variavel pra baixo o tempo todo, você pode colocar por exemplo, vspeed = 5, vspeed += 5, vspeed = 0, etc, se você colocar um valor negativo ele anda pra cima (se colocar 0 ele para)


hspeed <- velocidade horizontal, o objeto andara o valor de hspeed o tempo todo pra direita, você pode mudar esse valor, e se for negativo, anda pra esquerda (se colocar 0 ele para)


direction <- define uma direção, o valor dessa variavel sempre sera um valor entre 0 e 360, o 0 fica a esquerda, e vai aumentando no sentido anti-horario, ou seja, 0 é pra direita, 180 é pra esquerda, 90 é pra cima e 270 é pra baixo, você pode alterar essa variavel como altera qualquer outra, pode colocas direction = 180, direciotn = 167, etc, pode colocar direcition += 51, direciotn -= 72, as opções são infinitas! você pode almentar, diminuir, dividir, multiplicar, ou setar essa variavel, como todas as outras

speed <- velocidade que o objeto andara na direção direction, exemplo, se eu coloco direcion = 180; speed = 5; ele vai andar pra esquerda na velocidade 5

gravity_direcition <- dreção da gravidade, normalmente está entre 0 e 360, você pode altera-la como todas as outras e a direção é igual a da variavel direcion,

gravity <- muda a força da gravidade, deve estar entre 0 e 1, sendo 0 a gravidade não existe, 0.1 é bem pequena... a assim por diante, o valor maximo é 1

friction <- cria uma fricção, o valor deve estar entre 0 e 1, como no caso do gravity

sprite_index <- nome da sprite do player, você pode usar por exemplo, sprite_index = parado; isso faz o player ficar com a srpite "parado"

submage_index <- no caso da sprite ser uma animação, você pode definir a submagem com essa codigo, se quizer, a primeira é 0 e assim por diante, se vocÊ coloca submage_index = 0, vai voltar pro primeiro quadro da animação, se colocar submage_index = 1, vai pro segundo e assim por diante

image_speed <- velocidade da animação da sprite, caso seja animada, se for 0, ela ficará parada, s efor 1 ira super rapido, não pode ser maior que um ou sua animação sera cortada, pode ser por exemplo... 0.5, por exemplo

image_angle <- a direção da sprite, deve estar entre 0 e 360, se você coloca por exemplo image_angle += 5 a imagem vai virar 5 graus no sentido anti-horario

image_alpha <- muda a transparencia da sprite, deve estar entre 1 e 0, quanto menor o numero, mais transparente ela será, se for 0, ficara invisivel!

image_xscale <- muda a escala horizontal, pode ser qualquer valor mas o tamanho orginal é 1, se você coloca 2, o tamanho horizontal dobra de tamanho, se coloca 0 diminui a ponto de ficar invisivel, se coloca -1, por exemplo, ela vira ao contrario, se coloca 0.5 por exemplo fica pelo metade, e assim por diante

image_yscale <- muda a escala vertical, da mesma forma que image_xscale muda a horizontal, eu mesmo uso pra "esmagar" um objeto, supondo que eu queira que uma imagem seja esmagada, eu posso colocar 0.1, 0.2, 0.3 e assim por diante, sacou? se eu quizer que ela inverta, eu coloco -1, e assim por diante

room_widht <- tamanho horizontal da room, essa variavel só se altera quando você troca de room, você não pode, por exemplo, colocar room_widht = 3000, mas você pode por exemplo usar ela em funções ou alterar o valor de outras variaveis, supondo que eu queira criar um objeto no centro da room, ao inves de colocar em numeros, posso colocar room_widht/2

room_height <- tamanho vertical da room, semelhante a room_widht

room <- nome da room atual, se quizer colocar, por exemplo, proxima room, coloque "room + 1", se quizer colocar room_anterior, coloque "room - 1", se quizer alterar essa variavel utilize a função room_goto(nome da room)

room_first <- nome da primeira room

room_last <- nome da ultima room


mouse_x <- posição x do mouse, você não pode alterar essa variavel, para alterar a posição do mouse é necessario utilizar as funções "display_mouse_set(x,y)" ou "window_mouse_set(x,y)"

mouse_y <- semelhante a mouse_x, mas guarda a posição y, e precisa daquelas funções para ser alterada

cursor_sprite <- define a imagem do cursor do mouse, deve ser uma sprite

visible <- define se o objeto esta visivel

background_color <- define a cor do background

background_showcolor <- coloque 0 para exibir a cor, ou 1 para não exibir

background_visible[0..7] <- coloque entre os colchetes ([]) o numero do background e use 0 para torna-lo visivel ou 1 para deixalo invisivel

background_foreground[0..7] <- coloque entre os colchetes o numero do background e use 0 para deixar o background sobre os objetos ou 1 para deixa-lo atras deles

background_x[0..7] <- x do background que você colocar entre colchetes

background_y[0...7] <- semelhante a variavel anteriro mas define o y

background_width[0...7] <- variavel que guarda o tamanho horizontal

background_height[0...7] <- variavel que guarda o tamanho vertical

background_htiled[0..7] <- define se o background sera repetido horinzontalmente

background_vtiled[0..7] <- define se sera repetido verticalmente

background_xscale[0..7] <- escala horizontal

background_yscale[0..7] <- escala vertical

background_hspeed[0..7] <- velocidade horizontal do back

background_vspeed[0..7] <- velocidade vertical do back

background_alpha[0..7] <- tranparencia do back, deve estar entre 0 e 1 e quanto menor mais invisivel

view_visible[0..7] <- define se a view é visivel

view_xview[0..7] <- define a posição x da view

view_yview[0..7] <- define o y da view

view_wview[0..7] <- define o tamanho horizontal

view_hview[0..7] <- define o tamanhi vertical

view_xport[0..7] <- define o x da ponta superior esquerda do quadrado que "arrasta" a view

view_yport[0..7] <- define o y da ponta superior esquerda do quadrado que "arrasta" a view

view_wport[0..7] <- define o x da ponta inferior direita do quadrado que "arrasta" a view

view_hport[0..7] <- define o y da ponta inferior direita do quadrado que "arrasta" a view


obs, toda view tem um quadrado, quando o objeto que ela segue sai desse quadrado a view enquadra o objeto denovo, sacou? se você quizer que ela diga o objeto perfeitamente coloque a metade do tamanho da view

view_angle[0..7] <- gira a view (numero de 0 a 360 com 0 a direita e rotação anti-horaria)

view_hborder[0..7] <- borda horizontal (não me pergunte o que é isso)

view_vborder[0..7] <- borda vertical (não me pergunte isso também)

view_hspeed[0..7] <- velocidade horizontal da view

view_vspeed[0..7] <- velocidade vertical da view

view_object[0..7] <- objeto que a view deve seguir


funções

existem funções bem uteis que também citarei


keyboard_check(nome da tecla) eu ja expliquei essa
keyboard_check_released(nome da tecla) executa uma função se a tecla estiver sendo solta
keyboard_check_pressd (nome da tecla) executa uma função se a telca estiver sendo pressionda

move_bounce_solid(advanced) quando colidir com um objeto solido, kica, coloque 0 para fazer colidir em partes curvas com precisão ou 1 para kicar sem precisão, 0 pode pesar o pc
move_bounce_all(advanced) quando colidir com qualquer objeto, kica, da mesma forma que a anterior, coloque 0 ou 1

distance_to_point(x,y) devolve pra você o tamanho da distancia do objeto ate uma posição, coloque a posição x e y dentro dos parentes
distance_to_object(obj) devolva pra você o tamanho da distancia do objeto ate outro opbjeto, coloque dentro dos parentes o o nome dos objetos


instance_number(obj) lhe devolve o numeros de objetos que você colocar entre parenteses na room, exemplo, se você coloca dentro dos parentes o nome do objeto inimigo, ele lhe devolve o numero de objetos inimigos dentro da room

instance_nearest(x,y,obj) lhe devolve o objeto que você colocar no lugar de obj que esta mais proximo da posição x e y que você colocar dentro do parenteses, exemplo, coloque x,y,inimigo e ele lhe devolvera o objeto inimigo mais proximo, se quizer pode colocar all, que significa todos

instance_furthest(x,y,obj) semelhanta a ultima função apresentada, porem lhe devolve o mais longe

instance_change(obj,performevents) troca de objeto, primeiro coloque o nome do outro objeto, depois, coloque 0 ou 1 no lugar de perform events, se você colocar 0, o evento destroy dera executado e quando o outro objeto for criado sera executado também seu create, se você colocar 1, ele não executara nem o destroy, nem o create

instance_destroy() destroi o objeto

position_destroy(x,y) deleta todos os objetos que estiverem na posição x e y que você colocar entre parenteses

room_goto(numb) troca de room, no parenteses coloque o nome da room

room_goto_previous() vai pra room anterior

room_goto_next() vai pra proxima room

room_previous(room) lhe devolve o nome da room que esta antes da que você colocar entre parenteses, para setar a room que esta anterior a atual, coloque room entre os parentes, pois room e a variavel que guarda o nome da room atual

room_next(room) identica a afunção anterior, mas essa seta a room que esta proxima a que esta entre parenteses

room_restart() recomeça a room (bom caso o player morra)

game_end() termina o jogo

game_restart() recomeça o jogo

game_save("nome") salva o jogo (coloque o nome do arquivo dentre parentes, entre aspas)

game_load("nome") carrega um jogo que você salvou (coloque o nome do arquivo que ele deve carregar, esse arquivo deve ter sido salvo pelo mesmo jogo)

variable_global_exists(nome) checa se uma variavel global existe

variable_local_exists(nome) checa se uma variavel local existe

keyboard_key_press(nome da tecla) pressiona uma tecla do teclado (função avançada heim)

keyboard_key_release(nome da tecla) solta uma tecla do teclado (essa função é muito util mesmo! para retirar bugs de menus, caso o jogador aperte enter e passe por umas 5 opções sem nem ver)

mouse_check_button(botão) checa se um botão do mouse esta pressinado, use mb_left para botão esquerdo, mb_right para botão direito, e mb_middle para botão central

mouse_check_button_pressed(botão) checa se um botão do mouse esta sendo pressinado, use mb_left para botão esquerdo, mb_right para botão direito, e mb_middle para botão central

mouse_check_button_released(botão) checa se um botão do mouse esta sendo solto, use mb_left para botão esquerdo, mb_right para botão direito, e mb_middle para botão central

splash_show_video(diretorio,loop) exibe um video, isira entre parenteses o diretorio, e em loop coloque 0 para repetir ele, e 1 para fechar quando ele acabar

splash_show_text(diretorio,delay) exibe um texto, insira o diretorio, e depois coloque 0 para exibir dentro no jogo, e 1 para abrir em uma janela separada (ou vice verça não lembro direito)

splash_show_web(url,delay) exibe um site, coloque a url, e coloque 0 para exibir no jogo, ou 1 no navegador padrão

splash_show_image(diretorio,delay) exibe uma imagem (função mais inutil que existe) insira o diretorio, e coloque 0 para exibir no jogo ou 1 para exibir numa janela separada

show_message("texto") exibe uma mensagem, coloque entre parenteses o texto da mensagem, lembre-se de colocar entre aspas

show_message_ext("texto","botão1","botão2","botão3") exibe uma mensagem com 3 botões, coloque em texto o texto da mensagem, entre aspas, e em botão1, 2 e 3, coloque entre aspas o texto do botão, essa função funciona assim, coloque variavel = show_message_ext("texto","botão1","botão2","botão3") e se o player clicar no botão1, a variavel fica igual a zero, se clicar no botão 2 fica igual a 1 e se clicar no botão 3 fica igual a 2

show_question("texto") exibe uma mensagem e dois botões, e checa se o player clicou em yes, em caso positivo, executa a ação que estiver entre { e }

sound_play(som) toca um som

sound_loop(som) toca um som e fica rapatindo ele

sound_stop(som) para de tocar um som

sound_isplaying(som) chace se um som esta sendo tocado

pont_distance(x1,y1,x2,y2) vale o mesmo que o valor da distancia do ponto x1,y1, do ponto x2,y2, coloque por exemplo point_distance(100,500,100,300) e essa função terá como valor o numero 200 que é a distancia entre os dois pontos

point_direction(x1,y1,x2,y2) vale o mesmo que a direção do ponto x1,y1, pro ponto x2,y2, supondo que o ponto x2,y2 esteja justamente emcima do ponto x1,y1 a direção será 90 (exemplo) o numero sempre estara entre 0 e 360, onde 0 é para direita e a direção aumenta no sentido anti-horario



mais funções você encontra no script completo do gm
Código:
http://www.megaupload.com/?d=MFF3V7N4


COMANDO WITH


A UTLIMA COISA QUE EU FIQUEI DE EXPLICAR, INFELIZMENTE FOI O COMANDO WITH, EU GOSTARIA DE FINALIZAR COM A LISTA DE ARGUMENTOS, VARIAVEIS E FUNÇÕES, MAS COMO EU EXPLIQUEI O QUE É ALL SELF E OTHER EM ARGUMENTOS, TIVE QUE COLOCAR O WITH NO FINAL PARA VOCÊ ENTENDER Sad

bom, o with serve para fazer OUTRO objeto executar uma ação, supondo que você quizesse colocar no jogo, que quando o objeto "chuva" aparecesse, o objeto "fogo" fosse destruido, voce teria que destruir o objeto fogo quando ocorresse o evento create do objeto chuva, correto? mas como checar no fogo se o objeto chuva esta sendo criado? tem como utilizar a função instance_number, mas isso nem é o correto e supondo que você quizesse fazer com que, no create do objeto chuva, o objeto chuva MANDASSE o fogo se destruir, você teria que utilizar o WITH pois o with serve pra isso, pra mandar um outro objeto executar uma ação

para utilizar o with, digite o seguinte:

with()
{

}

isso mesmo, você digita with, e depois do with você coloca dois parentes, assim: (), como em uma função qualquer, e dentro dos parentes coloque o nome, ou ID (cada objeto tem um ID diferente, mesmo que seja o mesmo objeto, eles terão ID's diferente, ID é um numero, e páa saber qual é, va na room em que esta o objeto e passe o mouse por cima do objeto, e aparecerá embaixo da room o numero ID) agora que você sabe o que é id, voltemos ao with, estavamos do parenteses, dentro do parentes ou você coloca o nome do objeto ou o numero de ID dele, e depois, você coloca o { e } e dentro do {} você coloca o que deve ser feito pelo outro objeto!


exemplo: no exemplo da chuva e do fogo, veja como ficaria no create da chuva:

with(fogo)
{
instance_destroy()
}

a chuva nesse caso mandaria o fogo executar o codigo entre chaves, ou seja, ele se destruiria

mas o que eu queria dizer é que com o WITH você pode usar all e other! no caso do ALL, se você coloca all dentro dos parentes, todos os objetos executarão aquele codigo, se você colocar other no evento collison, o objeto que estiver colidindo irá executar o objeto, mas lembre-se, o other só é utilizado no collision!




MAIS COMPLEMENTOS


IDS

se você não entendeu o que é ID, ID é um numero que cada objeto em si tem diferente, exemplo se você coloca 5 objetos player na room, cada um tera mu ID diferente, dois objetos nunca terão o mesmo ID

para saber o ID, você pode passar o mouse por cima de um objeto, quando estiver fazendo uma room e saberá o ID olhando embaixo da parte onde se cria rooms, perto de uma barra que exibe o X e o Y, você também pode utilizar o ID no modo debug, embaixo da janelinha, aparece o id do objeto que esta embaixo do mouse


eu disse anteriormente, mais ou menos, o que é self e other, o self e other, quando utilizado para setar uma variavel, ou argumento de uma função, ele não informa o nome do objeto, mas oID, então supondo que você utilizasse esse codigo pro inimigo atirar no player que tocar no lazer, pode ter uns 15 objetos players na room, assim que um tocar no lazer o inimigo atirara NAQUELE que tocou no lazer, pois a ele sera informado o ID do objeto, e ID só um objeto pode ter


COMENTARIOS

em um codigo, em uma linha coloque o codigo // e tudo o que vier depois desse codigo não é executado, serve para fazer comentarios dentro de um codigo, ate mesmo pra você não esquecer o que o codigo faz!

exemplo:

if place_meeting(x,y,player) //esse codigo checa se esta colidindo com o objeto player
{
instance_destroy() // destroy se estiver
}

depois do // você pode escrever o que você quizer, ate mesmo outro codigos, mas ele não sera executado. é lido como comentario e fica la pra quem ler o codigo e não é lido pelo jogo, não é executado.

também pode colocar o comentario entre /* e */, em qualque parte, ate mesmo antes do codigo, pois o que estiver entre /* e */ não sera executado, nunca, exemplo

if place_meeting(x /*coordenada x*/ ,y /*coordenada y*/,player /*nome do objeto*/)

mas como o jogo não le o que esta entre /**/, é o mesmo que digitar:

if place_meeting(x,y,player)






esse é o fim do primeiro de varios tutos, mas ele tera continuação, nos proximos tutos nós faremos jogos juntos, eu irei te falando o que colocar, onde e porque, explicando bem cada codigo, começaremos com rPG e depois vamos pra plataforma e depois outras coisas


se você não sabia GML e entendeu o meu tuto, levante as mãos pra cima e diga feliz: EU SEI PROGRAMAAARRRRRR

parabens, proxima aula nós sairemos da teoria e iremos pra pratica, ensinarei mais funções, mais variaveis, mais constantes... e você entenderá como utilizar os codigos e depois nunca mais precisara de D&D e lembrará todos os codigos de cabeça =D

parabens mesmo se você entendeu, e se você gostou do tuto, ou não, comente aqui em baixo para, 1°, o topico não morrer, 2° para eu perceber que leram meu tuto e não ficar no vacuo, e C, melhorar meus tutos

não se esqueça de perguntar também

flw

se você gostou do meu tuto e estiver a fim de mostrar para outra comunidade, pode mostrar, é só um tuto, não é um jogo que demorou 5 anos pra ficar pronto, mas mesmo sendo só um tuto se você gostou de verdade não vai querer agir como se tivesse sido você que fez heim, deixe os creditos para mim, ou para este forum
Henrique_GJ
Henrique_GJ

Avisos :
[tuto(GM)]Tutorial completo de GML Left_bar_bleue0 / 70 / 7[tuto(GM)]Tutorial completo de GML Right_bar_bleue

Mensagens : 2
Data de inscrição : 05/07/2011

Ir para o topo Ir para baixo

[tuto(GM)]Tutorial completo de GML Empty Re: [tuto(GM)]Tutorial completo de GML

Mensagem  guilherme Qua Jul 06, 2011 12:38 pm

Ficou bom.
Mas edita ai e usa o
Código:
[code] sabe?
Porque senão fica ruim de identificar codigos.

guilherme

Avisos :
[tuto(GM)]Tutorial completo de GML Left_bar_bleue0 / 70 / 7[tuto(GM)]Tutorial completo de GML Right_bar_bleue

Mensagens : 2
Data de inscrição : 01/07/2011

Ir para o topo Ir para baixo

Ir para o topo


 
Permissões neste sub-fórum
Não podes responder a tópicos