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
» Colisões não funcionando
por RastaMaan Sex 26 Abr 2024, 19:49

» Como ajustar velocidade de cada frame da animação no game maker
por pequetux Sex 26 Abr 2024, 16:45

» Preciso de ajuda
por AftonDuGrau Dom 21 Abr 2024, 20:18

» Como faz o evento drawn GUI, não se repetir?
por aminaro Sex 19 Abr 2024, 20:30

» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07

» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45

» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51

» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31

» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11

» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21

» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21


Rotacionar um grupo de sprites, como uma imagem em bloco.

4 participantes

Ir para baixo

Rotacionar um grupo de sprites, como uma imagem em bloco. Empty Rotacionar um grupo de sprites, como uma imagem em bloco.

Mensagem por telles0808 Ter 18 Jan 2011, 13:01

Para ficar mais simples de entender.

Gostaria de saber se é possível compor uma imagem com várias sprites, depois manipular a imagem resultante.

Quero fazer isto para promover animações de sub blocos de sprites, do tipo, braço balançando, movendo, etc, e depois juntá-lo a imagem final que será mostrada ao player, porém, quando precisar, por exemplo, rotacionar a imagem 360º, ele irá rotacionar tudo, sem a necessidade de rotacionar individualmente cada sprite. O problema não é tão simples, não quero colocar uma variável lá no campo rotate, pois o braço tem o center point com offset do centro do corpo do player, ou seja, se fizesse isso, iria virar uma bagunça.

O arquivo do jogo de teste está em anexo.
http://www.megaupload.com/?d=GW5IFEOR

--------------
Resumidamente.
Gostaria de saber se é possível fazer blocos de sprites para poder produzir esse tipo de efeito.

Rotacionar um grupo de sprites, como uma imagem em bloco. Arms002



O ponto azul é o ponto central do corpo, mas alinhei a sprite do braço no ponto vermelho, e o ponto amarelo é o pto central da arma, que gostaria que seguisse como um bloco (conjunto de braço+arma) o braço nas rotações e movimentações.


Última edição por telles0808 em Ter 18 Jan 2011, 14:23, editado 2 vez(es)
telles0808
telles0808

Data de inscrição : 14/01/2011
Reputação : 0
Número de Mensagens : 22
Prêmios : Rotacionar um grupo de sprites, como uma imagem em bloco. 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

Rotacionar um grupo de sprites, como uma imagem em bloco. Empty Re: Rotacionar um grupo de sprites, como uma imagem em bloco.

Mensagem por Markituh Ter 18 Jan 2011, 13:05

Hmm... Você quer rotacionar a arma tipo, em direção ao mouse? Se for, ainda dá pra usar o conceito do draw_sprite_ext, só colocar um point_direction no argumento rot.
Código:
draw_sprite_ext(sprite,subimagem,image_xscale,image_yscale,point_direction(x,y,mouse_x,mouse,y),color,alpha)
Markituh
Markituh

Games Ranking : Sem avaliações

Data de inscrição : 11/10/2009
Reputação : 106
Número de Mensagens : 2184
Prêmios : Rotacionar um grupo de sprites, como uma imagem em bloco. 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

Rotacionar um grupo de sprites, como uma imagem em bloco. Empty Re: Rotacionar um grupo de sprites, como uma imagem em bloco.

Mensagem por telles0808 Ter 18 Jan 2011, 13:22

não, tipo, vou fazer uma gif.

Rotacionar um grupo de sprites, como uma imagem em bloco. Arms002



O ponto azul é o ponto central do corpo, mas alinhei a sprite do braço no ponto vermelho, e o ponto amarelo é o pto central da arma, que gostaria que seguisse como um bloco (conjunto de braço+arma) o braço nas rotações e movimentações. Porque senão será um tormento fazer animações de batalha.
telles0808
telles0808

Data de inscrição : 14/01/2011
Reputação : 0
Número de Mensagens : 22
Prêmios : Rotacionar um grupo de sprites, como uma imagem em bloco. 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

Rotacionar um grupo de sprites, como uma imagem em bloco. Empty Re: Rotacionar um grupo de sprites, como uma imagem em bloco.

Mensagem por Markituh Ter 18 Jan 2011, 13:29

