Conectar-se
Quem está conectado
20 usuários online :: Nenhum usuário registrado, Nenhum Invisível e 20 Visitantes

Nenhum

Ver toda a lista


Compartilhe
Ver o tópico anteriorIr em baixoVer o tópico seguinte
avatar
Ranking : Nota C
Notas recebidas : B+C
Data de inscrição : 15/05/2012
Número de Mensagens : 666
Insígnias de JAM :

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

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

Girando em torno

em Qui 05 Dez 2013, 23:01
Galera to colocando a engine aqui,
Se trata do seguinte: tem tres morcegos e eles vao girar em torno do bichinho branco.
So que com o código que to usando, ele sobrepoe cada morcego e eles giram no mesmo lugar.
Queria que eles girassem em locais diferentes, aparecendo sem se um em cima do outro, por favor.


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

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

Prêmios
   : 2
   : 1
   : 1
Ver perfil do usuáriohttp://willy-gmbr.blogspot.com/

Re: Girando em torno

em Qui 05 Dez 2013, 23:37
De acordo com seu código, a variável que especifica onde os morcegos devem ficar é a direção (direction). Em nenhum momento você definiu qual é a direction dos morcegos, logo, todos iniciam na mesma direção, ou seja, 0. Tudo o que você tem que fazer, é definir uma direção para cada morcego. Faça um teste simples... No create do morcego, coloque:
Código:
direction = irandom(360);
Com isso, seu problema está resolvido em parte.

Ainda sim, haverá a possibilidade de seus morcegos (por mera probabilidade) ficarem sobrepostos.
Então, adaptei sua engine e tornei o objeto controle, de fato, um objeto controle. É a partir dele que serão criados os morcegos e é ele que vai definir a direção dos morcegos, deixando tudo simétrico e garantindo que não ficarão sobrepostos independente da quantidade de morcegos.

Sem mais, aqui está:Download blz
avatar
Ranking : Sem avaliações
Data de inscrição : 14/04/2011
Número de Mensagens : 691
Insígnias de JAM :

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

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

Re: Girando em torno

em Qui 05 Dez 2013, 23:57
O que vc pretende é um movimento circular em torno de um objeto.

O código abaixo certamente resolve:
Evento CREATE:

Código:
raio = 100; //raio do giro. Alterne esse valor entre os objetos que vão ficar circulando para eles nao se sobreporem
xc = x;
yc = y;
angulo = 0;
Agora no Evento Step:

Código:
x = xc + lengthdir_x(raio, angulo);
y = yc + lengthdir_y(raio, angulo);
angulo += 1; //roda no sentido horário... alterne esse valor entre os objetos para variar a velocidade de cada um... valores negativos vão fazer mudar o sentido
if (angulo > 360) angulo = 0;


O código acima eu aprendi com o Vinians.

Agora se quiser algo mais nerd:
Código:
x = xc + cos(degtorad(angulo))*raio;
y = yc - sin(degtorad(angulo))*raio;
angulo += 1; //roda no sentido horário
if (angulo > 360) angulo = 0;
avatar
Ranking : Nota A
Notas recebidas : C + B + A + A
Data de inscrição : 08/06/2009
Número de Mensagens : 1846
Insígnias de JAM :

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

Prêmios
   : 2
   : 1
   : 1
Ver perfil do usuáriohttp://willy-gmbr.blogspot.com/

Re: Girando em torno

em Sex 06 Dez 2013, 00:08
Fredcobain, o problema dele não era com o movimento, mas sim, o fato dos objetos estarem ocupando o mesmo espaço. Tanto é que no código dele, ele usou a "forma nerd". Veja a engine que ele deixou. investigador 

E só pra constar, não é necessário zerar o ângulo quando passar de 360. Razz
avatar
Ranking : Sem avaliações
Data de inscrição : 14/04/2011
Número de Mensagens : 691
Insígnias de JAM :

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

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

Re: Girando em torno

em Sex 06 Dez 2013, 00:13
É verdade!! Kkkkkkk
Isso é que dá nao baixar as engines...

Mass.... não seria só caso então dele variar o raio e a velocidade de acréscimo do ângulo para cada instância ?
avatar
Ranking : Nota B
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Número de Mensagens : 2964
Insígnias de JAM :

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

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

Re: Girando em torno

em Sex 06 Dez 2013, 09:43
A solução do Willy (no primeiro post dele) me parece a mais adequada, quando se fala em objetos rodando em torno do outro. Uma simetria se faz necessária, nesses casos, e a simetria só é alcançada quando um único objeto controla a posição inicial dos demais. Daí, tanto faz se ele é quem vai controlar o resto das posições ou se cada instância toma conta de si.
Particularmente, eu gosto de usar um único objeto e controlar as instâncias a partir dele, mas isso é gosto pessoal.

MAS estamos falando de morcegos. Morcegos têm um movimento errático. De fato, colocar velocidades angulares aleatórias, raios de giro que aumentam e diminuem (senoidalmente), poxa, até variar a velocidade angular (senoidalmente também) e usar umas 5 ou mais instâncias de morcegos, batendo as asas, pode dar um efeito bem mais morcegástico do que usar simetria.

