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
Bugs e Dúvidas Comuns
+6
Black Studio
Markituh
GameMakerTutoriais
GuuhRauber
Mr.Brum
saim
10 participantes
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Bugs e Dúvidas Comuns
Nome: Bugs e dúvidas comuns
Descrição: Existem algumas perguntas que são feitas e refeitas aqui na comunidade. Estou elaborando uma lista dos bugs mais comuns e das soluções mais comuns. Se você tiver algum bug que te aconteça em 9 de 10 jogos que você cria, comente e eu tentarei acrescentar uma solução genérica, colocando seu bug na lista.
Nível de dificuldade: Variável, de acordo com o bug.
Requerimentos: Nenhum, mas aconselho ler o tutorial sobre variáveis, antes.
Meu personagem fica preso
O primeiro bug da maioria dos desenvolvedores. O persongem (obj_player ou não) anda até uma parede e depois não sai mais. Não importa a força com que o jogador aperte o teclado, o personagem travou!
Normalmente isso é um problema de sobreposição de masks. Seu personagem está entrando alguns pixels no chão/parede. Pode acontecer por dezenas de motivos.
Você programa a velocidade pra ser zero caso o objeto colida com um bloco, então se eles se sobreporem, o natural é que a velocidade seja sempre zero.
Um motivo comum é o uso de sprites irregulares como a mask acompanhando o personagem. Daí, num image_index ele está ok, no outro está alguns pixels dentro do bloco.
Outro motivo é código mal elaborado, que não impede a sobreposição.
Nem sempre é possível enxergar essa sobreposição a olho nu. Além de ser apenas alguns pixels, a mask pode ser diferente da sprite. Nesses casos é bem difícil determinar o problema.
solução
Crie uma variável só pra debugar. Sempre que houver uma colisão, esa variável deve ter o valor true e sempre que não houver, false. Daí você pode usar alguma função de draw pra verificar o valor dessa variável ou simplesmente o debug mode.
Se for verificado que a colisão realmente tornou-se constante enquanto o objeto está travado, não restam mais dúvidas quanto à causa do bug. Daí, parta para a análise dos códigos, das sprites, das masks. Use uma lupa.
Meu sprite não aparece
Você faz o jogo direitinho, se esforça e, na hora que vai rodar, alguns objetos que deveriam estar lá, simplesmente não estão.
Existem algumas causas principais pra isso:
1 - Existe algo no draw event. O game maker usa um draw event "default", que apenas desenha o personagem. Eu diria que ele contém "draw_sprite_ext(sprite_index, image_index, x, y, image_xscale, image_yscale, imgae_angle, c_white, 1);". Se você coloca QUALQUER coisa no seu próprio draw event, esse evento-padrão é ignorado.
2 - Não existe a instância. Acontece. Você acha que criou uma instância, mas ela não foi criada ou foi eliminada sem que você se desse conta.
3 - A instância não está na tela. Ela existe, está sendo desenhada, mas está fora do seu campo de visão. Edit: Ou sob uma outra instância, de depth menor.(adicionado em 15/06/2012)
solução
Em todos os casos, verificar o draw event ou mesmo alterá-lo até encontrar o problema pode ser uma boa. Pra checar se a instância existe, mande desenhar algo numa posição que você SABE que vai aparecer. Como sempre, o modo debug também pode ser útil, se você procurar por termos como "x", "y", "instance_number".
Uma vez determinado qual é o problema, não é difícil corrigir.
Meu jogo trava
No meio do jogo, mesmo sem tocar em nada, o personagem para de obedecer aos comandos. Você tenta fechar a janela do jogo pra procurar o bug e ela não fecha, você tem que abrir o gerenciador de tarefas.
A causa desse bug é (até onde eu sei) única: existe um laço (ou loop) que não encontra a condição de ser finalizado. Porque esse loop não está conseguindo se encerrar, aí a história é outra. Existem dezenas, centenas, talvez até milhares de motivos pra isso. Cada loop, um motivo.
Alguns motivos comuns:
- Erro de digitação: for (i = 0; i < 10; j += 1){
- Erro de lógica: i = 0; while(i < 10){ /* código */ }; Note que não foi colocado o "i += ..." no código
- Erro de lógica2: for (i = 0; i < 10; i += 1){ /* código */; i -=1 }; Note que no final do loop, i volta pro valor inicial
solução
Não sei se existe uma solução padrão pra esses casos. O que eu costumo fazer é:
- Tentar descobrir em que evento o jogo está travando, o que pode dar uma dica de qual loop está com problemas. Se for no início do jogo (quando normalmente existem muitos loops), talvez seja melhor ir direto pra segunda abordagem.
- Tentar isolar o problema eliminando os loops, um por um, não importa o quanto o jogo fique bugado até que se descubra o problema. Não é uma boa solução (porque uma variável usada num loop pode estar sendo definida em outro), mas em muitos casos pode ajudar.
Assim que se descobre qual loop causa o erro, fica viável (ou menos inviável) isolá-lo e testar o comportamento das variáveis, iteração por iterção (ou volta por volta). Algumas vezes pode ser útil usar show_message ou show_debug_message dentro desses loops, já que muitas vezes eles usam variáveis var.
"Unexpected error"
No meio do jogo, essa mensagem enigmática: "unexpected error ocurred while running the game", ou "ocorreu um erro inesperado ao rodar o jogo". Aí, lascou. Afinal, existe algum programador que espera um erro?
O que isso quer dizer é que o game maker verificou todas as funções e scripts e um deles não está funcionando apesar do número e tipos de argumentos estarem corretos. Você comeu mosca em algum ponto.
Edit Contribuição de Ninja8086:
Usar backgrounds muito grandes também podem causar esse erro.
Edit Contribuição de Markituh:
O tema já foi debatido antes. Existem outras causas pra ele, além das citadas. Mais informações no link
solução
Se a quantidade e o tipo de argumentos estão corretos, o erro só pode estar no valor deles. Eu constantemente recebo esse erro por trocar a ordem dos argumentos de algumas funções. Por exemplo, você pode trocar o sprite pela surface em "sprite_add_from_surface". Verifique quais funções você está usando sem ter muito hábito de usar. Experimente não usar uma ou outra função (no caso, por exemplo, você pode usar uma sprite sem sub-imagens) até que o problema pare de acontecer. Quando o problema parar de acontecer, eis a função que está com problemas. Cheque o manual, veja o que significa cada argumento, altere o que estiver errado.
Edit Contribuição de Ninja8086:
Verifique se não há nenhuma imagem muito grande, no arquivo. Havendo, elimine-a e teste novamente. Se o bug desaparecer, ela era a causa. Use uma imagem menor.
Edit Como manter alguma informação? (Contribuição de mrbrum22)
Ao mudar de room ou reiniciar a room, todas aquelas variáveis que você se esforçou pra mudar, como vidas, score, e outras menos comuns, todas elas voltam pro valor inicial.
Muitas vezes isso é esperado e desejado. Algumas vezes, não.
A causa mais comum desse problema é que o valor dessas variáveis é definido no create event do objeto. Como na programação da room o game maker foi informado pra criar os objetos, ele roda todos os create event, o que reinicia a variável.
solução
Há várias soluções. Pra cada jogo, uma solução. As que eu sugiro tentar são:
- Se for uma variável global, você pode definí-la em alguma room do começo do jogo, ao invés de usar um objeto que será reinicializado. Pode-se usar, também, um objeto persistente que é criado numa room da inicialização do programa.
- Se o problema é que a room está sendo reiniciada, não reinicie a room. O personagem "morrer" não implica, necessariamente no comando instance_destroy() nem no room_restart(). Você pode usar um evento especial (como a colisão com o inimigo ou o final de uma animação de morte) pra fazer o personagem reaparecer na posição inicial, com a tela acompanhando e tudo.
Edit o jogo está lento (Contribuição de Ninja8086:)
Você está testando o jogo e ele até roda, mas fica lento demais. Não chega a travar, mas a velocidade de processamento diminui, parece que seu computador gripou.
Uma possível causa é a contante inclusão de recursos. Você cria sprites, fontes, ou sei lá o que mais a cada step. A memória consumida pelo jogo cresce muito.
Outra causa pode ser um código ineficiente. Excesso de loops ou funções lentas.
solução
Vá ao gerenciador de tarefas do windows, verifique a memória consumida pelo jogo. Se ela estiver crescendo, você está acrescentando recursos a cada step. Corrija isso.
Se a causa for um código ineficiente, então você tem um problema sério em mãos. Mude seu paradigma de programação(nesse caso, a seção de perguntas e respostas é uma ótima idéia), diminua a complexidade do código (talvez até reduzindo a qualidade do jogo) ou exija que o jogador tenha uma máquina melhor.
Meu tiro segue o mouse / objeto (adicionado em 16/01/2012)
Você cria um inimigo que atira. Esse inimigo cria um tiro e parece que está tudo muito bem até que você se move. Era pra você desviar do tiro, mas o tiro segue você.
A causa é sempre a mesma: você não entende como funcionam os eventos do game maker. Nesse caso, você colocou no step event uma definição que deveria estar no create event.
solução:
De imediato, mude o evento (de step para create). A mais longo prazo, é altamente recomendável que você estude a fundo o momento em que ocorre cada evento e procure visualizar o jogo ocorrendo de maneira contínua. Esse tipo de confusão pode causar inúmeros bugs, portanto é imprescindível que você conheça cada um dos eventos.
Crie pequenas engines só pra testar se o evento realmente acontece quando você espera (por exemplo, procure saber qual a diferença entre mouse_button_pressed e global_mouse_button_pressed).
O bug é simples de corrigir, mas o conceito deve ser totalmente compreendido ou será impossível criar jogos mais elaborados.
Edit Unknown variable (adicionado em 16/01/2012)
Você vai rodar o jogo e aparece esse erro. Unkwon variable e o nome de uma das variáveis.
Isso acontece porque você se esqueceu de declarar uma variável ou está tentando acessar a variável de outra instância sem explicar pro game maker que é da outra instância.
solução
No primeiro caso, é muito simples, declare a variável antes de usá-la.
O segundo caso pode ser mais complicado. Uma forma de se resolver é usando a sintaxe objeto.variável, sendo que "objeto" é o objeto ou a id em que a variável está.
Mas existem casos em que é difícil de perceber que você NÃO está no objeto com a variável. Dentro de uma declaração with, por exemplo, você sai do objeto em que o código está inserido e vai pra outro. Nesse caso, é fácil se confundir e tentar usar uma variável do objeto com o código. Pra usar essa variável, você precisa chamar o objeto original de "other". Ficaria "other.variável".
Descrição: Existem algumas perguntas que são feitas e refeitas aqui na comunidade. Estou elaborando uma lista dos bugs mais comuns e das soluções mais comuns. Se você tiver algum bug que te aconteça em 9 de 10 jogos que você cria, comente e eu tentarei acrescentar uma solução genérica, colocando seu bug na lista.
Nível de dificuldade: Variável, de acordo com o bug.
Requerimentos: Nenhum, mas aconselho ler o tutorial sobre variáveis, antes.
Meu personagem fica preso
O primeiro bug da maioria dos desenvolvedores. O persongem (obj_player ou não) anda até uma parede e depois não sai mais. Não importa a força com que o jogador aperte o teclado, o personagem travou!
Normalmente isso é um problema de sobreposição de masks. Seu personagem está entrando alguns pixels no chão/parede. Pode acontecer por dezenas de motivos.
Você programa a velocidade pra ser zero caso o objeto colida com um bloco, então se eles se sobreporem, o natural é que a velocidade seja sempre zero.
Um motivo comum é o uso de sprites irregulares como a mask acompanhando o personagem. Daí, num image_index ele está ok, no outro está alguns pixels dentro do bloco.
Outro motivo é código mal elaborado, que não impede a sobreposição.
Nem sempre é possível enxergar essa sobreposição a olho nu. Além de ser apenas alguns pixels, a mask pode ser diferente da sprite. Nesses casos é bem difícil determinar o problema.
solução
Crie uma variável só pra debugar. Sempre que houver uma colisão, esa variável deve ter o valor true e sempre que não houver, false. Daí você pode usar alguma função de draw pra verificar o valor dessa variável ou simplesmente o debug mode.
Se for verificado que a colisão realmente tornou-se constante enquanto o objeto está travado, não restam mais dúvidas quanto à causa do bug. Daí, parta para a análise dos códigos, das sprites, das masks. Use uma lupa.
Meu sprite não aparece
Você faz o jogo direitinho, se esforça e, na hora que vai rodar, alguns objetos que deveriam estar lá, simplesmente não estão.
Existem algumas causas principais pra isso:
1 - Existe algo no draw event. O game maker usa um draw event "default", que apenas desenha o personagem. Eu diria que ele contém "draw_sprite_ext(sprite_index, image_index, x, y, image_xscale, image_yscale, imgae_angle, c_white, 1);". Se você coloca QUALQUER coisa no seu próprio draw event, esse evento-padrão é ignorado.
2 - Não existe a instância. Acontece. Você acha que criou uma instância, mas ela não foi criada ou foi eliminada sem que você se desse conta.
3 - A instância não está na tela. Ela existe, está sendo desenhada, mas está fora do seu campo de visão. Edit: Ou sob uma outra instância, de depth menor.(adicionado em 15/06/2012)
solução
Em todos os casos, verificar o draw event ou mesmo alterá-lo até encontrar o problema pode ser uma boa. Pra checar se a instância existe, mande desenhar algo numa posição que você SABE que vai aparecer. Como sempre, o modo debug também pode ser útil, se você procurar por termos como "x", "y", "instance_number".
Uma vez determinado qual é o problema, não é difícil corrigir.
Meu jogo trava
No meio do jogo, mesmo sem tocar em nada, o personagem para de obedecer aos comandos. Você tenta fechar a janela do jogo pra procurar o bug e ela não fecha, você tem que abrir o gerenciador de tarefas.
A causa desse bug é (até onde eu sei) única: existe um laço (ou loop) que não encontra a condição de ser finalizado. Porque esse loop não está conseguindo se encerrar, aí a história é outra. Existem dezenas, centenas, talvez até milhares de motivos pra isso. Cada loop, um motivo.
Alguns motivos comuns:
- Erro de digitação: for (i = 0; i < 10; j += 1){
- Erro de lógica: i = 0; while(i < 10){ /* código */ }; Note que não foi colocado o "i += ..." no código
- Erro de lógica2: for (i = 0; i < 10; i += 1){ /* código */; i -=1 }; Note que no final do loop, i volta pro valor inicial
solução
Não sei se existe uma solução padrão pra esses casos. O que eu costumo fazer é:
- Tentar descobrir em que evento o jogo está travando, o que pode dar uma dica de qual loop está com problemas. Se for no início do jogo (quando normalmente existem muitos loops), talvez seja melhor ir direto pra segunda abordagem.
- Tentar isolar o problema eliminando os loops, um por um, não importa o quanto o jogo fique bugado até que se descubra o problema. Não é uma boa solução (porque uma variável usada num loop pode estar sendo definida em outro), mas em muitos casos pode ajudar.
Assim que se descobre qual loop causa o erro, fica viável (ou menos inviável) isolá-lo e testar o comportamento das variáveis, iteração por iterção (ou volta por volta). Algumas vezes pode ser útil usar show_message ou show_debug_message dentro desses loops, já que muitas vezes eles usam variáveis var.
"Unexpected error"
No meio do jogo, essa mensagem enigmática: "unexpected error ocurred while running the game", ou "ocorreu um erro inesperado ao rodar o jogo". Aí, lascou. Afinal, existe algum programador que espera um erro?
O que isso quer dizer é que o game maker verificou todas as funções e scripts e um deles não está funcionando apesar do número e tipos de argumentos estarem corretos. Você comeu mosca em algum ponto.
Edit Contribuição de Ninja8086:
Usar backgrounds muito grandes também podem causar esse erro.
Edit Contribuição de Markituh:
O tema já foi debatido antes. Existem outras causas pra ele, além das citadas. Mais informações no link
solução
Se a quantidade e o tipo de argumentos estão corretos, o erro só pode estar no valor deles. Eu constantemente recebo esse erro por trocar a ordem dos argumentos de algumas funções. Por exemplo, você pode trocar o sprite pela surface em "sprite_add_from_surface". Verifique quais funções você está usando sem ter muito hábito de usar. Experimente não usar uma ou outra função (no caso, por exemplo, você pode usar uma sprite sem sub-imagens) até que o problema pare de acontecer. Quando o problema parar de acontecer, eis a função que está com problemas. Cheque o manual, veja o que significa cada argumento, altere o que estiver errado.
Edit Contribuição de Ninja8086:
Verifique se não há nenhuma imagem muito grande, no arquivo. Havendo, elimine-a e teste novamente. Se o bug desaparecer, ela era a causa. Use uma imagem menor.
Edit Como manter alguma informação? (Contribuição de mrbrum22)
Ao mudar de room ou reiniciar a room, todas aquelas variáveis que você se esforçou pra mudar, como vidas, score, e outras menos comuns, todas elas voltam pro valor inicial.
Muitas vezes isso é esperado e desejado. Algumas vezes, não.
A causa mais comum desse problema é que o valor dessas variáveis é definido no create event do objeto. Como na programação da room o game maker foi informado pra criar os objetos, ele roda todos os create event, o que reinicia a variável.
solução
Há várias soluções. Pra cada jogo, uma solução. As que eu sugiro tentar são:
- Se for uma variável global, você pode definí-la em alguma room do começo do jogo, ao invés de usar um objeto que será reinicializado. Pode-se usar, também, um objeto persistente que é criado numa room da inicialização do programa.
- Se o problema é que a room está sendo reiniciada, não reinicie a room. O personagem "morrer" não implica, necessariamente no comando instance_destroy() nem no room_restart(). Você pode usar um evento especial (como a colisão com o inimigo ou o final de uma animação de morte) pra fazer o personagem reaparecer na posição inicial, com a tela acompanhando e tudo.
Edit o jogo está lento (Contribuição de Ninja8086:)
Você está testando o jogo e ele até roda, mas fica lento demais. Não chega a travar, mas a velocidade de processamento diminui, parece que seu computador gripou.
Uma possível causa é a contante inclusão de recursos. Você cria sprites, fontes, ou sei lá o que mais a cada step. A memória consumida pelo jogo cresce muito.
Outra causa pode ser um código ineficiente. Excesso de loops ou funções lentas.
solução
Vá ao gerenciador de tarefas do windows, verifique a memória consumida pelo jogo. Se ela estiver crescendo, você está acrescentando recursos a cada step. Corrija isso.
Se a causa for um código ineficiente, então você tem um problema sério em mãos. Mude seu paradigma de programação(nesse caso, a seção de perguntas e respostas é uma ótima idéia), diminua a complexidade do código (talvez até reduzindo a qualidade do jogo) ou exija que o jogador tenha uma máquina melhor.
Meu tiro segue o mouse / objeto (adicionado em 16/01/2012)
Você cria um inimigo que atira. Esse inimigo cria um tiro e parece que está tudo muito bem até que você se move. Era pra você desviar do tiro, mas o tiro segue você.
A causa é sempre a mesma: você não entende como funcionam os eventos do game maker. Nesse caso, você colocou no step event uma definição que deveria estar no create event.
solução:
De imediato, mude o evento (de step para create). A mais longo prazo, é altamente recomendável que você estude a fundo o momento em que ocorre cada evento e procure visualizar o jogo ocorrendo de maneira contínua. Esse tipo de confusão pode causar inúmeros bugs, portanto é imprescindível que você conheça cada um dos eventos.
Crie pequenas engines só pra testar se o evento realmente acontece quando você espera (por exemplo, procure saber qual a diferença entre mouse_button_pressed e global_mouse_button_pressed).
O bug é simples de corrigir, mas o conceito deve ser totalmente compreendido ou será impossível criar jogos mais elaborados.
Edit Unknown variable (adicionado em 16/01/2012)
Você vai rodar o jogo e aparece esse erro. Unkwon variable e o nome de uma das variáveis.
Isso acontece porque você se esqueceu de declarar uma variável ou está tentando acessar a variável de outra instância sem explicar pro game maker que é da outra instância.
solução
No primeiro caso, é muito simples, declare a variável antes de usá-la.
O segundo caso pode ser mais complicado. Uma forma de se resolver é usando a sintaxe objeto.variável, sendo que "objeto" é o objeto ou a id em que a variável está.
Mas existem casos em que é difícil de perceber que você NÃO está no objeto com a variável. Dentro de uma declaração with, por exemplo, você sai do objeto em que o código está inserido e vai pra outro. Nesse caso, é fácil se confundir e tentar usar uma variável do objeto com o código. Pra usar essa variável, você precisa chamar o objeto original de "other". Ficaria "other.variável".
Última edição por saim em Sex 15 Jun 2012, 16:24, editado 11 vez(es)
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: Bugs e Dúvidas Comuns
Opa, gostei do tutorial, eu tava pensando em criar um manual com solução de problemas frequentes, mas estes dias eu to meio atolado,depois vem o concurso e facul, axo que não terei mto tpo, mas axo que o tutorial é bem útil, e você poderia ir incrementando ele aos poucos,adicionando novas dúvidas!
DICA: Responde essa dúvida aí:
https://gmbr.forumeiros.com/t20350-como-fazer-para-que-a-room-reinicie-com-o-mesmo-numero-de-itens#152776
Porque só hj ela já apareceu 2vezes seguidas!
DICA: Responde essa dúvida aí:
https://gmbr.forumeiros.com/t20350-como-fazer-para-que-a-room-reinicie-com-o-mesmo-numero-de-itens#152776
Porque só hj ela já apareceu 2vezes seguidas!
Re: Bugs e Dúvidas Comuns
Bom, esses bugs aconteceram comigo, menos o "Unexpected error".
Comentem:https://gmbr.forumeiros.com/t20347-projeto-super-homer#152765
Editado por Lucas Lunar:
Seu post não tem nenhuma informação útil pro tópico nem pro autor. Só está postando para comentarem no seu projeto. -25% por flood.
Comentem:https://gmbr.forumeiros.com/t20347-projeto-super-homer#152765
Editado por Lucas Lunar:
Seu post não tem nenhuma informação útil pro tópico nem pro autor. Só está postando para comentarem no seu projeto. -25% por flood.
GuuhRauber- Data de inscrição : 12/01/2012
Reputação : 1
Número de Mensagens : 107
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Bugs e Dúvidas Comuns
Oi saim! Olha, alguns bugs que eu lembrei que talvez possam ajudar:
>>> "Unexpected error" também pode acontecer quando o camarada põe um background muito grande na room. Vira e mexe isso acontece, principalmente com quem não conhece muito o GM, o cara já sapeca um bg 3000x3000px lá e não sabe o motivo quando dá erro!
>>> Jogo lento. Se o camarada colocar alguma função de "add" recurso em um evento contínuo, step, draw, etc! O cara dá um ctlr + alt + del e vê se a memória que o jogo tá consumindo vai crescendo, se for, pode ser isso!
Valeu!
>>> "Unexpected error" também pode acontecer quando o camarada põe um background muito grande na room. Vira e mexe isso acontece, principalmente com quem não conhece muito o GM, o cara já sapeca um bg 3000x3000px lá e não sabe o motivo quando dá erro!
>>> Jogo lento. Se o camarada colocar alguma função de "add" recurso em um evento contínuo, step, draw, etc! O cara dá um ctlr + alt + del e vê se a memória que o jogo tá consumindo vai crescendo, se for, pode ser isso!
Valeu!
GameMakerTutoriais- Data de inscrição : 29/01/2011
Reputação : 26
Número de Mensagens : 800
Prêmios :
x 0 x 4 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Bugs e Dúvidas Comuns
@mrbrum22: sugestão aceita e implantada. Obrigado!
@Ninja8086: ambas sugestões aceitas e implantadas, mas eu tenho uma dúvida. E vou usar o meu tópico de soluções pra fazer perguntas? Vou, né?
Se eu ficar criando E DELETANDO recursos a cada step, sem causar memory leak, isso pode causar lag? Quer dizer, o que causa o lag nesse caso é a criação constante de recursos, a ineficiência do código ou ambos são sinônimos?
@Ninja8086: ambas sugestões aceitas e implantadas, mas eu tenho uma dúvida. E vou usar o meu tópico de soluções pra fazer perguntas? Vou, né?
Se eu ficar criando E DELETANDO recursos a cada step, sem causar memory leak, isso pode causar lag? Quer dizer, o que causa o lag nesse caso é a criação constante de recursos, a ineficiência do código ou ambos são sinônimos?
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: Bugs e Dúvidas Comuns
Boa saim, agora sim temos um tópico aglomerando erros que todo iniciante tem dúvida, claro. Olha, eu criei um tópico há um tempo atrás falando justamente do Unexpect error. Tó:
Não tenho nenhuma outra ideia para contribuir, mas qualquer coisa tamos por aqui =)
Tá, eu sei que tem uns erros de concordância mas como eu disse, fiz faz tempo.
Não tenho nenhuma outra ideia para contribuir, mas qualquer coisa tamos por aqui =)
Markituh- Games Ranking :
Data de inscrição : 11/10/2009
Reputação : 106
Número de Mensagens : 2184
Prêmios :
x 0 x 1 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Bugs e Dúvidas Comuns
Só para complementar o que o ninja disse, Usar a DLL CleanMem é muito util quando esta consumindo memoria. E não é só ver o quanto de memória esta usando, a aba CPU mostra o quanto de Porcentagem que o Programa esta usando do Processador, Eu ja fiz um jogo que usou mais de 50% do meu processador quando acontecia uma explosao e tal com muitos efeitos, o normal é uns 20% se for um processador como o meu (intel Dual-core 2.5GHz)
E algo que usa bastante memória tambem é quando o cara vai fazer um efeito, uma faisca por exemplo, e usa uma Sprite de 64x64 diminuida com o image_xscale e yscale, isso vai usar muita memória, então recomendo que use sprites pequenas para efeitos pequenos
E algo que usa bastante memória tambem é quando o cara vai fazer um efeito, uma faisca por exemplo, e usa uma Sprite de 64x64 diminuida com o image_xscale e yscale, isso vai usar muita memória, então recomendo que use sprites pequenas para efeitos pequenos
Black Studio- Games Ranking :
Notas recebidas : C + C
Data de inscrição : 19/10/2011
Reputação : 9
Número de Mensagens : 337
Prêmios :
x 0 x 0 x 0
x 0 x 1 x 0
x 0 x 0 x 0
Re: Bugs e Dúvidas Comuns
saim escreveu:Se eu ficar criando E DELETANDO recursos a cada step, sem causar memory leak, isso pode causar lag? Quer dizer, o que causa o lag nesse caso é a criação constante de recursos, a ineficiência do código ou ambos são sinônimos?
Se ele for adicionando e deletando acho que não dá problema não. No caso, meu exemplo é numa situação onde ele esquece de parar o código pra adicionar, e então fica adicionando direto sem parar.
Um exemplo meio "clássico" é o camarada colocar um font_add no evento Draw antes de usar a fonte. Aí fica adicionando recurso de fonte sem parar.
Funkbuster escreveu:Usar a DLL CleanMem é muito util quando esta consumindo memoria.
Eu nunca usei a CleanMem, mas se não me engano, ela é só pra "limpar" a memória depois que o jogo finaliza, é isso mesmo? Não conheço muito sobre ela...
GameMakerTutoriais- Data de inscrição : 29/01/2011
Reputação : 26
Número de Mensagens : 800
Prêmios :
x 0 x 4 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Bugs e Dúvidas Comuns
Mesmo que delete recursos em tempo de execução muita da memória usada para eles não é liberada.Ninja8086 escreveu:Funkbuster escreveu:Usar a DLL CleanMem é muito util quando esta consumindo memoria.
Eu nunca usei a CleanMem, mas se não me engano, ela é só pra "limpar" a memória depois que o jogo finaliza, é isso mesmo? Não conheço muito sobre ela...
Essa DLL faz uma boa limpeza liberando o que não esta mas sendo usado.
Você deve chama-la quando terminar uma fase por exemplo, evitando que os recursos usadas na mesma tornem seu jogo pesado por não terem sido liberados completamente.
Quando o jogo fecha tudo é limpado automaticamente então não há motivo para usa-la só nesse momento.
Re: Bugs e Dúvidas Comuns
Um loop infinito pode ser causado também por se utilizar uma função de forma recursiva infinitamente.
Eu testei isso esses dias no GM e ele não trava, ele aborta com uma mensagem de erro do Windows.
Falando em linguagem de GML, é quando você tem um Script que executa ele mesmo infinitas vezes. Isso deve causar um estouro de memória, e ai o Game Maker aborta, com mensagem de erro do windows.
E erro de variável desconhecida pode ser simplesmente erro de digitação. O nome da variáel era " altura" e você digitou "aitura" e nem percebeu. É muito comum isso.
E é por causa disso que eu recomendo que nunca liguem a opção "Treat unitialized variables as zero", pq ai vai ficar MUITO MAIS difícil detectar esse tipo de erro.
Eu testei isso esses dias no GM e ele não trava, ele aborta com uma mensagem de erro do Windows.
Falando em linguagem de GML, é quando você tem um Script que executa ele mesmo infinitas vezes. Isso deve causar um estouro de memória, e ai o Game Maker aborta, com mensagem de erro do windows.
E erro de variável desconhecida pode ser simplesmente erro de digitação. O nome da variáel era " altura" e você digitou "aitura" e nem percebeu. É muito comum isso.
E é por causa disso que eu recomendo que nunca liguem a opção "Treat unitialized variables as zero", pq ai vai ficar MUITO MAIS difícil detectar esse tipo de erro.
Re: Bugs e Dúvidas Comuns
Bem lembrado!
Isso já aconteceu comigo, também, mas é bem menos comum (o uso de funções recursivas, não a ocorrência de erros quando elas são usadas). Na verdade, nem tenho certeza se isso pode ser chamado de loop ou se o nome é só "função recursiva", mesmo. Eu sempre me atrapalho nas terminologias.
Não tenho certeza também se é o game maker que aborta, tenho a impressão de que seja o windows mesmo que force o fechamento do programa. Se não me engano, a mensagem que você recebeu é um "stack overflow" (testei aqui, mas o jogo simplesmente fechou, sem mostrar nenhuma mensagem).
Você é melhor que eu pra falar, mas eu sei que existe uma diferença entre um loop infinito (como um while) e uma função recursiva infinita. Acho que a alocação de memória é maior usando uma função recursiva, mas agora já estou chutando.
Quanto à opção "Treat unitialized variables as zero", cara, aquilo é uma aberração! Ok, o game maker é feito pra quem não sabe nada de programação e quer aprender, mas essa opção atrapalha muito mais do que ajuda! Prefiro receber uma mensagem de erro (ou um milhão) a deixar o erro passar só pro jogo não dar pau.
Já fiquei tentado a usar essa opção quando usei arrays de tamanho variável e, volta-e-meia, mandava buscar o valor de um índice que ainda não tinha sido declarado. Mas acabei achando o erro na lógica e não caí em tentação.
Isso já aconteceu comigo, também, mas é bem menos comum (o uso de funções recursivas, não a ocorrência de erros quando elas são usadas). Na verdade, nem tenho certeza se isso pode ser chamado de loop ou se o nome é só "função recursiva", mesmo. Eu sempre me atrapalho nas terminologias.
Não tenho certeza também se é o game maker que aborta, tenho a impressão de que seja o windows mesmo que force o fechamento do programa. Se não me engano, a mensagem que você recebeu é um "stack overflow" (testei aqui, mas o jogo simplesmente fechou, sem mostrar nenhuma mensagem).
Você é melhor que eu pra falar, mas eu sei que existe uma diferença entre um loop infinito (como um while) e uma função recursiva infinita. Acho que a alocação de memória é maior usando uma função recursiva, mas agora já estou chutando.
Quanto à opção "Treat unitialized variables as zero", cara, aquilo é uma aberração! Ok, o game maker é feito pra quem não sabe nada de programação e quer aprender, mas essa opção atrapalha muito mais do que ajuda! Prefiro receber uma mensagem de erro (ou um milhão) a deixar o erro passar só pro jogo não dar pau.
Já fiquei tentado a usar essa opção quando usei arrays de tamanho variável e, volta-e-meia, mandava buscar o valor de um índice que ainda não tinha sido declarado. Mas acabei achando o erro na lógica e não caí em tentação.
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: Bugs e Dúvidas Comuns
É isso mesmo Saim, "Stack Overflow", sai por erro do Windows, e não do GameMaker Ele explode em consumo de memória se você fizer isso.
E sim, a alocação de memória usando uma função recursiva infinita é muito maior que usando um loop infinito. Por isso que um loop infinito vai só "Travar" o programa, enquanto uma função recursiva vai fazer o sistema operacional reclamar
Isso é em qualquer linguagem de programação, pode testar a mesma coisa em Pascal, Python, Java ou o que quiser. EDIT: A Diferença é que a maioria dos compiladores ou interpretadores tem algum tipo de tratamento pra quando você estoura a memória. O GameMaker aparentemente só faz o SO peidar
E terminologia não é importante, importante é saber usar as paradas. Você não precisa saber que uma picareta se chama picareta pra poder utilizá-la bem
Função recursiva é uma ferramenta bastante poderosa quando você sabe usar bem, mas realmente tem que se ter cuidado ao utilizá-la
Quer fazer uma coisa divertida? Cria um objeto que cria instancias dele mesmo a cada frame (Só por no step). Conte quantos milisegundos leva pro seu computador travar
E sim, a alocação de memória usando uma função recursiva infinita é muito maior que usando um loop infinito. Por isso que um loop infinito vai só "Travar" o programa, enquanto uma função recursiva vai fazer o sistema operacional reclamar
Isso é em qualquer linguagem de programação, pode testar a mesma coisa em Pascal, Python, Java ou o que quiser. EDIT: A Diferença é que a maioria dos compiladores ou interpretadores tem algum tipo de tratamento pra quando você estoura a memória. O GameMaker aparentemente só faz o SO peidar
E terminologia não é importante, importante é saber usar as paradas. Você não precisa saber que uma picareta se chama picareta pra poder utilizá-la bem
Função recursiva é uma ferramenta bastante poderosa quando você sabe usar bem, mas realmente tem que se ter cuidado ao utilizá-la
Quer fazer uma coisa divertida? Cria um objeto que cria instancias dele mesmo a cada frame (Só por no step). Conte quantos milisegundos leva pro seu computador travar
Re: Bugs e Dúvidas Comuns
Sobre a Cleanmem, ela é ótima mesmo. Você gasta uns 35% de memória do que gastaria sem ela. É um ganho de 65% (ou até mais) de memória. Eu testei e gostei bastante, ela limpa muito bem. Se você acompanhar pelo gerenciador de tarefas (usando um alarme para limpar a cada n steps), verá que quando se limpa, a memória gasta despenca.
Quando eu testei um loop recursivo, o jogo fechou e não mostrou nada. Depois o Windows disse que houve um erro, mas só depois de alguns segundos.
Até mais!
Quando eu testei um loop recursivo, o jogo fechou e não mostrou nada. Depois o Windows disse que houve um erro, mas só depois de alguns segundos.
Até mais!
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Re: Bugs e Dúvidas Comuns
Olha, vou colocar minha opinião sinceramente. Acho que não adianta muito o cara pegar uma dll pra "limpar a memória" sem ter um pensamento crítico sobre o modo como o próprio jogo foi feito.
A grosso modo, se o cara "abusa" na hora de criar, então limpar memória vai adiantar em quê? Não que a pessoa tenha que ficar restrita ao "simples", mas já baixei vários jogos onde os caras podiam, no mínimo, reduzir um canal de áudio dos MP3 sem o menor problema. O cara vai ter ganho em desempenho, e ganho em um executável mais enxuto.
Já aconteceu comigo casos de travamento onde o problema foi simplesmente ter marcado aquela opção de colocar a prioridade máxima pro jogo. Irresponsabilidade? Total.
Eu detesto essa opção. É como se o cara jogasse toda a responsabilidade do mal planejamento do jogo dele em cima do SO e da minha máquina. E depois que eu fecho o jogo, rodo outros jogos numa boa.
@Kabeção
Hoje que eu li Kabeção, senão teria respondido antes. Eu tinha visto ela na GMC há um tempão atrás mas nunca tinha procurado saber.
A grosso modo, se o cara "abusa" na hora de criar, então limpar memória vai adiantar em quê? Não que a pessoa tenha que ficar restrita ao "simples", mas já baixei vários jogos onde os caras podiam, no mínimo, reduzir um canal de áudio dos MP3 sem o menor problema. O cara vai ter ganho em desempenho, e ganho em um executável mais enxuto.
Já aconteceu comigo casos de travamento onde o problema foi simplesmente ter marcado aquela opção de colocar a prioridade máxima pro jogo. Irresponsabilidade? Total.
Eu detesto essa opção. É como se o cara jogasse toda a responsabilidade do mal planejamento do jogo dele em cima do SO e da minha máquina. E depois que eu fecho o jogo, rodo outros jogos numa boa.
@Kabeção
Hoje que eu li Kabeção, senão teria respondido antes. Eu tinha visto ela na GMC há um tempão atrás mas nunca tinha procurado saber.
GameMakerTutoriais- Data de inscrição : 29/01/2011
Reputação : 26
Número de Mensagens : 800
Prêmios :
x 0 x 4 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Bugs e Dúvidas Comuns
Ninja8086 escreveu:Olha, vou colocar minha opinião sinceramente. Acho que não adianta muito o cara pegar uma dll pra "limpar a memória" sem ter um pensamento crítico sobre o modo como o próprio jogo foi feito.
A grosso modo, se o cara "abusa" na hora de criar, então limpar memória vai adiantar em quê?
Eu concordo com você, mais não se tratando do game maker, ele faz uma bagunça com a memoria, isso é um problema do game maker, por exemplo, se rodar um jogo do game maker com uma room e mais nada, vai ocupar uns 20.000k de memoria, se usar a dll cleanmen esses 20.000k vai cair para uns 4.000k. entendeu meu ponto de vista...
Klior- Data de inscrição : 07/03/2010
Reputação : 13
Número de Mensagens : 426
Prêmios :
x 0 x 1 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Plataformas :- Game Maker 8.0 ou 8.1
- C#
- Javascript
Re: Bugs e Dúvidas Comuns
Eu entendi seu ponto de vista Klior, mas pelo que eu entendi no geral, o pessoal deve tá achando que usar essa dll vai deixar o jogo mais rápido. Ela NÃO vai. Se eu tiver enganado quanto ao porquê de usá-la, perdoem.
Desculpem aí pelo meu "mau humor" do outro post. Falei umas bobagens nesse post aqui que não tem nada a haver com assunto do tópico.
Valeu!
Desculpem aí pelo meu "mau humor" do outro post. Falei umas bobagens nesse post aqui que não tem nada a haver com assunto do tópico.
Valeu!
GameMakerTutoriais- Data de inscrição : 29/01/2011
Reputação : 26
Número de Mensagens : 800
Prêmios :
x 0 x 4 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Tópicos semelhantes
» Esses erros sao comuns?
» Códigos comuns, Scripts ou Extensões?
» [Inglês] Termos comuns em programação (parte 1)
» [Duvidas]Algumas duvidas que estou querendo respostas
» [Bate-Papo] Aportuguesando ou: traduzindo termos comuns
» Códigos comuns, Scripts ou Extensões?
» [Inglês] Termos comuns em programação (parte 1)
» [Duvidas]Algumas duvidas que estou querendo respostas
» [Bate-Papo] Aportuguesando ou: traduzindo termos comuns
GMBR :: Ensine & Aprenda :: Tutoriais :: Game Maker
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos