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
[Resolvido]Verificação no laço FOR
5 participantes
Página 1 de 1
[Resolvido]Verificação no laço FOR
Aew galera!!!
Tenho no meu jogo um laço FOR chamado "s":
Tenho no meu jogo um laço FOR chamado "s":
- Código:
for(s=0; s<ds_list_size(ini); s+=1)
- Código:
if s=ds_list_size(ini)
Última edição por Ufrarion em Sáb 29 Dez 2012, 20:39, editado 2 vez(es)
Ufrarion- Data de inscrição : 06/06/2010
Reputação : 3
Número de Mensagens : 222
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Verificação no laço FOR
Funciona sim, sempre uso variaveis associadas ao laço for e nunca tive problema. Qual seria o problema?
Flws!
Flws!
Re: [Resolvido]Verificação no laço FOR
Estranho não é a primeira vez que tento e não funciona (parece que a condição não vira verdadeira)
Vo postar todo o code do for:
Vo postar todo o code do for:
- Código:
for(s=0;s<ds_list_size(ini);s+=1)
{
if real(string_copy(ds_list_find_value(ini,s),1,4)) > global.timer
{
ds_list_insert(ini,s,string(global.timer)+" "+string(current_day)+"/"+string(current_month)+"/"+string(current_year))
ds_list_delete(ini,5); break
}
if s=ds_list_size(ini) {ds_list_add(ini,string(global.timer)+" "+string(current_day)+"/"+string(current_month)+"/"+string(current_year))}
}
}
Ufrarion- Data de inscrição : 06/06/2010
Reputação : 3
Número de Mensagens : 222
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Verificação no laço FOR
Bom, está tudo certo. Eu tive que editar o post. Pensei que era outra coisa. Um exemplo:
Seu código está correto. Mas o que provavelmente está impedindo o código de checar avariável é esse BREAK que corta loop e passa ele pro próximo valor.
Para saber mais sobre o laço (ciclo, loop, etc) for acesse a aula:
https://gmbr.forumeiros.com/t5121-aula-6-introducao-em-gml-for-do-until-e-repeat
FLWS!
- Código:
for (i=0 i<10 i+=1)
{
if i == 5
{
show_message("Sua variável de evento <i> está no valor 5");
}
}
Seu código está correto. Mas o que provavelmente está impedindo o código de checar avariável é esse BREAK que corta loop e passa ele pro próximo valor.
Para saber mais sobre o laço (ciclo, loop, etc) for acesse a aula:
https://gmbr.forumeiros.com/t5121-aula-6-introducao-em-gml-for-do-until-e-repeat
FLWS!
Re: [Resolvido]Verificação no laço FOR
Sei como, mas o laço for permite que se coloque no segundo parâmetro qualquer tipo de condição, não necessariamente uma constante. O código inicial que ele postou teoricamente tem que funcionar....Alex FC escreveu:vinians ele está tentando colocar isso dentro do dos parenteses do for (Pra mim também estava difícil decifrar a pergunta, mas consegui), mas na verdade o certo é colocar entre colchetes:
- Código:
for (i=0 i<10 i+=1)
{
if i == 5
{
show_message("Sua variável de evento <i> está no valor 5");
}
}
Para saber mais sobre o laço (ciclo, loop, etc) for acesse a aula:
https://gmbr.forumeiros.com/t5121-aula-6-introducao-em-gml-for-do-until-e-repeat
FLWS!
Flws!
Re: [Resolvido]Verificação no laço FOR
¬¬ Sim, queimei a língua xD.
Provavelmente a primeira condição sempre ocorre, cortando a execução da segunda condição por causa do BREAK.
FLWS!
Provavelmente a primeira condição sempre ocorre, cortando a execução da segunda condição por causa do BREAK.
FLWS!
Re: [Resolvido]Verificação no laço FOR
Amigo, o erro ai que vc esta "aumentando" o proprio ds_list que faz parte da condição, no caso "ini". Quando usado em uma condição vc não deve (pois é possivel) aumentar o tamanho de elementos que sejam verificados desta forma. Pra funcionar poderia ser algo do tipo:Ufrarion escreveu:Estranho não é a primeira vez que tento e não funciona (parece que a condição não vira verdadeira)
Vo postar todo o code do for:
- Código:
for(s=0;s<ds_list_size(ini);s+=1)
{
if real(string_copy(ds_list_find_value(ini,s),1,4)) > global.timer
{
ds_list_insert(ini,s,string(global.timer)+" "+string(current_day)+"/"+string(current_month)+"/"+string(current_year))
ds_list_delete(ini,5); break
}
if s=ds_list_size(ini) {ds_list_add(ini,string(global.timer)+" "+string(current_day)+"/"+string(current_month)+"/"+string(current_year))}
}
}
- Código:
t = ds_list_size(ini);
for(s=0;s<t;s+=1)
{
if real(string_copy(ds_list_find_value(ini,s),1,4)) > global.timer
{
ds_list_insert(ini,s,string(global.timer)+" "+string(current_day)+"/"+string(current_month)+"/"+string(current_year))
ds_list_delete(ini,5); break
}
if s=ds_list_size(ini) {ds_list_add(ini,string(global.timer)+" "+string(current_day)+"/"+string(current_month)+"/"+string(current_year))}
}
}
Re: [Resolvido]Verificação no laço FOR
@Alex FC
O BREAK não é porque já testei colocando uma mensagem junto ao break e ele não é executado, por isso que eu preciso fazer esse verificação no "s" porque essa parte do código não vai ser executada.
@vinians
Eu tamebm não estou entendendo, não sei como funciona o for, se ele adiciona +1 no começo do for ou no fim, porque se for no fim pode ser isso que não está funcionando
O BREAK não é porque já testei colocando uma mensagem junto ao break e ele não é executado, por isso que eu preciso fazer esse verificação no "s" porque essa parte do código não vai ser executada.
@vinians
Eu tamebm não estou entendendo, não sei como funciona o for, se ele adiciona +1 no começo do for ou no fim, porque se for no fim pode ser isso que não está funcionando
Última edição por Ufrarion em Qui 27 Dez 2012, 19:49, editado 3 vez(es)
Ufrarion- Data de inscrição : 06/06/2010
Reputação : 3
Número de Mensagens : 222
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Verificação no laço FOR
Veja, ele executa o terceiro parâmetro que no seu caso é "s+=1" no final da iteração com certeza. Quando vc dá break ele sai do loop. No caso, o "não funcionando" seria oque ?Ufrarion escreveu:@Alex FC
@vinians
Eu tamebm não estou entendendo, não sei como funciona o for, se ele adiciona +1 no começo do for ou no fim, porque se for no fim pode ser isso que não está funcionando
Re: [Resolvido]Verificação no laço FOR
Testei assim:
E que no teste que eu estou fazendo a condição "if real(string_copy(ds_list_find_value(ini,s),1,4)) > global.timer" nunca é verdadeira, então o BREAK nunca é executado (no teste).
- Código:
t = ds_list_size(ini);
for(s=0;s<t;s+=1)
{
if real(string_copy(ds_list_find_value(ini,s),1,4)) > global.timer
{
show_message("kkkkk")
ds_list_insert(ini,s,string(global.timer)+" "+string(current_day)+"/"+string(current_month)+"/"+string(current_year))
ds_list_delete(ini,5); break
}
if s=t {ds_list_add(ini,string(global.timer)+" "+string(current_day)+"/"+string(current_month)+"/"+string(current_year))}
}
}
E que no teste que eu estou fazendo a condição "if real(string_copy(ds_list_find_value(ini,s),1,4)) > global.timer" nunca é verdadeira, então o BREAK nunca é executado (no teste).
Ufrarion- Data de inscrição : 06/06/2010
Reputação : 3
Número de Mensagens : 222
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Verificação no laço FOR
Entendi. Neste caso, o problema não está no laço for e sim no valor de global.timer ou nos próprios valores inseridos dentro de "ini". Na verdade
Explique o que você precisa que vamos pensar juntos numa solução.
Flws!
- Código:
if s=t {ds_list_add(ini,string(global.timer)+" "+string(current_day)+"/"+string(current_month)+"/"+string(current_year))}
Explique o que você precisa que vamos pensar juntos numa solução.
Flws!
Re: [Resolvido]Verificação no laço FOR
Na verdade eu fiz esse sistema porque o ds_list_sort ele devia pegar uma lista de numeros como e deixar em ordem acendente mas ele deixa assim:
132
50
83
98
Porque o 1 do numero 132 é menor que o 5 do 50 mas não leva em conta que o numero inteiro 132 é maior que o 50 entendeu? o ds_list_sort faz a ordem levando em conta o primeiro digito somente e eu preciso que leve em consideração o numero inteiro e que a ordem fique:
50
83
98
132
132
50
83
98
Porque o 1 do numero 132 é menor que o 5 do 50 mas não leva em conta que o numero inteiro 132 é maior que o 50 entendeu? o ds_list_sort faz a ordem levando em conta o primeiro digito somente e eu preciso que leve em consideração o numero inteiro e que a ordem fique:
50
83
98
132
Ufrarion- Data de inscrição : 06/06/2010
Reputação : 3
Número de Mensagens : 222
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Verificação no laço FOR
Entendi sim amigo. Na verdade você deve estar adicionando os elementos do ds_list como string. Se adiciona-los como valor, o ds_list_sort() vai coloca-los em ordem corretamente. Veja:
Viu, basta apenas adicionar os itens como numeros diretamente ou converter as string quando for inserido usando real(numero).
Flws!
- Código:
ini = ds_list_create();
ds_list_add(ini, 132);
ds_list_add(ini, 5);
ds_list_add(ini, 45);
ds_list_sort(ini, true);
//Agora mostrar os valores
i = 0;
repeat(3)
{
show_message(ds_list_finc_value(ini, i));
i += 1;
}
Viu, basta apenas adicionar os itens como numeros diretamente ou converter as string quando for inserido usando real(numero).
Flws!
Re: [Resolvido]Verificação no laço FOR
Então com numeros reais funciona, o problema é que eu estou fazendo um highscore que mostra o tempo + alguns espaços pra não deixar junto + data (com barras de separação) e por isso acho que não tem como converter a numeros reais não é?
Ufrarion- Data de inscrição : 06/06/2010
Reputação : 3
Número de Mensagens : 222
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Verificação no laço FOR
A saquei, entao vc pode fazer assim para ordenar:
Supondo que o DS chame-se ini
Flws!
Supondo que o DS chame-se ini
- Código:
var i, j, repetir;
while (true)
{
repetir = false;
for (i = 0; i < ds_list_size(ini) - 2; i += 1)
{
v1 = string_copy(ds_list_find_value(ini, i), 1, 4); // mude a posicao aqui
v2 = string_copy(ds_list_find_value(ini, i + 1), 1, 4); //idem
if (real(v1) > real(v2))
{
ds_list_replace(ini, i, v2);
ds_list_replace(ini, i + 1, v1);
repetir = true;
}
}
if (not repetir) break;
}
Flws!
Re: [Resolvido]Verificação no laço FOR
gente, não li tudo, tem muita coisa, mas notei um erro simples. Veja bem, teste esse código aqui:
Sem ds_list aumentando, sem nada. No meu entendimento, a mensagem mostrada será "tá fraco" (não testei). Agora, pra mostrar a mensagem "tá beleza", temos que trocar o "<" por "<=", no for:
Se a ds_list estiver crescendo a cada iteração, o erro que vai dar é o computador travar. Seria algo como
- Código:
naoRolou = true;
for(s = 0; s < 10; s += 1){
if (s == 10){
show_message("tá beleza")
naoRolou = false;
}
}
if (naoRolou == true){
show_message("tá fraco");
}
Sem ds_list aumentando, sem nada. No meu entendimento, a mensagem mostrada será "tá fraco" (não testei). Agora, pra mostrar a mensagem "tá beleza", temos que trocar o "<" por "<=", no for:
- Código:
naoRolou = true;
for(s = 0; s <= 10; s += 1){
if (s == 10){
show_message("tá beleza")
naoRolou = false;
}
}
if (naoRolou == true){
show_message("tá fraco");
}
Se a ds_list estiver crescendo a cada iteração, o erro que vai dar é o computador travar. Seria algo como
- Código:
for(s = 0; s < 2; s += 1){
s -= 1;
}
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: [Resolvido]Verificação no laço FOR
Desculpe pela demora (problemas com a internet), andei olhando todo o tópico e deixei meu code assim e funcionou:
Obrigado a todos que me ajudaram. Resolvido!
- Código:
var ds;
ds=ds_list_size(ini)
for(s=0;s<ds;s+=1)
{
if real(string_copy(ds_list_find_value(ini,s),1,4)) > global.timer
{
ds_list_insert(ini,s,string(global.timer)+" "+string(current_day)+"/"+string(current_month)+"/"+string(current_year))
ds_list_delete(ini,5); break
}
if (s==ds-1) {ds_list_add(ini,string(global.timer)+" "+string(current_day)+"/"+string(current_month)+"/"+string(current_year))}
}
Obrigado a todos que me ajudaram. Resolvido!
Ufrarion- Data de inscrição : 06/06/2010
Reputação : 3
Número de Mensagens : 222
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Resolvido]Verificação no laço FOR
Tópico trancado, pois a dúvida do autor foi resolvida.
Caso necessites, favor se dirigir à mim ou à qualquer outro moderador para destrancar este seu tópico.
Caso necessites, favor se dirigir à mim ou à qualquer outro moderador para destrancar este seu tópico.
Machow8- Data de inscrição : 21/05/2011
Reputação : 16
Número de Mensagens : 625
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Tópicos semelhantes
» [Resolvido]Laço FOR bugando o jogo
» Laço While
» Como faço pra sortear um objeto?
» Verificação de Slots Vazios
» resolvido
» Laço While
» Como faço pra sortear um objeto?
» Verificação de Slots Vazios
» resolvido
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos