if(life <= 0){
sprite_index= spr_player_morto;
image_index= image_index - image_number - 1;
vel= 0;
velj= 0;
}
deu certo mas o player fica em um loop repetindo a imagem infinitamente.
obs: deve ser um bagulho tao simples de resolver e eu estou aqui me matando kkkk, obrigado pelo seu tempo :)
if(alarm[0] <= 0) {
if life > 1 { <--- eu tirei essa parte do codigo pois o player nao tava perdendo vida mas adicionei o resto.
life -= 1;
alarm[0]= 30;
como dito acima eu adicionei o resto, funcionou porem o player ainda morto continua andando (mesmo com a animaçao de morte te terminado)
toda vez que adiciono o vel/velj acontece algo ou a animaçao de morte trava ou ela acontece mas o player como dito antes anda mesmo morto sendo que era pra ele ficar parado :(.
Obrigado por visitar a The Game Makers Brasil Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais. |
animaçao de morte do player Tópico resolvido
- xxZ3USSSxx
- Novato
- Reações: 2
- Mensagens: 12
animaçao de morte do player
Ola ultimamente tenho tendo alguns problemas em criar uma forma de colocar o player no sprite dele morto, queria a ajuda de vcs para resolver esse pequeno problema. Quero que alguem me ajude de alguma forma nisso ou criando um codigo ou me dando um codigo ja existente obg. segue o codigo abaixo:
create:
hspd= 0;
vspd= 0;
vel= 4;
velj= 7;
grv= 0.3;
chao= 0;
estado= "parado";
life_max= 5;
life= 1;
alarm[0]= 0;
step:
var _right, _left, _jump, _atk;
_right= keyboard_check(ord("D"));
_left= keyboard_check(ord("A"));
_jump= keyboard_check_pressed(ord("W"));
_atk= keyboard_check_pressed(ord("J"));
hspd= (_right - _left) * vel;
chao= place_meeting(x,y + 1,obj_wall);
if(!chao){
vspd += grv;
}
switch(estado){
case "parado":
{
sprite_index= spr_player;
if(hspd != 0){
estado= "movendo";
image_xscale= sign(hspd);
}else if(_jump){
vspd= -velj;
estado= "pulando";
}else if(_atk){
estado= "ataque";
image_index= 0;
}
break;
}
case "movendo":
{
sprite_index= spr_player_wlk;
if(hspd = 0){
estado= "parado";
}else if(_jump){
vspd= -velj;
estado= "pulando";
}else if(_atk){
estado= "ataque";
image_index= 0;
}
break;
}
case "pulando":
{
if(vspd > 0){
sprite_index= spr_player_fall;
}else if(vspd < 0){
sprite_index= spr_player_jump;
}
if(chao){
estado= "parado";
}
break;
}
case "ataque":
{
sprite_index= spr_player_atk;
if(image_index > 5){
if(!instance_exists(obj_dano)){
instance_create_layer(x + (25 * image_xscale),y - 12,"Instances",obj_dano);
}
}
if(image_index > image_number - 1){
estado= "parado";
}
hspd= 0;
break;
}
}
if(alarm[0] > 0){
sprite_index= spr_player_hit;
}else{
estado= estado;
}
if(keyboard_check(vk_enter)){
game_restart();
}
endstep:
repeat(abs(hspd)){
if(!place_meeting(x + sign(hspd),y,obj_wall)){
x += sign(hspd);
}else{
hspd= 0;
break;
}
}
repeat(abs(vspd)){
if(!place_meeting(x,y + sign(vspd),obj_wall)){
y += sign(vspd);
}else{
vspd= 0;
break;
}
}
if(life <= 0){
//tentava criar o codigo aqui mas o player ou travava na primeira imagem ou ele iniciava rapido demais ja tentei diminuir a velocidade da animçao mas nao consegui :(
vel= 0;
velj= 0;
}
//nao tem nada no alarme!
colisao com o obj_inimigo:
if(alarm[0] <= 0){
life -= 1;
alarm[0]= 30;
}
create:
hspd= 0;
vspd= 0;
vel= 4;
velj= 7;
grv= 0.3;
chao= 0;
estado= "parado";
life_max= 5;
life= 1;
alarm[0]= 0;
step:
var _right, _left, _jump, _atk;
_right= keyboard_check(ord("D"));
_left= keyboard_check(ord("A"));
_jump= keyboard_check_pressed(ord("W"));
_atk= keyboard_check_pressed(ord("J"));
hspd= (_right - _left) * vel;
chao= place_meeting(x,y + 1,obj_wall);
if(!chao){
vspd += grv;
}
switch(estado){
case "parado":
{
sprite_index= spr_player;
if(hspd != 0){
estado= "movendo";
image_xscale= sign(hspd);
}else if(_jump){
vspd= -velj;
estado= "pulando";
}else if(_atk){
estado= "ataque";
image_index= 0;
}
break;
}
case "movendo":
{
sprite_index= spr_player_wlk;
if(hspd = 0){
estado= "parado";
}else if(_jump){
vspd= -velj;
estado= "pulando";
}else if(_atk){
estado= "ataque";
image_index= 0;
}
break;
}
case "pulando":
{
if(vspd > 0){
sprite_index= spr_player_fall;
}else if(vspd < 0){
sprite_index= spr_player_jump;
}
if(chao){
estado= "parado";
}
break;
}
case "ataque":
{
sprite_index= spr_player_atk;
if(image_index > 5){
if(!instance_exists(obj_dano)){
instance_create_layer(x + (25 * image_xscale),y - 12,"Instances",obj_dano);
}
}
if(image_index > image_number - 1){
estado= "parado";
}
hspd= 0;
break;
}
}
if(alarm[0] > 0){
sprite_index= spr_player_hit;
}else{
estado= estado;
}
if(keyboard_check(vk_enter)){
game_restart();
}
endstep:
repeat(abs(hspd)){
if(!place_meeting(x + sign(hspd),y,obj_wall)){
x += sign(hspd);
}else{
hspd= 0;
break;
}
}
repeat(abs(vspd)){
if(!place_meeting(x,y + sign(vspd),obj_wall)){
y += sign(vspd);
}else{
vspd= 0;
break;
}
}
if(life <= 0){
//tentava criar o codigo aqui mas o player ou travava na primeira imagem ou ele iniciava rapido demais ja tentei diminuir a velocidade da animçao mas nao consegui :(
vel= 0;
velj= 0;
}
//nao tem nada no alarme!
colisao com o obj_inimigo:
if(alarm[0] <= 0){
life -= 1;
alarm[0]= 30;
}
Editado pela última vez por xxZ3USSSxx em Qui Mai 23, 2024 8:25 am, em um total de 1 vez.
- ValdeciVieira
- Moderador
- Reações: 8
- Mensagens: 122
- Localização: Rio de Janeiro, Brasil
Re: animaçao de morte do player
Você usou sprite_index pra mudar pra animação de morte? e tentou mudar velocidade de animação do sprite?
Poste o código que esteve usando.
Poste o código que esteve usando.
- xxZ3USSSxx
- Novato
- Reações: 2
- Mensagens: 12
Re: animaçao de morte do player
Entao esse é o codigo eu ate editei pois escrevi errado no step, mas sim eu usei sprite_index e tentei mudar a velocidade da animaçao com o image_speed mas nao deu certo :(ValdeciVieira escreveu: ↑Qua Mai 22, 2024 5:33 pm Você usou sprite_index pra mudar pra animação de morte? e tentou mudar velocidade de animação do sprite?
Poste o código que esteve usando.
- ValdeciVieira
- Moderador
- Reações: 8
- Mensagens: 122
- Localização: Rio de Janeiro, Brasil
Re: animaçao de morte do player
Desculpe a demora em responder, houve muitas quedas de energia hoje.
Antigamente a única forma de alterar a velocidade de animações das sprites era definindo manualmente e em tempo real a image_speed, mas no GMS2 eles mudaram isso, agora cada sprite tem a sua velocidade base (escolhida ao editar o asset) e o image_speed servirá apenas como um multiplicador dessa velocidade, sendo assim, definindo image_speed pra 2 ocasiona nas animações de todas as sprites 2x mais rápidas.
No entanto, também é possível alterar a velocidade base de cada sprite individualmente com sprite_set_speed durante a execução do jogo.
Antigamente a única forma de alterar a velocidade de animações das sprites era definindo manualmente e em tempo real a image_speed, mas no GMS2 eles mudaram isso, agora cada sprite tem a sua velocidade base (escolhida ao editar o asset) e o image_speed servirá apenas como um multiplicador dessa velocidade, sendo assim, definindo image_speed pra 2 ocasiona nas animações de todas as sprites 2x mais rápidas.
No entanto, também é possível alterar a velocidade base de cada sprite individualmente com sprite_set_speed durante a execução do jogo.
- xxZ3USSSxx
- Novato
- Reações: 2
- Mensagens: 12
Re: animaçao de morte do player
Nao tem problema pela demora, entao... eu li oq vc escreveu e vi algumas funçoes mas mesmo assim nao deu certo, eu escrevi isso aqui no codigo do endstep:ValdeciVieira escreveu: ↑Qui Mai 23, 2024 2:38 pm Desculpe a demora em responder, houve muitas quedas de energia hoje.
Antigamente a única forma de alterar a velocidade de animações das sprites era definindo manualmente e em tempo real a image_speed, mas no GMS2 eles mudaram isso, agora cada sprite tem a sua velocidade base (escolhida ao editar o asset) e o image_speed servirá apenas como um multiplicador dessa velocidade, sendo assim, definindo image_speed pra 2 ocasiona nas animações de todas as sprites 2x mais rápidas.
No entanto, também é possível alterar a velocidade base de cada sprite individualmente com sprite_set_speed durante a execução do jogo.
if(life <= 0){
sprite_index= spr_player_morto;
image_index= image_index - image_number - 1;
vel= 0;
velj= 0;
}
deu certo mas o player fica em um loop repetindo a imagem infinitamente.
obs: deve ser um bagulho tao simples de resolver e eu estou aqui me matando kkkk, obrigado pelo seu tempo :)
- ValdeciVieira
- Moderador
- Reações: 8
- Mensagens: 122
- Localização: Rio de Janeiro, Brasil
Re: animaçao de morte do player
Ah, pensei que o problema fosse que a animação estive rápida demais mas você queria parar a animação quando chegasse ao final dela?
Sendo assim tente isso:
Sendo assim tente isso:
Código: Selecionar todos
if(life <= 0) and image_speed != 0{
sprite_index= spr_player_morto;
if image_index >= image_number - 1 {
image_speed = 0
image_index = image_number - 1
}
vel= 0;
velj= 0;
}
- xxZ3USSSxx
- Novato
- Reações: 2
- Mensagens: 12
Re: animaçao de morte do player
bem sim a imagem tava bem rapida e eu queria que a animaçao parasse no final, eu tentei seu codigo mas o player ainda continua repetindo a imagem dele morrendo porem a velocidade ta bem menor.ValdeciVieira escreveu: ↑Qui Mai 23, 2024 3:17 pm Ah, pensei que o problema fosse que a animação estive rápida demais mas você queria parar a animação quando chegasse ao final dela?
Sendo assim tente isso:Código: Selecionar todos
if(life <= 0) and image_speed != 0{ sprite_index= spr_player_morto; if image_index >= image_number - 1 { image_speed = 0 image_index = image_number - 1 } vel= 0; velj= 0; }
- ValdeciVieira
- Moderador
- Reações: 8
- Mensagens: 122
- Localização: Rio de Janeiro, Brasil
Re: animaçao de morte do player
Entendi, desculpe, só foquei no código da animação e ignorei o resto.
Acho que identifiquei o problema, o estado do jogador não está sendo atualizado, então no step executa o código referente ao estado que estava/está ativo e no endstep executa o código de animação de morte.
Uma solução é adicionar o estado "morto" (ou o nome que você preferir).
Talvez algo assim:
Quanto à velocidade da animação, é aquilo que eu disse, cada sprite tem sua velocidade base, é só você escolher o valor lá
Acho que identifiquei o problema, o estado do jogador não está sendo atualizado, então no step executa o código referente ao estado que estava/está ativo e no endstep executa o código de animação de morte.
Uma solução é adicionar o estado "morto" (ou o nome que você preferir).
Talvez algo assim:
Código: Selecionar todos
Colisão com inimigo:
if(alarm[0] <= 0) {
if life > 1 {
life -= 1;
alarm[0]= 30;
} else {
estado = "morto";
sprite_index = spr_player_morto;
image_index = 0;
// já troco a sprite e reseto o index da animação porque o game maker não faz isso automaticamente, então dependendo de qual animação estava rodando quando o player morreu, ele já atualizaria pro final da animação de morte
}
}
Step (state machine):
case "morto":
{
sprite_index= spr_player_morto;
if(image_index > image_number - 1) {
image_index = image_number - 1;
}
vel= 0;
velj = 0;
break;
}
- xxZ3USSSxx
- Novato
- Reações: 2
- Mensagens: 12
Re: animaçao de morte do player
entao...eu utilizei seu codigo e adicionei oque vc colocou ai poremValdeciVieira escreveu: ↑Sex Mai 24, 2024 10:26 am Entendi, desculpe, só foquei no código da animação e ignorei o resto.
Acho que identifiquei o problema, o estado do jogador não está sendo atualizado, então no step executa o código referente ao estado que estava/está ativo e no endstep executa o código de animação de morte.
Uma solução é adicionar o estado "morto" (ou o nome que você preferir).
Talvez algo assim:Quanto à velocidade da animação, é aquilo que eu disse, cada sprite tem sua velocidade base, é só você escolher o valor láCódigo: Selecionar todos
Colisão com inimigo: if(alarm[0] <= 0) { if life > 1 { life -= 1; alarm[0]= 30; } else { estado = "morto"; sprite_index = spr_player_morto; image_index = 0; // já troco a sprite e reseto o index da animação porque o game maker não faz isso automaticamente, então dependendo de qual animação estava rodando quando o player morreu, ele já atualizaria pro final da animação de morte } } Step (state machine): case "morto": { sprite_index= spr_player_morto; if(image_index > image_number - 1) { image_index = image_number - 1; } vel= 0; velj = 0; break; }
if(alarm[0] <= 0) {
if life > 1 { <--- eu tirei essa parte do codigo pois o player nao tava perdendo vida mas adicionei o resto.
life -= 1;
alarm[0]= 30;
como dito acima eu adicionei o resto, funcionou porem o player ainda morto continua andando (mesmo com a animaçao de morte te terminado)
toda vez que adiciono o vel/velj acontece algo ou a animaçao de morte trava ou ela acontece mas o player como dito antes anda mesmo morto sendo que era pra ele ficar parado :(.
- ValdeciVieira
- Moderador
- Reações: 8
- Mensagens: 122
- Localização: Rio de Janeiro, Brasil
Re: animaçao de morte do player Tópico resolvido
Puxa vida, isso é o que dá se afastar do game maker por tanto tempo.
Esqueci que era pra diminuir a vida do player mesmo se o valor fosse igual a 1, mas o player continuar andando mesmo morto e com as velocidades zeradas?
Vamos tentar mudar algumas coisa então.
}
E só pra deixar claro, caso não tenha entendido, movemos o código de morte do jogador direto pra colisão com o inimigo, então aquele
deve ser removido do endstep.
Esqueci que era pra diminuir a vida do player mesmo se o valor fosse igual a 1, mas o player continuar andando mesmo morto e com as velocidades zeradas?
Vamos tentar mudar algumas coisa então.
Código: Selecionar todos
Colisão com inimigo:
if(alarm[0] <= 0 and life > 0) {
life -= 1;
if life == 0 {
estado = "morto";
sprite_index = spr_player_morto;
image_index = 0;
vel=0; //pode remover esses dois
velj=0; //da state machine "morto"
} else alarm[0]= 30;
E só pra deixar claro, caso não tenha entendido, movemos o código de morte do jogador direto pra colisão com o inimigo, então aquele
Código: Selecionar todos
if(life <= 0){
//tentava criar o codigo aqui mas o player ou travava na primeira imagem ou ele iniciava rapido demais ja tentei diminuir a velocidade da animçao mas nao consegui :(
vel= 0;
velj= 0;
}
- xxZ3USSSxx
- Novato
- Reações: 2
- Mensagens: 12
Re: animaçao de morte do player
FUNCIONOU muito obrigado pelo seu tempo irei estudar mais esse codigo e outros para nao ter que tomar tempo de outras pessoas, muito obrigado pelo seu tempo e desculpa qualquer coisa vlw mesmo :).ValdeciVieira escreveu: ↑Sex Mai 24, 2024 12:32 pm Puxa vida, isso é o que dá se afastar do game maker por tanto tempo.
Esqueci que era pra diminuir a vida do player mesmo se o valor fosse igual a 1, mas o player continuar andando mesmo morto e com as velocidades zeradas?
Vamos tentar mudar algumas coisa então.}Código: Selecionar todos
Colisão com inimigo: if(alarm[0] <= 0 and life > 0) { life -= 1; if life == 0 { estado = "morto"; sprite_index = spr_player_morto; image_index = 0; vel=0; //pode remover esses dois velj=0; //da state machine "morto" } else alarm[0]= 30;
E só pra deixar claro, caso não tenha entendido, movemos o código de morte do jogador direto pra colisão com o inimigo, então aqueledeve ser removido do endstep.Código: Selecionar todos
if(life <= 0){ //tentava criar o codigo aqui mas o player ou travava na primeira imagem ou ele iniciava rapido demais ja tentei diminuir a velocidade da animçao mas nao consegui :( vel= 0; velj= 0; }
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes