[Resolvido]Como melhorar esse código ?

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

[Resolvido]Como melhorar esse código ?

Mensagem por loganout em Dom 30 Mar 2014, 13:55

Estou tentando criar alguns obj randomizados e que eles nunca se repetissem na room.

tentei criar dessa forma, mas está bem feia e não funciona 100%. Eu tenho 20 carros (obj) diferentes que surgem a direita da minha view, como se a view estivesse mais rápida que a velocidade do carro atual.

Dessa forma (codigo abaixo), estou até conseguindo criar obj randomizados, mas eles se repetem e a função que eu vou executo logo depois, vai cair sobre todos os obj iguais, causando um acidente Smile e isso não quero que aconteça.

No exemplo abaixo coloquei a penas 3 obj, quando executo o código ele qse não cria o obj_caminhao_marrom e repete muito o obj_carro_vermelho.

Gostaria de ajuda para otimizar meu código e fazer com que não se crie o mesmo objeto enquanto ele estiver na view.

Código:
if global.gerar = true
{
    ox = 1700
    oy = 580

    if collision_circle(ox,oy,100,obj_furgao_preto,0,0)or
      collision_circle(ox,oy,100,obj_carro_vermelho,0,0)or
      collision_circle(ox,oy,100,obj_caminhao_marrom,0,0)
    {
        exit;
    }
    else
    {
        instance_create(ox,oy,choose(obj_furgao_preto,obj_carro_vermelho,obj_caminhao_marrom))
       
        global.gerar = false
        alarm[0] = (room_speed * 5);
    }
}

Obrigado !

loganout

Número de Mensagens : 63
Data de inscrição : 10/04/2012
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.ihebhost.com.br

Voltar ao Topo Ir em baixo

Re: [Resolvido]Como melhorar esse código ?

Mensagem por Superbomber_MuyMacho em Dom 30 Mar 2014, 14:16

Faz assim quando randomizar o carro, usa o instance_exists() para saber se aquele objeto já está na sala, se já tiver repete a ação, com outro random


Exemplo:


teste = true
with(teste = true){
   carro = random(20)
   if (!instance_exist(carro)){
      instance_create(0,0,carro)
      teste = false
   }else { teste = true }
}

Superbomber_MuyMacho

Número de Mensagens : 103
Idade : 19
Data de inscrição : 22/03/2014
Reputação : 9
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Resolvido]Como melhorar esse código ?

Mensagem por loganout em Dom 30 Mar 2014, 14:31

Da erro na linha
if (!instance_exist(carro)){

Cannnot set a constant to a value

loganout

Número de Mensagens : 63
Data de inscrição : 10/04/2012
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.ihebhost.com.br

Voltar ao Topo Ir em baixo

Re: [Resolvido]Como melhorar esse código ?

Mensagem por Superbomber_MuyMacho em Dom 30 Mar 2014, 14:42

Foi mal fiz errado é assim: if (!instance_exists(carro)){ se der erro faz assim: if !(instance_exists(carro)){

Superbomber_MuyMacho

Número de Mensagens : 103
Idade : 19
Data de inscrição : 22/03/2014
Reputação : 9
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Resolvido]Como melhorar esse código ?

Mensagem por loganout em Dom 30 Mar 2014, 14:51

O problema não é a escrita vc escreveu errado mas eu arrumei no GMS antes, dai quando eu foi reportar o erro pra vc copiei o que vc tinha escrito errado. rrsrsrs

mas ele retorna o erro que eu mostrei acima Smile

loganout

Número de Mensagens : 63
Data de inscrição : 10/04/2012
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.ihebhost.com.br

Voltar ao Topo Ir em baixo

Re: [Resolvido]Como melhorar esse código ?

Mensagem por Markituh em Dom 30 Mar 2014, 14:53

O problema está em carro = random(20). Provavelmente porque um objeto se chama carro, e já que é um valor fixo para o objeto, ele dá esse erro pois não é possível alterar o valor da constante "carro" e.... não pera, tem algo estranho aí. Qual é a do "with(teste = true)"? scratch 

Mas não tem segredo, se cada carro tiver um objeto separado, usa o irandom(numero) (random normal gera frações) e cria o carro. Porém, falta um detalhezinho:
Código:
// Poe isso num script e chama ele no Create
arr_carros[0] = obj_carro1
arr_carros[1] = obj_carro2
arr_carros[2] = obj_carro3
arr_carros[3] = obj_carro4
arr_carros[4] = obj_carro5
arr_carros[5] = obj_carro6
arr_carros[6] = obj_carro7
arr_carros[7] = obj_carro8
arr_carros[8] = obj_carro9
arr_carros[9] = obj_carro10
arr_carros[10] = obj_carro11
arr_carros[11] = obj_carro12
arr_carros[12] = obj_carro13
arr_carros[13] = obj_carro14
arr_carros[14] = obj_carro15
arr_carros[15] = obj_carro16
arr_carros[16] = obj_carro17
arr_carros[17] = obj_carro18
arr_carros[18] = obj_carro19
arr_carros[19] = obj_carro20
quantidade_carros = 20

E então:
Código:
// Blah, collision_line
else {
    c = irandom_range(0,quantidade_carros-1)
    if (!instance_exists(arr_carros[c])) {
        instance_create(ox,oy,arr_carros[c])
    }
   global.gerar = false
   alarm[0] = room_speed * 5;
}

Fica bem mais intuitivo para uma mudança futura. Eu usei irandom_range ao invés do random normal, para incluir o zero nos valores gerados.

___________

"Não deixe para amanhã o que se pode fazer hoje"

Links úteis:
Índice de Tutoriais
Manual online do GMS

Markituh

Ranking : Sem avaliações
Número de Mensagens : 2183
Data de inscrição : 11/10/2009
Reputação : 106
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Resolvido]Como melhorar esse código ?

Mensagem por Superbomber_MuyMacho em Dom 30 Mar 2014, 15:01

Cara a variável carro era só pra exemplo não disse pra por assim no seu jogo o tal carro representava qual carro você quer por...E no caso da variável carro ia criar o objeto pela index não pelo nome

E o with serve pra repetir só se aquele carro já existe(Se esse carro já existe lá ele repete e tenta outro) assim não teria carros repitidos

E como eu coloquei no meu post era um exemplo do que ele devia fazer não como fazer

Eu 2 posts atrás escreveu:Faz assim quando randomizar o carro, usa o instance_exists() para saber se aquele objeto já está na sala, se já tiver repete a ação, com outro random


Exemplo: "<-----"


teste = true
with(teste = true){
   carro = random(20)
   if (!instance_exist(carro)){
      instance_create(0,0,carro)
      teste = false
   }else { teste = true }
}


Superbomber_MuyMacho

Número de Mensagens : 103
Idade : 19
Data de inscrição : 22/03/2014
Reputação : 9
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Resolvido]Como melhorar esse código ?

Mensagem por Markituh em Dom 30 Mar 2014, 15:14

Sim, to ligado (até porque os nomes linkam para as indexes de qualquer forma), mas e se os carros dele não forem as primeiras 20 IDs? Vai dar problema, certamente.
E o with serve pra repetir só se aquele carro já existe(Se esse carro já existe lá ele repete e tenta outro) assim não teria carros repitidos
Eu acho, apenas acho, que você confundiu with com while. Mas realmente, uma rotina desse tipo necessita ser implementada, então ficaria assim:
Código:
c = irandom_range(0,quantidade_carros-1)
while (instance_exists(arr_carros[c])) c = irandom_range(0,quantidade_carros-1)
instance_create(ox,oy,arr_carros(c))
// E o resto bla

E como eu coloquei no meu post era um exemplo do que ele devia fazer não como fazer
Tranquilo, estou aqui apenas complementando. Enfim, espero que ele esteja entendo a lógica do código Happy

___________

"Não deixe para amanhã o que se pode fazer hoje"

Links úteis:
Índice de Tutoriais
Manual online do GMS

Markituh

Ranking : Sem avaliações
Número de Mensagens : 2183
Data de inscrição : 11/10/2009
Reputação : 106
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Resolvido]Como melhorar esse código ?

Mensagem por Superbomber_MuyMacho em Dom 30 Mar 2014, 15:27

É, erro de português(Quer dizer inglês) quis dizer while


Markituh escreveu:Sim, to ligado (até porque os nomes linkam para as indexes de qualquer forma), mas e se os carros dele não forem as primeiras 20 IDs? Vai dar problema, certamente.

Eu já falei antes que isso era um exemplo???Não disse pra randomizar assim

Minha verdadeira resposta, Nua e crua, Sem exemplos, só explicação escreveu:Faz assim quando randomizar o carro, usa o instance_exists() para saber se aquele objeto já está na sala, se já tiver repete a ação, com outro random

Foi isso o que eu disse. O resto era só um exemplo.Você não considera exemplos como possibilidade, exemplos são para você entender melhor.Sem referência nenhum ao oque você quer, mais sim sobre oque você quer. Ex: o FIAT Uno é um carro. Isso é um exemplo de carro, não quer dizer que o Uno seja o carro que você se referiu.Quer dizer que o Uno é o exemplo de carro. Sem referências a você, só referências a carros...

Superbomber_MuyMacho

Número de Mensagens : 103
Idade : 19
Data de inscrição : 22/03/2014
Reputação : 9
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Resolvido]Como melhorar esse código ?

Mensagem por loganout em Dom 30 Mar 2014, 16:18

Valeu pessoal, deu certinho + 

loganout

Número de Mensagens : 63
Data de inscrição : 10/04/2012
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://www.ihebhost.com.br

Voltar ao Topo Ir em baixo

Re: [Resolvido]Como melhorar esse código ?

Mensagem por Markituh em Dom 30 Mar 2014, 16:26

Só uma coisa, se tiver usando aquele while, vai dar problema caso todos os carros estiverem na room. Cria uma variável global pra controlar a quantidade de carros, que aumenta o valor dela no create de cada carro e diminui no Destroy deles, e então você usa um if pra testar se essa var é == a quantidade_carros, e da um exit [antes do c = blabla].

___________

"Não deixe para amanhã o que se pode fazer hoje"

Links úteis:
Índice de Tutoriais
Manual online do GMS

Markituh

Ranking : Sem avaliações
Número de Mensagens : 2183
Data de inscrição : 11/10/2009
Reputação : 106
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Resolvido]Como melhorar esse código ?

Mensagem por Conteúdo patrocinado Hoje à(s) 17:20


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