Conectar-se
Quem está conectado
22 usuários online :: 1 usuário cadastrado, Nenhum Invisível e 21 Visitantes

theokof98

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Data de inscrição : 10/04/2012
Número de Mensagens : 63
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 3

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuáriohttp://www.ihebhost.com.br

[Resolvido]Como melhorar esse código ?

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 !
avatar
Data de inscrição : 22/03/2014
Número de Mensagens : 103
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 9

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

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

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 }
}
avatar
Data de inscrição : 10/04/2012
Número de Mensagens : 63
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 3

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuáriohttp://www.ihebhost.com.br

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

em Dom 30 Mar 2014, 14:31
Da erro na linha
if (!instance_exist(carro)){

Cannnot set a constant to a value
avatar
Data de inscrição : 22/03/2014
Número de Mensagens : 103
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 9

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

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

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)){
avatar
Data de inscrição : 10/04/2012
Número de Mensagens : 63
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 3

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuáriohttp://www.ihebhost.com.br

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

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
avatar
Ranking : Sem avaliações
Data de inscrição : 11/10/2009
Número de Mensagens : 2184
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 106

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

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

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.
avatar
Data de inscrição : 22/03/2014
Número de Mensagens : 103
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 9

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

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

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 }
}

avatar
Ranking : Sem avaliações
Data de inscrição : 11/10/2009
Número de Mensagens : 2184
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 106

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

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

em Dom 30 Mar 2014, 15:14
Reputação da mensagem: 100% (1 votos)
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
avatar
Data de inscrição : 22/03/2014
Número de Mensagens : 103
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 9

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

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

em Dom 30 Mar 2014, 15:27
Reputação da mensagem: 100% (1 votos)
É, 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...
avatar
Data de inscrição : 10/04/2012
Número de Mensagens : 63
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 3

Prêmios
   : 0
   : 0
   : 0
Ver perfil do usuáriohttp://www.ihebhost.com.br

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

em Dom 30 Mar 2014, 16:18
Valeu pessoal, deu certinho + 
avatar
Ranking : Sem avaliações
Data de inscrição : 11/10/2009
Número de Mensagens : 2184
Insígnias de JAM :

Insignia 1x 0 Insignia 2x 0 Insignia 3x 0
Reputação : 106

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

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

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].
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