Conectar-se

Esqueci minha senha

Últimos assuntos
» colisão de queda após outra colisão dando problema
Ontem à(s) 20:18 por Willy

» [Duvida] O que aprender
Seg 26 Jun 2017, 15:32 por Markituh

» BUILD FAILED: Cannot find BUILD.xml
Seg 26 Jun 2017, 14:50 por ReisBlender

» Nota de esclarecimento - GMBR voltou!
Sex 23 Jun 2017, 20:33 por Willy

» Regras do Fórum
Sex 23 Jun 2017, 19:02 por GMBR

» Retorno da GMBR!!!
Ter 24 Jan 2017, 15:43 por GMBR

» Jogo Dengue HTML
Seg 30 Nov 2015, 16:17 por guga

» Criando IA Simples para inimigos
Qua 25 Nov 2015, 19:22 por DJDAVYD

» Ordenar variavel em ordem decrescente
Sex 28 Ago 2015, 21:09 por Kodained

» Crio Trilha Sonora para Games!
Qui 27 Ago 2015, 13:50 por Isaias Malafaia

» Problema com Colisão
Qui 27 Ago 2015, 12:30 por The_Game

» Quem quer Uma Engine, e de Quê?
Qui 27 Ago 2015, 09:22 por theguitarmester

» [RESOLV]Como adicionar 2 objetos na mesma posição?
Qua 26 Ago 2015, 11:38 por Bhryenno Kelvyn Carlson

» Sistema de porta!!!
Ter 25 Ago 2015, 21:29 por theguitarmester

» Venda de objetos em Inventário - Multiplicado
Seg 24 Ago 2015, 18:33 por AG Hydra

» Atirar na direção certa
Seg 24 Ago 2015, 09:03 por theguitarmester

» Western Duels
Seg 24 Ago 2015, 07:47 por theguitarmester

» Problemas na compilação android
Dom 23 Ago 2015, 23:43 por Zero.

» Dúvida sobre strings, lendo txt
Sab 22 Ago 2015, 20:31 por Pai véi

» Como estabilizar um som
Sab 22 Ago 2015, 19:03 por Isquilo_Roedor

» Janela Modal
Sab 22 Ago 2015, 09:23 por Pai véi

» Sobre instance Creation Code
Sab 22 Ago 2015, 08:39 por Pai véi

» LudumDare #33
Sex 21 Ago 2015, 21:17 por WellingtonBecker

» Como fazer um temporizador
Sex 21 Ago 2015, 19:02 por Isquilo_Roedor

» GMS sempre salva projeto ao compilar?
Sex 21 Ago 2015, 12:32 por Pai véi

Quem está conectado
19 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 19 Visitantes

Nenhum

[ Ver toda a lista ]


O recorde de usuários online foi de 324 em Ter 05 Out 2010, 13:36

[Resolvido]Criar Objetos aleatórios em lugares específicos

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

[Resolvido]Criar Objetos aleatórios em lugares específicos

Mensagem por 100%Dedicada em Ter 17 Fev 2015, 20:24

Olá, boa noite.

Tenho 12 objetos.
Eu queria que estes objetos aparecessem ALEATORIAMENTE no centro da room,
fazendo 3 linhas e 4 colunas. Ou seja existem apenas 12 lugares que
eles podem ocupar, de forma aleatória e sem um ocupar o espaço do outro.

Além disso o sprite de cada um dos 12 objetos possui 5 frames (image0, image1, image2 e image3), gostaria que estes frames de cada sprite fossem sorteados aleatoriamente tbm no momento do objeto aparecer.

Rolling Eyes

Obrigado desde já,


_____________


Última edição por 100%Dedicada em Qua 18 Fev 2015, 09:48, editado 1 vez(es)
avatar
100%Dedicada

Data de inscrição : 20/01/2015
Número de Mensagens : 21
Insígnias de JAM :

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

Prêmios
   : 0
   : 0
   : 0

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: [Resolvido]Criar Objetos aleatórios em lugares específicos

Mensagem por Rodrigo Santiago em Ter 17 Fev 2015, 21:13

Você pode usar random(num), que devolve um numero aleatório entre 0 e num
Código:

a = random(5);
//a pode ter valores de 0 até 4.99
E uma variação que é o choose(num1,num2,...,nume) que devolve um dos numeros
Código:

a = choose(0,1,5,46);
//a pode ser 0 ou 1 ou 5 ou 46 ou qualquer outro numero

Um exemplo para você usar isso na pratica para o problema:

Código:

var pos_x,pos_y,numero,criar_x,criar_y;

pos_x = ds_list_create();//Lista com posiçoes de x
pos_y = ds_list_create();//Lista com posições de y
ds_list_add(pos_x,100);//Posicao 1 x
ds_list_add(pos_y,100);//Posicao 1 y
ds_list_add(pos_x,200);//Posicao 2 x
ds_list_add(pos_y,100);//Posicao 2 y
ds_list_add(pos_x,100);//Posicao 3 x
ds_list_add(pos_y,200);//Posicao 3 y
//e continua até onde você quiser

while(ds_list_size(pos_x)>0){
    numero = floor(random(ds_list_size(pos_x)));//flor arredonda o numero para menos(ex.: 2.7 = 2 , 3.9 = 3)
    criar_x = ds_list_find_value(pos_x,numero);
    criar_y = ds_list_find_value(pos_y,numero);
    ds_list_delete(pos_x,numero);
    ds_list_delete(pos_y,numero);
    
    instance_create(criar_x,criar_y,obj);
}

Pra alterar a sprite você usa no Create:
Código:

image_index=choose(0,1,2,3)
avatar
Rodrigo Santiago

Ranking : Nota B
Notas recebidas : C + C + B
Data de inscrição : 28/07/2012
Número de Mensagens : 1281
Insígnias de JAM :

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

Prêmios
   : 3
   : 1
   : 3

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: [Resolvido]Criar Objetos aleatórios em lugares específicos

Mensagem por Willy em Ter 17 Fev 2015, 21:21

Suponho que estes 12 objetos não podem se repetir... Para fazer isso, use ds_list.

Primeiro, no create, declare-a e armazene seu ID em uma var:
Código:
List = ds_list_create();
Em seguida, popule a lista com seus objetos:
Código:
ds_list_add(Lista,obj1,obj2,obj3...);
Coloque todos os 12 de uma só vez, ou se preferir, individualmente (não é necessário, você pode add até 15 de uma vez).

Pronto, a lista está criada. Agora, ainda no create, vamos criar um for encadeado que será responsável por fazer as colunas e as fileiras, e em seguida, sortear.
Código:
for (i=0;i<3;i++){ //Linhas
  for(ii=0;ii<4ii++){ //Colunas
    //Código em breve...
  }
}
Os códigos abaixo devem ser colocados dentro do for acima. Coloquei separado para facilitar o entendimento.

Primeiro, você deve alterar o seed do random do GM, para isto basta:
Código:
randomize();
Em seguida, pega-se a lista e sorteia um objeto baseado no tamanho da lista:
Código:
Size = ds_list_size(Lista); //Pega o tamanho da lista
R = irandom(Size); //sorteia um número inteiro entre 0 e Size.
"R" é a variável temporária que nos importa no momento. Ela será usada como um "ID" para saber qual item pegar da lista e qual item remover em seguida.
Código:
Obj = ds_list_find_value(Lista, R); //Pegamos um dos objetos da lista
ds_list_delete(Lista,R); //Tiramos o objeto anteriormente pego da lista.
Pronto, já temos um objeto selecionado! Agora devemos cria-lo.
Código:
instance_create(x,y,Obj);
MAS, fazendo isso, todos os 12 objetos serão criados no mesmo lugar. Para evitar isso, usaremos as duas variáveis temporárias criadas nos dois for.
Usarei como referencia o ponto 0,0 da tela, poranto, o "alinhamento" dela será superior-esquerdo. Você deverá alterar isso depois. Também estou supondo que o tamanho do objeto seja um quadrado de 48 px.
Código:
instance_create(48*i,48*ii,Obj);

