Entrar
Últimos assuntos
» player não consegue andarpor 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
Página 1 de 1
Rotacionar um grupo de sprites, como uma imagem em bloco.
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.
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.
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.
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- Data de inscrição : 14/01/2011
Reputação : 0
Número de Mensagens : 22
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Rotacionar um grupo de sprites, como uma imagem em bloco.
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- Games Ranking :
Data de inscrição : 11/10/2009
Reputação : 106
Número de Mensagens : 2184
Prêmios :
x 0 x 1 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Rotacionar um grupo de sprites, como uma imagem em bloco.
não, tipo, vou fazer uma gif.
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.
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- Data de inscrição : 14/01/2011
Reputação : 0
Número de Mensagens : 22
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Rotacionar um grupo de sprites, como uma imagem em bloco.
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 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- Games Ranking :
Data de inscrição : 11/10/2009
Reputação : 106
Número de Mensagens : 2184
Prêmios :
x 0 x 1 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Rotacionar um grupo de sprites, como uma imagem em bloco.
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- Data de inscrição : 14/01/2011
Reputação : 0
Número de Mensagens : 22
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Rotacionar um grupo de sprites, como uma imagem em bloco.
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
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:
angulo = 30; // Ângulo até o qual o braço balança para frente e para trás
Draw:
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- Data de inscrição : 26/09/2008
Reputação : 11
Número de Mensagens : 890
Prêmios :
x 0 x 1 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Rotacionar um grupo de sprites, como uma imagem em bloco.
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.
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- Data de inscrição : 14/01/2011
Reputação : 0
Número de Mensagens : 22
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Rotacionar um grupo de sprites, como uma imagem em bloco.
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
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:
// 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
Última edição por Igor KinGamer em Ter 18 Jan 2011, 20:10, editado 2 vez(es)
Igor KinGamer- Data de inscrição : 26/09/2008
Reputação : 11
Número de Mensagens : 890
Prêmios :
x 0 x 1 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Rotacionar um grupo de sprites, como uma imagem em bloco.
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!
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- Data de inscrição : 14/01/2011
Reputação : 0
Número de Mensagens : 22
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Rotacionar um grupo de sprites, como uma imagem em bloco.
Que é possível é, mas é bem complicado. Eu criei ontem de noite um inimigo no meu jogo, veja:
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
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.
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
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.
Re: Rotacionar um grupo de sprites, como uma imagem em bloco.
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- Games Ranking :
Data de inscrição : 11/10/2009
Reputação : 106
Número de Mensagens : 2184
Prêmios :
x 0 x 1 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Rotacionar um grupo de sprites, como uma imagem em bloco.
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
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- Data de inscrição : 14/01/2011
Reputação : 0
Número de Mensagens : 22
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Rotacionar um grupo de sprites, como uma imagem em bloco.
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.
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- Data de inscrição : 26/09/2008
Reputação : 11
Número de Mensagens : 890
Prêmios :
x 0 x 1 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos