Conectar-se
Quem está conectado
30 usuários online :: 4 usuários cadastrados, Nenhum Invisível e 26 Visitantes

gart30, rafaelviodres1, Thiago_o_programador, Willy

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Ranking : Nota B
Notas recebidas : B - B - A - B
Data de inscrição : 06/07/2011
Número de Mensagens : 764
Insígnias de JAM :

Insignia 1x 1 Insignia 2x 0 Insignia 3x 0

Prêmios
   : 1
   : 0
   : 2
Ver perfil do usuário

[RESOLVIDO] Variavel nao funciona como seu valor ?

em Qua Dez 19, 2012 11:49 pm
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 Dez 20, 2012 1:05 pm, editado 1 vez(es)
avatar
Ranking : Nota B
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Número de Mensagens : 2964
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0

Prêmios
   : 1
   : 0
   : 3
Ver perfil do usuário

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

em Qui Dez 20, 2012 7:59 am
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
avatar
Ranking : Nota B
Notas recebidas : B - B - A - B
Data de inscrição : 06/07/2011
Número de Mensagens : 764
Insígnias de JAM :

Insignia 1x 1 Insignia 2x 0 Insignia 3x 0

Prêmios
   : 1
   : 0
   : 2
Ver perfil do usuário

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

em Qui Dez 20, 2012 1:04 pm
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
avatar
Ranking : Nota B
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Número de Mensagens : 2964
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0

Prêmios
   : 1
   : 0
   : 3
Ver perfil do usuário

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

em Qui Dez 20, 2012 1:40 pm
É 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.
Ver o tópico anteriorVoltar ao TopoVer o tópico seguinte
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum