Girando em torno

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

Girando em torno

Mensagem por chicoweb 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!!!

chicoweb

Ranking : Nota C
Número de Mensagens : 666
Idade : 40
Data de inscrição : 15/05/2012
Notas recebidas : B+C
Reputação : 49
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Girando em torno

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

___________


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


Willy

Ranking : Nota A
Número de Mensagens : 1812
Idade : 23
Data de inscrição : 08/06/2009
Notas recebidas : C + B + A + A
Reputação : 245
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 1

http://willy-gmbr.blogspot.com/

Voltar ao Topo Ir em baixo

Re: Girando em torno

Mensagem por fredcobain 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;

fredcobain

Ranking : Sem avaliações
Número de Mensagens : 691
Idade : 35
Data de inscrição : 14/04/2011
Reputação : 162
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Girando em torno

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

___________


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


Willy

Ranking : Nota A
Número de Mensagens : 1812
Idade : 23
Data de inscrição : 08/06/2009
Notas recebidas : C + B + A + A
Reputação : 245
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 1

http://willy-gmbr.blogspot.com/

Voltar ao Topo Ir em baixo

Re: Girando em torno

Mensagem por fredcobain 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 ?

fredcobain

Ranking : Sem avaliações
Número de Mensagens : 691
Idade : 35
Data de inscrição : 14/04/2011
Reputação : 162
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Girando em torno

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

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: Girando em torno

Mensagem por chicoweb 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)

chicoweb

Ranking : Nota C
Número de Mensagens : 666
Idade : 40
Data de inscrição : 15/05/2012
Notas recebidas : B+C
Reputação : 49
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Girando em torno

Mensagem por saim em Sex 06 Dez 2013, 12:29

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

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: Girando em torno

Mensagem por Willy em Sex 06 Dez 2013, 12:46

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.

___________


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


Willy

Ranking : Nota A
Número de Mensagens : 1812
Idade : 23
Data de inscrição : 08/06/2009
Notas recebidas : C + B + A + A
Reputação : 245
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 1
   : 1

http://willy-gmbr.blogspot.com/

Voltar ao Topo Ir em baixo

Re: Girando em torno

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

chicoweb

Ranking : Nota C
Número de Mensagens : 666
Idade : 40
Data de inscrição : 15/05/2012
Notas recebidas : B+C
Reputação : 49
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Girando em torno

Mensagem por Conteúdo patrocinado Hoje à(s) 14:01


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