E pronto. Temos o sistema que cria objetos em posições aleatórias sem se repetir. Para alterar o ponto de refencia, basta adicionar um "extra" antes do x/y setados acima. Por exemplo, supondo que queira uma "margem" de 100 px em x e 200 px em y:
Código:
instance_create(100+(48*i),200+(48*ii),Obj);
É importante usar os "()" para evitar um calculo errado.

Se tudo está correto (não estou testando, diga-se de passagem...), sua primeira dúvida está resolvida. A segunda pergunta é simples:
Código:
image_speed = 0; //Deixa a sprite estática.
image_index = irandom(5);//sub-imagem entre 0 e 5.

E ufa... Ai está! blz

[Edit]
Rodrigo... Seu danado... bravo
Não vou apagar esse textão todo só porque você respondeu primeiro. scratch

_________________


Engines, tutoriais e projetos? Clique no banner!



Atenção:
Comporte-se, senão você vai levar a cintada do Willy no meio da bunda! bravo

avatar
Willy

Ranking : Nota A
Notas recebidas : C + B + A + A
Data de inscrição : 08/06/2009
Número de Mensagens : 1814
Insígnias de JAM :

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

Prêmios
   : 2
   : 1
   : 1

Ver perfil do usuário http://willy-gmbr.blogspot.com/

Voltar ao Topo Ir em baixo

Re: [Resolvido]Criar Objetos aleatórios em lugares específicos

Mensagem por Dotted Chaos em Ter 17 Fev 2015, 22:23

Apenas um adendo ao que o Willy explanou... também é possível usar "ds_list_shuffle" para embaralhar automaticamente os itens na lista, podendo assim retirar sempre uma mesma posição (o 1°, por exemplo) sem a necessidade de um sorteio customizado.

Dotted Chaos

Data de inscrição : 27/11/2012
Número de Mensagens : 241
Insígnias de JAM :

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

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: [Resolvido]Criar Objetos aleatórios em lugares específicos

Mensagem por Willy em Ter 17 Fev 2015, 22:29

@Dotted Chaos escreveu:Apenas um adendo ao que o Willy explanou... também é possível usar "ds_list_shuffle" para embaralhar automaticamente os itens na lista, podendo assim retirar sempre uma mesma posição (o 1°, por exemplo) sem a necessidade de um sorteio customizado.
Rapaz... Não sabia da existência dessa bendita. scratch
Vlw! blz

_________________


Engines, tutoriais e projetos? Clique no banner!



Atenção:
Comporte-se, senão você vai levar a cintada do Willy no meio da bunda! bravo

avatar
Willy

Ranking : Nota A
Notas recebidas : C + B + A + A
Data de inscrição : 08/06/2009
Número de Mensagens : 1814
Insígnias de JAM :

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

Prêmios
   : 2
   : 1
   : 1

Ver perfil do usuário http://willy-gmbr.blogspot.com/

Voltar ao Topo Ir em baixo

Re: [Resolvido]Criar Objetos aleatórios em lugares específicos

Mensagem por 100%Dedicada em Qua 18 Fev 2015, 09:47

Nossaaaaa MUITO OBRIGADO, estava testando as diferentes formas que vcs postaram aqui e deu certinho.

Estou muito agradecida viu meninos, valeu mesmo. Fiquei até assustada com o tamanho dos códigos (kkkkk) eu estava tentando fazer com códigos bemm mais simples.

Bjs

Dúvida Resolvida.


Obs: Se vcs estão fazendo isto só de cabeça, #peloamordeDEus tem que benzer, kkkk
avatar
100%Dedicada

Data de inscrição : 20/01/2015
Número de Mensagens : 21
Insígnias de JAM :

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

Prêmios
   : 0
   : 0
   : 0

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: [Resolvido]Criar Objetos aleatórios em lugares específicos

Mensagem por Conteúdo patrocinado


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