Erro no script atirar (creat_instance())

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

Erro no script atirar (creat_instance())

Mensagem por FMP em Dom 06 Jun 2010, 01:22

Meu personagem não atira, quando está abaixado, na direção que eu quero. Ele pega os valores para quando ele estiver em pé.
Aqui vai o script para o botão SPACE

atirando=true
if position=0&&tiro=1
{if correndo=false&&atirando=true&&parado=false&&agaixado=false&&aimup=false
var obj;
obj=instance_create(samus.x+73,samus.y-30,powershotright);
with (obj) motion_set(0,28);tiro=0; alarm[0]=4}
else
if position=180&&tiro=1
{if correndo=false&&atirando=true&&parado=false&&agaixado=false&&aimup=false
var obj;
obj=instance_create(samus.x-69,samus.y-25,powershotleft);
with (obj) motion_set(180,28);tiro=0; alarm[0]=4}
else
if position=0
{if agaixado=true&&atirando=true&&correndo=false&&aimup=false
var obj;
obj=instance_create(samus.x+500,samus.y+500,powershotright2);
with (obj) motion_set(0,4);}
else
if position=180&&tiro=1
{if agaixado=true&&atirando=true&&correndo=false&&aimup=false
var obj;
obj=instance_create(samus.x,samus.y,powershotleft2);
with (obj) motion_set(180,4);tiro=0; alarm[0]=4}
else
if position=0&&tiro=1
{if correndo=false&&agaixado=false&&atirando=true&&aimup=true
var obj;
obj=instance_create(samus.x,samus.y+50,powershotup);
with (obj) motion_set(90,28);tiro=0; alarm[0]=4}


ate criei um tiro diferente(powershotleft2/right2), mas não fez diferença alguma. Não importa os valores que eu ponha para direção e velocidade, o GM só está considerando os valores onde o personagem está em pé(os dois primeiros). Até se tento atirar em pe(última linha) aconteçe a msm coisa, o tiro segue para a direita ou esquerda dependendo do lado para que eu estiver virado. Pareçe ser uma coisa boba, mas estou quebrando a cabeça des de cedo! Por favor me ajudem!

FMP

Número de Mensagens : 24
Idade : 27
Data de inscrição : 04/05/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Erro no script atirar (creat_instance())

Mensagem por Convidad em Dom 06 Jun 2010, 20:50

Acho que há uso excessivo de "else" no código, o que pode estar fazendo o script não funcionar direito. Perceba que há linhas que o próprio else é desnecessário, já que você usou "if" com a condição do próprio "else".

Tente remontar, só que dessa vez, use o método de identação como se fosse uma árvore:

Código:
atirando = true;

if position = 0 && tiro=1
{
   if correndo = false && atirando = true && parado = false
        {
      if agaixado = false
                {
      // Cria o tiro agaixado
                }
                else
                {
      //Cria o tiro de pé.
                }

        }
}

Isso vai te ajudar muito a organizar e não se perder. É só uma dica.

Convidad
Convidado


Voltar ao Topo Ir em baixo

Re: Erro no script atirar (creat_instance())

Mensagem por FMP em Seg 07 Jun 2010, 02:36

É verdade. Mas no help do GM8 não vem falando que isso poderia me causar problemas, pensei que poderia usar infintos "else" e tudo ficaria bem do msm jeito.No caso eu estou usando if em função de else, vc quer dizer que devo usar o contrário, else em função de if? Pensei que desse no msm...
Vou reescrever desse modo, ele realmente é mais simples de "olhar"!
Valeu pela ajuda. Caso de pau aqui, posto a minha nova tentativa frustrada de novo! O.o

FMP

Número de Mensagens : 24
Idade : 27
Data de inscrição : 04/05/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Erro no script atirar (creat_instance())

Mensagem por Convidad em Seg 07 Jun 2010, 07:23

A questão do else, o que eu quis dizer é que, se você usa um else na condição "if agaixado = true", então não é necessário digitar após o else "if agaixado = false". Também não precisa digitar else em toda condição, só nas que forem necessárias.

O else quer dizer "caso contrário", ele só nos poupa de digitar uma outra condição "if" contrária à condição em questão.

Agora, vamos ao problema... você disse que o personagem, mesmo agaixado, pega os valores quando está de pé. O que quiz dizer é que pode ser que no meio dos "else's", a lógica estivesse "pulando" alguma coisa, ou o código estivesse errado. A exemplo da identação, esse código é o mesmo, porém da forma que eu falei:

Acredito que agora não vai haver problemas, se houver, poste aqui uma mensagem pra gente te ajudar.

Código:
if tiro <> 1 || correndo <> false || parado <> false exit;

atirando = true;
tiro = 0;
alarm[0] = 4;
var obj;

switch (position)
{
   case (0):
      if aimup = false
      {
         if agaixado = false
         {
            obj = instance_create(samus.x + 73, samus.y - 30, powershotright);
            with (obj) motion_set(0,28);

         }
         else
         {
            obj = instance_create(samus.x + 500,samus.y + 500, powershotright2);
            with (obj) motion_set(0,4);
         }
      }
      else
      {
         if agaixado = false
         {
            obj=instance_create(samus.x,samus.y+50,powershotup);
            with (obj) motion_set(90,28);
         }
      }
   break;

   case (180):
      if aimup = false
      {
         if agaixado = false
         {
            obj=instance_create(samus.x - 69, samus.y - 25, powershotleft);
            with (obj) motion_set(180,28);
         }
         else
         {
            obj=instance_create(samus.x,samus.y,powershotleft2);
            with (obj) motion_set(180,4);
         }
      }
   break;
}

----- Editado -----

Você também pode fazer upload do projeto pra galera tentar te ajudar se der algum problema, se preferir pode zipar com senha e mandar por mensagem particular (se não quiser disponibilizar o projeto). Mas normalmente essa é a melhor forma, pois a gente varre o código em busca do erro (pode ser que nem esteja nesse script), ou ajuda a melhorar o mecanismo.

Boa sorte aí! Abraços.

Convidad
Convidado


Voltar ao Topo Ir em baixo

Re: Erro no script atirar (creat_instance())

Mensagem por giosepeluiz em Seg 07 Jun 2010, 14:30

Olá FMP...
- Use parênteses para separar condições
- Use == (dois iguais) para comparar
- Use identação para deixar o código organizado

Lembrando que há um ELSE para cada IF... Exemplo:

Código:
if ([condição]){
   if ([condição2]){
      [execução]
   } else {
      if ([condição3]){
      [execução2]
      }
   }
} else {
   [execução4]
}

Coloque o arquivo *.GMK aqui ou explique-nos as variáveis, para que possamos analisar melhor, pois por código não podemos saber exatamente o que ocorre...

giosepeluiz

Número de Mensagens : 110
Idade : 26
Data de inscrição : 21/05/2010
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.orkut.com.br/Main#Profile?uid=12612551030963156921

Voltar ao Topo Ir em baixo

Re: Erro no script atirar (creat_instance())

Mensagem por FMP em Ter 08 Jun 2010, 01:56

Valeu pela ajuda de vcs dois. Vou tentar somar ambas as informações e tenar formular um metodo menos confuso para o que eu quero fazer aqui, caso não dê certo eu posto o .GMK para vcs verem melhor o problema. Até!
Obs: Caso eu use else para indicar a mudança de posição, ele vai reconheçer as três posições básicas?
ex


if position=180
{//executa qualquer coisa}
else
{//executa qualquer coisa na position=0}
else
{//executa qualquer coisa na position=90(que seria mirando para cima, nesse caso)}
Isso é possível?( Contando que eu declare as variáveis no event create antes)
EDIT: Tentei e modifiquei algumas coisa aqui, mas agora o personagem quando está virado para a esquerda e pressiono para baixo ele fica abixado para a direita, e os tiros dados quando virado para esquerda agora copiam a direção e velocidade dos para a esquerda. Vou postar aqui meu .GMK e por favor alguém me dê uma luz nesse túnel...

FMP

Número de Mensagens : 24
Idade : 27
Data de inscrição : 04/05/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Erro no script atirar (creat_instance())

Mensagem por giosepeluiz em Ter 08 Jun 2010, 14:10

FMP escreveu:Valeu pela ajuda de vcs dois. Vou tentar somar ambas as informações e tenar formular um metodo menos confuso para o que eu quero fazer aqui, caso não dê certo eu posto o .GMK para vcs verem melhor o problema. Até!
Obs: Caso eu use else para indicar a mudança de posição, ele vai reconheçer as três posições básicas?
ex


if position=180
{//executa qualquer coisa}
else
{//executa qualquer coisa na position=0}
else
{//executa qualquer coisa na position=90(que seria mirando para cima, nesse caso)}
Isso é possível?( Contando que eu declare as variáveis no event create antes)
EDIT: Tentei e modifiquei algumas coisa aqui, mas agora o personagem quando está virado para a esquerda e pressiono para baixo ele fica abixado para a direita, e os tiros dados quando virado para esquerda agora copiam a direção e velocidade dos para a esquerda. Vou postar aqui meu .GMK e por favor alguém me dê uma luz nesse túnel...

Olá... Isso não pode... Porque, é VERDADEIRO ou FALSO, não há meio termo... Mas você pode usar 2 ifs (ou mais), exemplo:

Código:
if (position == 180)
{//executa qualquer coisa}
    else{
        if (position == 0)
        {//executa qualquer coisa na position=0}
            else{
                if (position == 90)             
            {//executa qualquer coisa na position=90(que seria mirando para cima, nesse caso)}
  }
}


Ou ainda:

Código:
if (position == 180)
{//executa qualquer coisa}

if (position == 0)
{//executa qualquer coisa na position=0}

if (position == 90)             
{//executa qualquer coisa na position=90(que seria mirando para cima, nesse caso)}

Tente aí, qualquer duvida, nos avise...

giosepeluiz

Número de Mensagens : 110
Idade : 26
Data de inscrição : 21/05/2010
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.orkut.com.br/Main#Profile?uid=12612551030963156921

Voltar ao Topo Ir em baixo

Re: Erro no script atirar (creat_instance())

Mensagem por FMP em Ter 08 Jun 2010, 15:38

Reparei uma coisa. Pq vc só usa comparação (==) ao invès de igualdade(=) na hora de estipular alguma variável? Tentei usar o else dentro da condição if, mas depois de algumas linhas começou anão reconheçer mais, por algum motivo.Vou mostrar:

Evento CREATE do personagem:

parado=false
pulando=false
morphmode=false
correndo=false
atirando=false
left=180
right=0
position=0
screwattack=false
agaixado=false
aimup=false
aimdiagonal=false
tiro=1
jumpcount=false

evento KEYBOARD_CHECK(VK_SPACE)(//onde crio o tiro)

atirando=true;
if position=0&&tiro=1
{
if correndo = false && atirando = true && parado = false
{
if agaixado = true
{
var obj;
obj=instance_create(samus.x,samus.y,powershotright2);
with (obj) motion_set(0,28); tiro=0; alarm[0]=4
}
else
{
var obj;
obj=instance_create(samus.x+73,samus.y-30,powershotright);
with (obj) motion_set(0,28); tiro=0; alarm[0]=4
}

}}
mudei algumas coisas de acordo com as dicas de vcs, mas está acontecendo o que descreví no último post meu. Caso precisem de mas alguma coisa é só me avisar ( não consigo "upar" o game de onde estou Sad )

FMP

Número de Mensagens : 24
Idade : 27
Data de inscrição : 04/05/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Erro no script atirar (creat_instance())

Mensagem por giosepeluiz em Ter 08 Jun 2010, 15:48

FMP escreveu:Reparei uma coisa. Pq vc só usa comparação (==) ao invès de igualdade(=) na hora de estipular alguma variável? Tentei usar o else dentro da condição if, mas depois de algumas linhas começou anão reconheçer mais, por algum motivo.Vou mostrar:

Evento CREATE do personagem:

parado=false
pulando=false
morphmode=false
correndo=false
atirando=false
left=180
right=0
position=0
screwattack=false
agaixado=false
aimup=false
aimdiagonal=false
tiro=1
jumpcount=false

evento KEYBOARD_CHECK(VK_SPACE)(//onde crio o tiro)

atirando=true;
if position=0&&tiro=1
{
if correndo = false && atirando = true && parado = false
{
if agaixado = true
{
var obj;
obj=instance_create(samus.x,samus.y,powershotright2);
with (obj) motion_set(0,28); tiro=0; alarm[0]=4
}
else
{
var obj;
obj=instance_create(samus.x+73,samus.y-30,powershotright);
with (obj) motion_set(0,28); tiro=0; alarm[0]=4
}

}}
mudei algumas coisas de acordo com as dicas de vcs, mas está acontecendo o que descreví no último post meu. Caso precisem de mas alguma coisa é só me avisar ( não consigo "upar" o game de onde estou Sad )

No Caso da Igualdade:

== -> Comparação
= -> Atribuição a uma variável

O Game Maker aceita = para comparar, mas NÃO é correto... O correto é == (comparar) e = (atribuir)

############

No Caso do If:

Para reconhece if dentro de else, tem que imaginar uma lógica, não adianta colocar a torta e a direita...

Exemplo:

Se "valor" é MENOR que 10 então faça isso...
Senão, se "valor" é MAIOR que 10 então faça aquilo...
Senão faça o outro...

Código:

if (valor < 10){
  "Faça Isso"
    }else{
      if (valor > 10){
        "Faça Aquilo"
      }else "Faça o Outro"
}
Explicando: Se o valor não for maior nem menor que 10... só pode ser IGUAL...

giosepeluiz

Número de Mensagens : 110
Idade : 26
Data de inscrição : 21/05/2010
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.orkut.com.br/Main#Profile?uid=12612551030963156921

Voltar ao Topo Ir em baixo

Re: Erro no script atirar (creat_instance())

Mensagem por FMP em Qua 09 Jun 2010, 03:03

Valeu pela explicação. Vou levar essas coisas em considereção na hora de fazer um projeto. Só me resta resolver esse problema do create instance...

FMP

Número de Mensagens : 24
Idade : 27
Data de inscrição : 04/05/2010
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Erro no script atirar (creat_instance())

Mensagem por Conteúdo patrocinado Hoje à(s) 22:13


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