[RESOLVIDO] Variavel nao funciona como seu valor ?

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

Resolvido [RESOLVIDO] Variavel nao funciona como seu valor ?

Mensagem por Lukbebalduke em Qui 20 Dez 2012, 00:49

Bom, recentemente fiz uma pergunta, ja consegui resolver, mas agora o meu problema nao faz sentido algum ! (Resumindo --->) E criei o seguinte codigo:

Código:
if place_meeting(xaa,yaa,obj_pedra)
exemplo=true

Sendo o valor de xaa 32 e o de yaa 0, e existe um obj_pedra no local, mas ela nao funciona, exemplo nao fica como verdadeiro.
Mas se eu colocar assim:

Código:
if place_meeting(32,0,obj_pedra)
exemplo=true

Ele funciona O.o Como pode isso ?

CODIGOS INTEIROS:

Create:

Código:
xaa=0
yaa=0
texto=""

Step:

Código:
if place_free(xaa,yaa)
texto += "A"
if place_meeting(xaa,yaa,obj_bloco_pedra)
texto += "B"
if place_meeting(xaa,yaa,obj_bloco)
texto += "C"
if place_meeting(xaa,yaa,obj_espinho)
texto += "D"
if place_meeting(xaa,yaa,obj_player)
texto += "E"
if place_meeting(xaa,yaa,obj_espinho_cair)
texto += "F"
if place_meeting(xaa,yaa,obj_bloco_metralha)
texto += "G"
if place_meeting(xaa,yaa,obj_espinholo)
texto += "H"
if place_meeting(xaa,yaa,obj_bloco_metal)
texto += "I"
if place_meeting(xaa,yaa,obj_meio_bloco)
texto += "J"
if place_meeting(xaa,yaa,obj_bloco_some1)
texto += "K"
if place_meeting(xaa,yaa,obj_bloco_some2)
texto += "L"


if xaa=768
    {
    yaa+=32
    xaa=0
    if yaa=480
        {
        arquivo = file_text_open_write("texto.txt"); // texto.txt será o nome do arquivo
        file_text_write_string(arquivo , string(texto));
        }
    }
else
xaa+=32

Ja rodei no debug, as vars xaa e yaa assumem exatamente o valor que eu queria, mas a var texto apenas vai adicionando A,A,A,A,A,A ... ja se eu trocar os xaa e yaa pelos numeros o codigo funciona.

O que esta acontecendo ?


Última edição por pinpi em Qui 20 Dez 2012, 14:05, editado 1 vez(es)

Lukbebalduke

Ranking : Nota B
Número de Mensagens : 764
Data de inscrição : 06/07/2011
Notas recebidas : B - B - A - B
Reputação : 30
Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 2

Voltar ao Topo Ir em baixo

Resolvido Re: [RESOLVIDO] Variavel nao funciona como seu valor ?

Mensagem por saim em Qui 20 Dez 2012, 08:59

Primeiro, algumas considerações.
- place_meeting pode retornar "true" se for rodada num objeto com máscara de colisão. Se for rodado num objeto sem, digamos, "forma física" (como um controle, por exemplo), o estranho é estar dando certo quando você usa números.
Esse engano é muito comum, portanto eu me sinto obrigado a perguntar se você está usando o mesmo objeto nas duas situações e se ele tem uma sprite/collision_mask.
Sugiro substituir o place_meeting por um instance_position
- Esse código parece ser aquele que você estava procurando pra criar um mapa através de uma linha de caracteres. Só que ele demora pra fazer isso, assim que estiver funcionando, recomendo usar um "while (yaa < 480)" ao invés do step. Você vai gerar o arquivo num único step, ao invés dos 6 segundos que deve estar levando agora.

Estou fazendo um script pra testar uma teoria, aqui. Se usar instance_position resolver, comente. Senão, eu volto a postar assim que tiver rodado o teste.
Fiz um teste aqui, parece funcionar:
Código:
var xaa, yaa, texto, arquivo, idObjeto;
xaa = 0; yaa = 0;
arquivo = file_text_open_write("teste.txt"); //abre o arquivo pra escrever

while(yaa <= 480){ //enquanto não passar do limite
    idObjeto = instance_position(xaa, yaa, all); //id da INSTÂNCIA
    if (idObjeto == noone){ //se vazio
        file_text_write_string(arquivo, "na posição (" + string(xaa) + ", " + string(yaa) + ") não tem objeto;");
        }
        else { //se qualquer um
            file_text_write_string(arquivo, "na posição (" + string(xaa) + ", " + string(yaa) + ") tem um " + object_get_name(idObjeto . object_index) + ";");
            }
    file_text_writeln(arquivo); //pula de linha
    xaa += 32; //anda pra direita
    if (xaa > 768){ //se no fim
        xaa = 0; yaa += 32; //volta pra esquerda e anda pra baixo
        }
    }

file_text_close(arquivo); //fecha o arquivo

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Resolvido Re: [RESOLVIDO] Variavel nao funciona como seu valor ?

Mensagem por Lukbebalduke em Qui 20 Dez 2012, 14:04

Troquei o place_meeting pelo instance_position e deu certo, nao sei porque ja que meus objeto eram solidos e tinham colision mask. Em fim, muito obrigado Saim.

TOPICO RESOLVIDO

Lukbebalduke

Ranking : Nota B
Número de Mensagens : 764
Data de inscrição : 06/07/2011
Notas recebidas : B - B - A - B
Reputação : 30
Insignia 1 x 1 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 2

Voltar ao Topo Ir em baixo

Resolvido Re: [RESOLVIDO] Variavel nao funciona como seu valor ?

Mensagem por saim em Qui 20 Dez 2012, 14:40

É que place_meeting te retorna true ou false se o objeto em que a função está colocada colide (ou não) com o objeto colocado como argumento ao ser posto na posição (x, y), também entrada como argumento.
Os objetos não precisam ser sólidos, mas PRECISAM ter a collision_mask. Fiquei com a impressão que só os objetos que aparecem no arquivo têm a collision_mask e que o objeto que percorre a room testando as colisões não tem.
Isso explicaria o erro.

instance_position te retorna a id do objeto que colide com o ponto dado como argumento. Esse ponto não precisa de uma collision_mask, então se o objeto que chama a função tem ou não tem uma collision_mask não faz diferença.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Resolvido Re: [RESOLVIDO] Variavel nao funciona como seu valor ?

Mensagem por Conteúdo patrocinado Hoje à(s) 06:05


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