Como o fredcobain, eu não baixei a engine. Suponho que a vista seja top-down. Se não for, pode ser legal, também, alterar o depth dos morcegos a cada vez que ele chegue num extremo de trajetória. Mas isso é se não for top-down.
avatar
Ranking : Nota C
Notas recebidas : B+C
Data de inscrição : 15/05/2012
Número de Mensagens : 666
Insígnias de JAM :

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

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

Re: Girando em torno

em Sex 06 Dez 2013, 11:01
Willy escreveu:De acordo com seu código, a variável que especifica onde os morcegos devem ficar é a direção (direction). Em nenhum momento você definiu qual é a direction dos morcegos, logo, todos iniciam na mesma direção, ou seja, 0. Tudo o que você tem que fazer, é definir uma direção para cada morcego. Faça um teste simples... No create do morcego, coloque:
Código:
direction = irandom(360);
Com isso, seu problema está resolvido em parte.

Ainda sim, haverá a possibilidade de seus morcegos (por mera probabilidade) ficarem sobrepostos.
Então, adaptei sua engine e tornei o objeto controle, de fato, um objeto controle. É a partir dele que serão criados os morcegos e é ele que vai definir a direção dos morcegos, deixando tudo simétrico e garantindo que não ficarão sobrepostos independente da quantidade de morcegos.

Sem mais, aqui está:Download blz
Galera valeu ai pela ajuda, os códigos de vcs ficaram show, mas como eu fiz o "Método Nerd", o código do Willy se encaixou melhor na engine.
Só que o código dele gerava aleatoriamente a posição, fiz um ajuste para ordenar os morcegos direitinho:

Código:
// assim SEPARA ELES - o 100 significa o quanto separa
x = object1.x + distancia * cos(degtorad(direction + (ind*100)));
y = object1.y + distancia * sin(degtorad(direction + (ind*100)));
Esse ind e uma variavel que criei no obj morcego, tipo ordem dele, indo de 1 ate 10.
Para isso tive que criar as instancia via código pelo obj_game_control:

Código:
       qatras = 10;
        for (i=0 ; i<=qatras ; i+=1){    
            obj[icont] = instance_create(0,0,object2);
            obj[icont].ind = icont;
        }
DOWNLOAD (MUDEI PARA GMS)
avatar
Ranking : Nota B
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Número de Mensagens : 2964
Insígnias de JAM :

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

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

Re: Girando em torno

em Sex 06 Dez 2013, 12:29
Reputação da mensagem: 100% (1 votos)
2 coisas:

no segundo código, substitua "icont" por "i" ou vice-versa. Senão sua array só vai ter um elemento. (onde vc definiu o valor de "icont"?)

se quiser separar os morcegos uniformemente, pode definir o ângulo de cada um como um divisor de 360:
Código:
// assim SEPARA ELES - o dAng significa o quanto separa
var dAng; dAng := 360 / qatras;
x = object1.x + distancia * cos(degtorad(direction + (ind*dAng)));
y = object1.y + distancia * sin(degtorad(direction + (ind*dAng)));
ou, na hora de criar mesmo:
Código:
       qatras = 10;
var dAng; dAng := 360 / qatras;
        for (i=0 ; i<=qatras ; i+=1){    
            obj[i] = instance_create(x + distancia * cos(degtorad(direction + (i*dAng))), y + distancia * sin(degtorad(direction + (ind*dAng))), object2);
            obj[i].ind = icont;
        }
avatar
Ranking : Nota A
Notas recebidas : C + B + A + A
Data de inscrição : 08/06/2009
Número de Mensagens : 1846
Insígnias de JAM :

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

Prêmios
   : 2
   : 1
   : 1
Ver perfil do usuáriohttp://willy-gmbr.blogspot.com/

Re: Girando em torno

em Sex 06 Dez 2013, 12:46
Reputação da mensagem: 100% (1 votos)
Willy escreveu:Então, adaptei sua engine e tornei o objeto controle, de fato, um objeto controle. É a partir dele que serão criados os morcegos e é ele que vai definir a direção dos morcegos, deixando tudo simétrico e garantindo que não ficarão sobrepostos independente da quantidade de morcegos.
chicoweb escreveu:Só que o código dele gerava aleatoriamente a posição, fiz um ajuste para ordenar os morcegos direitinho:
Acredito que você não baixou minha engine... Nela os morcegos estão sendo criados da mesma forma que o saim fez, ou seja, pegando 360 e dividindo pela quantidade de morcegos. Depois, em um laço for, criando e definindo um direction para os morcegos de acordo com o resultado da divisão.
avatar
Ranking : Nota C
Notas recebidas : B+C
Data de inscrição : 15/05/2012
Número de Mensagens : 666
Insígnias de JAM :

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

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

Re: Girando em torno

em Sex 06 Dez 2013, 17:01
Tá certo sim galera.

Melhorou ainda mais agora tá perfeita, o segredo eh dividir o 360 pela quantidade mesmo. o meu ate deu certo mas foi meio um chutometro kkkk.

Obrigado ae vcs pela ajuda.
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