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


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


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