Hmmm... Você pode tipo, usar variáveis que armazenam cada parte. Como vi numa dúvida sua anterior, você está usando várias variáveis para controlar cada membro do player, o que é um sistema que até eu não sei fazer Happy Então só desenhar tomando base num membro já existente, como o corpo:
Código:
draw_sprite(braço,0,corpo_x,corpo_y+10
draw_sprite(arma,0,corpo_x+5,corpo_y+10)
Markituh
Markituh

Games Ranking : Sem avaliações

Data de inscrição : 11/10/2009
Reputação : 106
Número de Mensagens : 2184
Prêmios : Rotacionar um grupo de sprites, como uma imagem em bloco. 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

Rotacionar um grupo de sprites, como uma imagem em bloco. Empty Re: Rotacionar um grupo de sprites, como uma imagem em bloco.

Mensagem por telles0808 Ter 18 Jan 2011, 13:34

o desenho na verdade está pronto, agora estou na parte de animação, por exemplo, preparei várias poses de ataque, todas elas envolvem rotacionar o braço e mover a arma de forma ancorada ao braço, mas fazer isso não é tão simples, quer ver, por exemplo, se eu mover o braço pra esquerda e rotacionar ele, a arma precisará subir e ir pra esquerda, além de rotacionar também, acaba que o tranjeto é uma tangente ao ângulo, mas se eu rotacionar o braço 360º, a arma precisará fazer um percurso circular, rotacionando ao mesmo tempo, ai começa a complicar demais, pois se além de eu rotacionar 360º e mover para a direita, por exemplo, a arma precisará fazer um percurso circular oval e rotacionar com velocidades diferentes, ou seja, um pesadelo.
telles0808
telles0808

Data de inscrição : 14/01/2011
Reputação : 0
Número de Mensagens : 22
Prêmios : Rotacionar um grupo de sprites, como uma imagem em bloco. 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

Rotacionar um grupo de sprites, como uma imagem em bloco. Empty Re: Rotacionar um grupo de sprites, como uma imagem em bloco.

Mensagem por Igor KinGamer Ter 18 Jan 2011, 13:37

telles0808 escreveu:Agora estou animando esse personagem por script, e, queria rotacionar esse braço, mas o script ficou enorme, já que ao rotacionar ele, eu preciso rotacionar a arma e mover a arma fazendo a hipotenusa como percurso, ou seja, um saco.

Eu já fiz esse tipo de coisa, não fica um script enorme, nem ao menos grande Suspect

Suponhamos que você tenha o sprite do braço de largura 64 pixels e altura 16 pixels (o braço virado para a direta), origin (8, 8­), e o sprite da arma de tamanho qualquer que vá ser posicionado no ponto (56, 8­) do braço (também virada para a direita no sprite).

Eis os códigos:

Create:
balanco = 0; // Variável utilizada para calcular direção do braço
angulo = 30; // Ângulo até o qual o braço balança para frente e para trás

Draw:
braco_x = mouse_x; // Aqui você colocaria
braco_y = mouse_y; // a posição do ombro

balanco += 2*pi/(2*room_speed);
// 2*pi equivale a um balanço completo (para frente e para trás). Multiplique pela quantidade de balanços que você quer por step. (Portanto, dividindo por 2*room_speed, você tem um balanço por 2 segundos).
direction = 270+sin(balanco)*angulo;
// Define a direção (para baixo (270) mais seno da variável balanço multiplicado pelo ângulo do balanço.
draw_sprite_ext(spr_Braco, 0, braco_x, braco_y, 1, 1, direction, c_white, 1);

arma_x = braco_x+cos(direction*pi/180)*48; // 48 é o tamanho do braço menos a origin e deixando 8 pixels no final.
arma_y = braco_y-sin(direction*pi/180)*48;
draw_sprite_ext(spr_Arma, 0, arma_x, arma_y, 1, 1, direction, c_white, 1);


Se quisesse ainda fazer rotação do braço e antebraço, era só seguir a mesma lógica.
Igor KinGamer
Igor KinGamer

Data de inscrição : 26/09/2008
Reputação : 11
Número de Mensagens : 890
Prêmios : Rotacionar um grupo de sprites, como uma imagem em bloco. 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

Rotacionar um grupo de sprites, como uma imagem em bloco. Empty Re: Rotacionar um grupo de sprites, como uma imagem em bloco.

Mensagem por telles0808 Ter 18 Jan 2011, 13:59

valeu igor, ainda não é bem isso que procuro, na verdade sei o que quero, só não sei fazer em GML.

Se eu fosse seguir tua lógica, só no stand_by eu teria quase 50 linhas de script, fora andando, ataque1, 2, 3, 4, 5, etc, salto, queda, aterrissagem, correndo, salto correndo, etc. Pois há dois braços, e o segundo terá arma em alguns momentos também.

Meu intuito é fazer tudo igual foi feito no Flash, em módulos, lá eu desenhei o braço em um bloco, a arma dentro de um sub_bloco e o grande bloco braço + arma foi colocado no bloco body, então se eu quiser girar o corpo inteiro, basta fazer no action script a rotação e pronto, ele se encarrega de girar todos os sub_blocos relativamente, como se o bloco body fosse uma imagem plana, não modular. Aí se eu quero simplesmente girar o braço e fazer animações nele, independentemente do corpo, eu vou lá dentro do bloco do braço e faço, depois no bloco body eu ainda fiz outra animação, que foi pra cima e para baixo, sendo que dentro do bloco do braço a animação era uma leve rotação.

Pensando em módulos eu fiz a animação do braço para ataque1, que era braço dobrado, medianamente dobrado e esticado, posicionei a arma em cada um desses quadros no ponto amarelo e depois sai do bloco de braço_atk1 e fui para o body (que contem o tronco, cabeça, braços e pernas) e modifiquei a imagem resultante do bloco braço_atk1, rotacionando ele e dando um stretch leve para dar efeito de musculatura.

No ataque2, utilizei o mesmo bloco do braço_atk1, mas no body eu fiz outros efeitos de stretch e rotação, se você olhar as animações, não dirá que usam os mesmos gráficos, apesar de usarem, e nisso economizei toneladas de scripts de rotações individuais, offsets, posicionamentos, etc, pois não se trata só do braço, mas de tudo junto trabalhando em módulos.
telles0808
telles0808

Data de inscrição : 14/01/2011
Reputação : 0
Número de Mensagens : 22
Prêmios : Rotacionar um grupo de sprites, como uma imagem em bloco. 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

Rotacionar um grupo de sprites, como uma imagem em bloco. Empty Re: Rotacionar um grupo de sprites, como uma imagem em bloco.

Mensagem por Igor KinGamer Ter 18 Jan 2011, 19:45

Eu não entendo nada de Flash como nunca usei-o, mas acho que entendi a ideia da coisa.
Os únicos jeitos que me vieram à cabeça são:

Usar variáveis para definir a posição (x, y) do corpo, do braço em relação ao corpo e da mão em relação ao braço e a rotação desses e, na hora de desenhar, usar aquela lógica que mostrei (usando as variáveis de posição e rotação do corpo e do braço na hora de desenhar este, e as variáveis do corpo, do braço e da arma na hora de desenhar esta)
Deste modo, uma alteração no ângulo do braço mecheria com a arma por a variável dele estar sendo usada no draw dela, sem afetar o corpo, e não impediria a arma de girar sozinha.
Para fazer aquela coisa de mover para cima e para baixo, seria só usar a variável de deslocamento igualmente no braço e arma.
Quando você quisesse mudar a animação (ataque, por exemplo), teria apenas que mudar o ângulo do braço e a posição da arma em relação a ele.

O código da arma ficaria algo assim:

draw_sprite_ext(WEAPONS, 0, corpo_x+cos(corpo_angulo)*braco_x+cos(braco_angulo)*arma_x, corpo_y-sin(corpo_angulo)*braco_y-sin(braco_angulo)*arma_y, 1, 1, arma_angulo, c_white, 1);
// Er... Esse código está bem errado, não pensei direto antes de fazer... Mas a ideia e usar todas as variáveis para desenhar...
Estou refazendo e já posto.


Um detalhe é que você teria que deixar os códigos todos prontos, mesmo nos momentos em que não houvesse arma no braço de trás.

-/-

O outro jeito seria fazer cada parte do corpo um objeto diferente. Então, quando você quisesse que um objeto controlasse os outros, você faria-os "filhos" dele (não estou falando da opção "parent"), e usaria em todos os objetos um script que alteraria automaticamente a posição de todos os objetos filhos do objeto (um script só para todos).
Apesar de a quantidade de objetos ser um ponto negativo, isso te daria mais liberdade, se quisesse, poderia até fazer um braço filho de outro braço (por mais inútil que isso seja), sem ter que criar variáveis específicas (como no outro modo que eu sugeri).


Não sei se um desses jeitos vai servir para você, espero que sim. Se não... bem, eu tentei.


PS.: Você que fez todos aqueles sprites? Estão muito bons Smile


Última edição por Igor KinGamer em Ter 18 Jan 2011, 20:10, editado 2 vez(es)
Igor KinGamer
Igor KinGamer

Data de inscrição : 26/09/2008
Reputação : 11
Número de Mensagens : 890
Prêmios : Rotacionar um grupo de sprites, como uma imagem em bloco. 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

Rotacionar um grupo de sprites, como uma imagem em bloco. Empty Re: Rotacionar um grupo de sprites, como uma imagem em bloco.

Mensagem por telles0808 Ter 18 Jan 2011, 19:52

sim, fiz.

Mas bah, então ficou muito mais dificil usar o GM para fazer esse jogo.

Acho que vou continuar no flash e aprender action script 3, pq o dois ficou muito pesado para fazer jogos.

Valeu por tudo!
telles0808
telles0808

Data de inscrição : 14/01/2011
Reputação : 0
Número de Mensagens : 22
Prêmios : Rotacionar um grupo de sprites, como uma imagem em bloco. 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

Rotacionar um grupo de sprites, como uma imagem em bloco. Empty Re: Rotacionar um grupo de sprites, como uma imagem em bloco.

Mensagem por Anderson3d Ter 18 Jan 2011, 20:12

Que é possível é, mas é bem complicado. Eu criei ontem de noite um inimigo no meu jogo, veja:
Rotacionar um grupo de sprites, como uma imagem em bloco. Imagem5tv
Existe um corpo que é uma espécie de planador e existe um braço mecânico que é uma metralhadora que muda de ângulo de acordo com a posição do player. o planador só faz subir e descer levemente e ir pros lados e mesmo assim deu um trabalho enorme.
Basicamente na colisão do braço mecânico com o corpo eu coloquei
Código:

x=other.x+35
y=other.y
Ou seja eu centrei o eixo do braço na posição que eu quiz no corpo.
Caso o corpo mude o ângulo vc tem que mudar o angulo do braço tmb (no seu caso).
Mas lembrando, quando o corpo muda de lado o braço tmb muda, o xscale tmb (-1 ou 1).
No seu caso controlar todos os membros e a cabeça junto a um corpo seria osso, mas é possível. Se eu tiver tempo posso "tentar" criar uma engine disso. É bem interessante.
Anderson3d
Anderson3d

Games Ranking : Nota A

Notas recebidas : A - A
Data de inscrição : 15/02/2009
Reputação : 9
Número de Mensagens : 1479
Prêmios : Rotacionar um grupo de sprites, como uma imagem em bloco. Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 1

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

http://www.indiegamebr.com

Ir para o topo Ir para baixo

Rotacionar um grupo de sprites, como uma imagem em bloco. Empty Re: Rotacionar um grupo de sprites, como uma imagem em bloco.

Mensagem por Markituh Ter 18 Jan 2011, 20:21

Tipo, você fez isso beleza no Action Script? Manda o código(em Action Script) que a talvez dê para fazer uma conversão.
Markituh
Markituh

Games Ranking : Sem avaliações

Data de inscrição : 11/10/2009
Reputação : 106
Número de Mensagens : 2184
Prêmios : Rotacionar um grupo de sprites, como uma imagem em bloco. 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

Rotacionar um grupo de sprites, como uma imagem em bloco. Empty Re: Rotacionar um grupo de sprites, como uma imagem em bloco.

Mensagem por telles0808 Ter 18 Jan 2011, 20:34

em action script é ridiculo de fácil, a posição stand_by eu faço a checagem do das teclas direcionais e chamo a frame1 de uma coleção de centenas de frames, cada frames tem nested frames que aí sim contem as animações, essa parte é em flash, ou seja, quando eu chamo o frame 1 ele chama um arquivo em flash que contem a animação em flash da posição stand_by. manjou?

então não me preocupei em desenhar isso através de script, pois o flash fez isso por mim, só me preocupei em chamar a pose certa na hora certa.

Agora posso te passar uma XML do arquivo da pose stand_by por exemplo, nela contem todos os dados do desenho (desenhei no flash mesmo), e é supostamente possível redesenhar usando o arquivo xlf (formato descomprimido do flash CS5).

http://www.megaupload.com/?d=JAVW87VB

telles0808
telles0808

Data de inscrição : 14/01/2011
Reputação : 0
Número de Mensagens : 22
Prêmios : Rotacionar um grupo de sprites, como uma imagem em bloco. 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

Rotacionar um grupo de sprites, como uma imagem em bloco. Empty Re: Rotacionar um grupo de sprites, como uma imagem em bloco.

Mensagem por Igor KinGamer Ter 18 Jan 2011, 20:49

Peraí, antes de desistir de fazer no GM...
Eu to fazendo aqui uma engine, vou postar (talvez amanhã) pra você ver se ficou mais ou menos do jeito que você pretendia e se valerá a pena fazer no GM. Se não valer mesmo, você volta pro flash.

De qualquer jeito, GM ou flash, boa sorte.

[edit]

Terminei a engine. Lá pelas 21:30h enviar-ta-ei por MP.
Igor KinGamer
Igor KinGamer

Data de inscrição : 26/09/2008
Reputação : 11
Número de Mensagens : 890
Prêmios : Rotacionar um grupo de sprites, como uma imagem em bloco. 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

Rotacionar um grupo de sprites, como uma imagem em bloco. Empty Re: Rotacionar um grupo de sprites, como uma imagem em bloco.

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