GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» player não consegue andar
por 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]Como melhorar esse código ?

3 participantes

Ir para baixo

[Resolvido]Como melhorar esse código ? Empty [Resolvido]Como melhorar esse código ?

Mensagem por loganout 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
loganout

Data de inscrição : 10/04/2012
Reputação : 3
Número de Mensagens : 63
Prêmios : [Resolvido]Como melhorar esse código ? Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

http://www.ihebhost.com.br

Ir para o topo Ir para baixo

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

Mensagem por Superbomber_MuyMacho 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
Superbomber_MuyMacho

Data de inscrição : 22/03/2014
Reputação : 9
Número de Mensagens : 103
Prêmios : [Resolvido]Como melhorar esse código ? Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

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

Mensagem por loganout Dom 30 Mar 2014, 14:31

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

Cannnot set a constant to a value
loganout
loganout

Data de inscrição : 10/04/2012
Reputação : 3
Número de Mensagens : 63
Prêmios : [Resolvido]Como melhorar esse código ? Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

http://www.ihebhost.com.br

Ir para o topo Ir para baixo

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

Mensagem por Superbomber_MuyMacho 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
Superbomber_MuyMacho

Data de inscrição : 22/03/2014
Reputação : 9
Número de Mensagens : 103
Prêmios : [Resolvido]Como melhorar esse código ? Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

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

Mensagem por loganout 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
loganout

Data de inscrição : 10/04/2012
Reputação : 3
Número de Mensagens : 63
Prêmios : [Resolvido]Como melhorar esse código ? Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

http://www.ihebhost.com.br

Ir para o topo Ir para baixo

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

Mensagem por Markituh 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.
Markituh
Markituh

Games Ranking : Sem avaliações

Data de inscrição : 11/10/2009
Reputação : 106
Número de Mensagens : 2184
Prêmios : [Resolvido]Como melhorar esse código ? Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

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

Mensagem por Superbomber_MuyMacho 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
Superbomber_MuyMacho

Data de inscrição : 22/03/2014
Reputação : 9
Número de Mensagens : 103
Prêmios : [Resolvido]Como melhorar esse código ? Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

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

Mensagem por Markituh 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
Markituh
Markituh

Games Ranking : Sem avaliações

Data de inscrição : 11/10/2009
Reputação : 106
Número de Mensagens : 2184
Prêmios : [Resolvido]Como melhorar esse código ? Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

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

Mensagem por Superbomber_MuyMacho 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
Superbomber_MuyMacho

Data de inscrição : 22/03/2014
Reputação : 9
Número de Mensagens : 103
Prêmios : [Resolvido]Como melhorar esse código ? Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

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

Mensagem por loganout Dom 30 Mar 2014, 16:18

Valeu pessoal, deu certinho + [Resolvido]Como melhorar esse código ? 28a6xd1
loganout
loganout

Data de inscrição : 10/04/2012
Reputação : 3
Número de Mensagens : 63
Prêmios : [Resolvido]Como melhorar esse código ? Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

http://www.ihebhost.com.br

Ir para o topo Ir para baixo

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

Mensagem por Markituh 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].
Markituh
Markituh

Games Ranking : Sem avaliações

Data de inscrição : 11/10/2009
Reputação : 106
Número de Mensagens : 2184
Prêmios : [Resolvido]Como melhorar esse código ? Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

Ir para o topo Ir para baixo

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

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos