Códigos GML

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Códigos GML

Mensagem por Phillipe em Ter 15 Jul 2008, 20:14

Existe uns códigos e palavras no GML que me parecem tãao confusos.Bem...eu li aquele manual gigante do GML que tem no proprio programa do Gamemaker,mas parece que aquilo não esclarece nada,além deu ja ter tentado traduzir aqueles textos,até na tradução ficou confuso,então acho que alguem poderia dar uma explicação melhor para:

while

do

until

for

switch

case

break

continue

with

Phillipe

Número de Mensagens : 324
Idade : 21
Data de inscrição : 15/07/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Códigos GML

Mensagem por Kabeção em Ter 15 Jul 2008, 20:50

aiai...
explicar tudo isso. xD
pera ae.
ae vai:


while (enquanto)
é exatamente o que a tradução diz, enquando a expressão for true o seu codigo ficara em loop (laço).
pra ser mais claro:
Código:
while y<10
{
    y+=1
}
game_end()
nesse codigo, enquando y for menor que 10, sera executado seu codigo entre chaves (no caso "y+=1").
assim, todo que estiver a baixo do "}" não sera executado enquando y for menor que 10.
a função game_end() por exemplo não sera executada pois o loop while ficara repetindo o codigo "y+=1".


do (faz) e until (até)
um loop tambem.
estrutura do do
Código:
do
{
    i+=1
} until i=20;
game_end()
no do o codigo "i+=1" sera executado repetidamente até que (until) i=20.
assim quando i for igual a 20 todo o codigo abaixo sera executado.
game_end() sera executado normalmente.


for (para)
é um loop muito usado.
estrutura:
Código:
for (i=0;i=50,i+=1)
{
    i.x=50
    i.y=50
}
game_end()
no for primeiro se defini o valor da variavel "i=0", depois check uma condição "i=50" se esta condição for verdadeira o loop para, executando assim o game_end() e por ultimo um valor a se acrescentar a variavel que vc definiu "i+=1".
assim i começara como 0 e sera acrescentado 1 cada vez que segar no "}", quando i for igual a 50 o loop para.

switch (interruptor) e case (caso)
switch parece estranho mas é bem simples.
veja a extrutura:
Código:
switch (score)
{
    case 0:
    classe="ruim"
    break;

    case 50:
    classe="regular"
    break;

    case 75:
    classe="bom"
    break;

    case 100:
    classe="otimo"
    break;
}
game_end()
em primeiro lugar, switch não é um loop.
em segundo lugar, é indispensavel a utilização do case.

note a variavel score entre parenteses, ela é o interruptor, ou seja, é dela que os cases seram checados.
switch é um jeito diferente de checar valores de uma variavel so.
assim para variavel que vc definiu os valores 0,50,75,100 seram checados.
traduzindo:

caso score seja 0:
a classe do jogador e ruim;
pare;

caso score seja 50:
a classe do jogador e regular;
pare;

Extrutura do case

um case deve estar sempre seguido de um valor e depois ":".
este valor pode ser tanto texto conto numeros e variaveis, mas deve sempre ter os ":".
logo a baixo deve-se conter o codigo que sera executado se o case for verdadeiro.
sera "visto" como codigo do case tudo aquilo antes de outro case.

Sobre os breaks

o break ser para parar a execução do codigo.
ele é usado para sair do switch e ir diretamente para o que há depois dele (depois das chaves).

é muito usado tb para interrunper os loops.
veja a baixo:
Código:
while x<10
{
    x+=2
    if x>view_xview+view_wview break;
}
game_end()
no codigo acima enquanto x for menor que 10 sera acrescentado 2 a x.
mas se o objeto sair da tela (view_xview+view_wview calcula a posição da margen direita da tela) sera executo o break.
e mesmo se x ainda for menor que 10 não importa pois o loop sera parado executando assim o game_end()
isso vale para qualquer loop.


Última edição por kabecao em Qua 16 Jul 2008, 09:30, editado 3 vez(es)

Kabeção

Ranking : Sem avaliações
Número de Mensagens : 2314
Data de inscrição : 08/06/2008
Reputação : 100
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 0
   : 1

http://blackcapapps.blogspot.com.br/

Voltar ao Topo Ir em baixo

Re: Códigos GML

Mensagem por Convidad em Ter 15 Jul 2008, 21:11

E aí Phillipe! Cara, não se preocupe e nem fique com medo dessas palavras pois com o tempo você verá que isso não é um bicho de sete cabeças, ok?

Dê uma estudada na explicação do kabecao e veja o acervo de tutoriais que o Game Maker Brasil tem, todos estão bem explicados e são de fácil entendimento, especialmente para iniciantes na linguagem.

Vá com calma, estude um a um e siga os exemplos. Pode ter certeza de que em pouco tempo você vai estar fazendo muita coisa legal!

Convidad
Convidado


Voltar ao Topo Ir em baixo

Re: Códigos GML

Mensagem por Kabeção em Ter 15 Jul 2008, 21:40

agora que comecei vou terminar. xD

continue

é exetamente o que diz: continue.
não vejo a utilidade disso. xD
simplismente continua o que esta sendo feito nos loops.

with (com)

referece a um objeto.
Código:
with (objPlayer1)
{
    instance_destroy()
}
with não é um loop.
ele executa ações em outros objetos.

por exemplo:
o codigo esta no objControle, mas vc quer que o objPlayer1 seja destruido, então vc usa um with para dizer que o codigo sera executado no objPlayer1 em vez de ser executado no objControle.
muito util quando se quer aplicar funções em outros objetos.


é isso.
siga as aulas como brendan disso e tudo ficara na boa.
flw

Kabeção

Ranking : Sem avaliações
Número de Mensagens : 2314
Data de inscrição : 08/06/2008
Reputação : 100
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 0
   : 1

http://blackcapapps.blogspot.com.br/

Voltar ao Topo Ir em baixo

Re: Códigos GML

Mensagem por Janx em Ter 15 Jul 2008, 22:07

ei agora que li isso tenhu uma duvida tbm!!
tipo nesses loops do while por exemplo

---

while x = 10
{
y+=1
}

if place_free(x,y+1)
{
to_no_chao = false
}

---

ai nesse codigo por exemplo, ele tah no 'step'
ai quero saber se caso o x for 10 ele vai executar akele loop certo? mas digamos que o x fika nesse valor durante um minuto, ateh o x mudar o que estiver em baixo nao vai ser lido??
tipo so se o while terminar ele le o que ta embaxo, ele nao continua o resto do codigo????

Janx

Número de Mensagens : 2417
Idade : 23
Data de inscrição : 24/05/2008
Reputação : 14
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 0

Voltar ao Topo Ir em baixo

Re: Códigos GML

Mensagem por Phillipe em Ter 15 Jul 2008, 22:12

Very Happy Puxa!Não sei mesmo como agradecer,ajudou muito mesmo,finalmente achei um ótimo forum de Gamemaker melhor do mundooo Very Happy Smile .Eu estou acostumadissimo a mecher com o Gamemaker,mas tudo que eu sabia era só arrastando os quadradinhos rsrsrs,mais agora estou procurando aprender o GML,e com essa grande ajuda...não falta muito!Obrigado a todos mais uma vez.

Phillipe

Número de Mensagens : 324
Idade : 21
Data de inscrição : 15/07/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Códigos GML

Mensagem por Convidad em Ter 15 Jul 2008, 22:32

Valeu Phillipe! O fórum tá crescendo como você pode ver. Mas o nosso objetivo é esse mesmo, ajudar a galera que programa no GM! Boa sorte pra você, ok?

Janx, quanto à sua dúvida:

Enquanto a condição while não for terminada, o que está "em baixo não vai ser lido".
While quer dizer enquanto. Enquanto a condição existir como válida, apenas o que está entre as chaves ({,}) da condição será executado.

Os erros cometidos no while são os mais comuns e costumam travar o jogo com muita facilidade. A essas condições damos o nome de egoístas pois o código não continua enquanto ela não terminar.

Por isso a gente tem que ter um cuidado especial em usar essas condições.

Convidad
Convidado


Voltar ao Topo Ir em baixo

Re: Códigos GML

Mensagem por Janx em Ter 15 Jul 2008, 22:41

pow intao nao adianta usar isso... ele nao vai ler o resto!! so vai atrapalhar dai...
nao tem um jeito que ele leia tudo + tbm fasa ese loop??
ia ajudar bastante...

Janx

Número de Mensagens : 2417
Idade : 23
Data de inscrição : 24/05/2008
Reputação : 14
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 0

Voltar ao Topo Ir em baixo

Re: Códigos GML

Mensagem por Convidad em Ter 15 Jul 2008, 22:58

Você não entendeu. Ele vai ler o restante do código quando essa condição acabar.

Essa condição vai dar um loop avaliando a expressão. Por exemplo:

while a < 10
{
draw_text(a*20,30,string(texto[a]));
a+=1;
}

Não substime nenhum tipo de apoio da linguagem, todas estão lá porque cada uma oferece possibilidades diferentes.

A utilidade dessa condição é impressionante! Vai te poupar muito trabalho em diversas situações. Quando criei o Bemitri, a textura que se move no fundo em "ondas" usa um while pra auxiliar o movimento. É só um exemplo.

Procure treinar mais o while e você vai ver o quão útil ele é, ok?

Convidad
Convidado


Voltar ao Topo Ir em baixo

Re: Códigos GML

Mensagem por Janx em Ter 15 Jul 2008, 23:33

eu intendi que ele le oque vem depois, + tipo ainda assim se esse loop do while demorase 1min?! n da dai.. ateh acaba...

Janx

Número de Mensagens : 2417
Idade : 23
Data de inscrição : 24/05/2008
Reputação : 14
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 0

Voltar ao Topo Ir em baixo

Re: Códigos GML

Mensagem por Kabeção em Qua 16 Jul 2008, 01:29

usamos loops quando queremos fazer coisas envolvendo diversos valores antes que o resto continue.
loops são executados em um unico passo.

a menos que seu loop faça muito coisa de uma vez so ele não vai demorar nada.
simplesmente é executado rapidamente como o resto do codigo.

um exemplo de algo que envolve diversos valores que precisam ser executado de uma vez so é isso que ta no help do GM:
Código:
{
  maxid = -1;
  maxpower = 0;
  for (i=0; i<instance_count; i+=1)
  {
    iii = instance_id[i];
    if (iii.object_index == unit)
    {
      if (iii.power > maxpower)
        {maxid = iii; maxpower = iii.power;}
    }
  }
}
esse codigo checa instancia por instancia de um unica vez em um for.
ele acha qual instancia é um objeto chamado unit.
se for um objeto unit checa se sua variavel power e maior que maxpower (power maximo).
depois se true maxpower é definido com o valor da variavel power.

percebeu a utilidade disso?


na minha engine de movimento simples com animação (que pode ser encontrado aqui na secção de engines) ta la o codigo para se o objKnuc atravessar o objBloco ele é rapidamente posto acima do bloco.
Código:
while place_meeting(x,y,objBloco)
{
    y-=1
}
place_meeting checa se ha colisão com o objBloco.
a gravidade as vezes faz com que o objKnuc atravesse o objBloco.
para resolver isso, se o objKnuc atravessar o bloco, y sera decrescido de uma vez so sem o jogador perceber.
com isso o objKnuc sempre ficara um pixel acima do objBloco evitando bugs.

a muitas coisas que precisam ser feitas assim.


o que o brendan disse sobre travamentos nos jogos tb é importante.
chamamos isso de loops infinitos.
ocorrem quando a condição do loop nunca é atingida.
por exemplo:
Código:

x=2
while x<10
{
y+=1
}
aqui o x sempre sera memor que 10 pois tem o valor de 2 e nada é feito para mudar seu valor causando assim loops infinitos que nunca terminaram.

nó! ta tarde!
flw ae.
vo tirar uma pestana ali (essa é velha). xD

Kabeção

Ranking : Sem avaliações
Número de Mensagens : 2314
Data de inscrição : 08/06/2008
Reputação : 100
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 0
   : 1

http://blackcapapps.blogspot.com.br/

Voltar ao Topo Ir em baixo

Re: Códigos GML

Mensagem por pedrosorio em Qui 17 Jul 2008, 15:41

kabecao escreveu:agora que comecei vou terminar. xD

continue

é exetamente o que diz: continue.
não vejo a utilidade disso. xD
simplismente continua o que esta sendo feito nos loops.

Já agora esclareço essa dúvida. O continue continua para a próxima iteração do loop, e não executa o resto do código que esteja no loop, por exemplo:

Código:

p=0;
for(a=1;a<=10;a+=1) {
    if (a==5)
      continue;
    p+=1;
}
show_message(string(p));

Se você executar esse código o número que aparece no ecrã é 9 e não 10, o que ilustra bem a funcionalidade do continue.

pedrosorio

Número de Mensagens : 50
Idade : 28
Data de inscrição : 15/06/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://pedrosorio.nfshost.com

Voltar ao Topo Ir em baixo

Re: Códigos GML

Mensagem por Kabeção em Qui 17 Jul 2008, 16:07

pois é pedrosorio, naum havia usado isso antes, eu ja ia editar essa parte.
mas agora nuam precisa.

flw.

Kabeção

Ranking : Sem avaliações
Número de Mensagens : 2314
Data de inscrição : 08/06/2008
Reputação : 100
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 0
   : 1

http://blackcapapps.blogspot.com.br/

Voltar ao Topo Ir em baixo

Re: Códigos GML

Mensagem por Phillipe em Qua 27 Ago 2008, 19:50

Bem vou usar esse velho tópico que eu criei para esclarecer um pouco mais minha dúvida sobre o código.É nada mais e nada menos doque eu precisar de um exemplo de quando o for é usado,situações,como fica,podem me dar alguns exemplos e falando sobre cada parte se não for pedir demais? Very Happy

Phillipe

Número de Mensagens : 324
Idade : 21
Data de inscrição : 15/07/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Códigos GML

Mensagem por Janx em Qua 27 Ago 2008, 20:06

for é um loop:
for (i = 0; i = 10; i+=1)
{
numero += 1
}

por exemplo ai:
o numero vai aumentar em 10 pois o loop corre 10 veses:
'i' comeca com o valor 0, e a cada vez que chaga no "}" i é adicionado 1. e quando i for igual a 10 o loop para.

digamos que eu quero que mova um objeto 20 pixels para a direita:
for (i = 0; i = 20; i+=1)
{
x += 1
}

Janx

Número de Mensagens : 2417
Idade : 23
Data de inscrição : 24/05/2008
Reputação : 14
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 0

Voltar ao Topo Ir em baixo

Re: Códigos GML

Mensagem por Phillipe em Qua 27 Ago 2008, 21:16

Ah!Entendi,entendi!Sabe..ainda não sou muito bom com os códigos,mas estou aprendendo,e se for assim eu aprendo rapidinho!Valew janx!

Phillipe

Número de Mensagens : 324
Idade : 21
Data de inscrição : 15/07/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Códigos GML

Mensagem por Conteúdo patrocinado Hoje à(s) 01:50


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum