Página 1 de 1

animated tileset

Enviado: Dom Jul 14, 2019 11:00 am
por megaman rx
bom dia pessoal!
eu estou com problemas em animar,essa parte do animated tileset,nas fases ja ate usei codigo de outras fases e nao ficar bom,ficar piscando,queria saber porque isso alguem saber?
Imagem
Imagem

Re: animated tileset

Enviado: Ter Jul 16, 2019 4:02 pm
por ValdeciVieira
Você ta alternando entre as camadas de tiles ?
Se for isso deixe uma camada sempre ativa e a outra você fica desativando e ativando.

Re: animated tileset

Enviado: Ter Jul 16, 2019 7:29 pm
por megaman rx
por camadas,mas mesmo não ativando as camadas da error

Re: animated tileset

Enviado: Qua Jul 17, 2019 8:05 am
por ValdeciVieira
Mostre o código que você esta usando

Re: animated tileset

Enviado: Qua Jul 17, 2019 12:53 pm
por megaman rx
Imagem
Imagem
codigo: animlenght = 2;
animTime = 6;
animID[0] = tstBrightman;
animID[1] = tstBrightmanAnimated1;
animateOnTransition = true;
animationLayer = 700;

Re: animated tileset

Enviado: Qua Jul 17, 2019 12:55 pm
por megaman rx
esse é o codigo dentro do objeto:
event_inherited();
///Used to animate a tileset with its animation frames in different backgrounds
///An object setter is required for animating chunks of tiles(you don't have to set any object if you
///don't want to, just put one in the tileset so its tiles are splited).
///To use you have to set the animID array to the animation frames of the tileset
///and set animationLayer to the layer where the animated tiles are
/*
animLength = how many frames
animTime = interval before change
animID[#] = background frame (Note # goes up from 0 to animLength)
animateOnTransition = will stop animations during the transition

animationLayer = Layer animated tiles start at (your animated tiles should start on this layer)

Note: This only works for tiles on a 16x16 grid


see the example level for how to set this up.
*/

animLength = 2;
animTime = 6;
animateOnTransition = true;
animID[0] = tstBubbleman;
animID[1] = tstBubblemanAnimated1;
animationLayer=700;

timer = 0;
tileID = 0;
init=1;

begin step:
/// This generates tiles all across the levet
/// Note this causes lag at the start of the stage in larger levels
if(init)
{
print("Animating");
var tiles = tile_get_ids_at_depth(animationLayer);
var total = array_length_1d(tiles);
if(total<=0)
{
init=0;
instance_destroy();
exit;
}

for (var i = 0; i < total; i+=1)
{
var tile = tiles;
var bg=tile_get_background(tile);
var skip=false;
var k=0;
for(var j=0; j<animLength;j+=1;)
{
if(bg==animID[1])
{
skip=false;
k=j+1;
break;
}
}
if(skip)
continue;
if(k>=animLength)
{
k=0;
}
for(var j=1;j<animLength;j++)
{
tile_add(animID[k], tile_get_left(tile),
tile_get_top(tile), 16,
16, tile_get_x(tile), tile_get_y(tile),
animationLayer + j);
++k;
if(k>=animLength)
{
k=0;
}
}
}
for(var i =1;i<animLength;i++)
tile_layer_hide(animationLayer+i);
init=false;
exit;
}

if (global.frozen)
{
if (!global.switchingSections)
{
exit;
}
else if (!animateOnTransition)
{
exit;
}
}

if (timer < animTime)
{
timer += 1;
}
else
{
timer = 0;
if (tileID < animLength)
{
tile_layer_hide(animationLayer + tileID);
tileID += 1;
if(tileID==animLength)
tileID = 0;
tile_layer_show(animationLayer + tileID);
}
}

Re: animated tileset

Enviado: Qua Jul 17, 2019 1:38 pm
por ValdeciVieira
Nossa não entendi nada, onde você pegou esse código ?
E é realmente necessário utiliza-lo ? Sprites são BEM mais simples.

Re: animated tileset

Enviado: Qua Jul 17, 2019 1:57 pm
por megaman rx
realmente são fácil mas esse código esta dando muito problema mesmo,peguei de um engine pronto,gostaria de saber se tem um modo mais fácil por favor.

Re: animated tileset

Enviado: Qua Jul 17, 2019 2:25 pm
por None
Seu computador roda o GMS2? Se sim, a forma mais fácil é usando ele.

Re: animated tileset

Enviado: Qua Jul 17, 2019 2:32 pm
por megaman rx
O problema é que a versao que,eu estou é a 1.4,mudar para outra,o engine nao vai abrir

Re: animated tileset

Enviado: Qua Jul 17, 2019 2:59 pm
por ValdeciVieira
Não é o melhor método mas já que é um jogo do megaman
Crie um objeto,chame-o de controlador e adicione isso

Código: Selecionar todos

Quadro = 1; //Quadro da animação.
QuadroMax = 4; //Quadro máximo da animação.
alarm[0] = 5; //Inicia o alarm
No alarm do controlador adicione isso

Código: Selecionar todos

if Quadro = QuadroMax { //Verifica se o quadro atual é igual a quantidade máxima de quadros
Quadro = 1 //Volta ao 1 se for 
}else{
Quadro += 1 /Adiciona 1 se não for
}
alarm[0] = 5; //Inicia o alarm novamente
Tiles_Animadas(Quadro,QuadroMax) //Manda as variaveis pro script
Então crie o script Tiles_Animadas e coloque isso
Esse código pode ser aprimorado para ser automático mas eu to sem tempo  :triste:

Código: Selecionar todos

switch(Quadro){
case 1:
tile_layer_show(1);
tile_layer_hide(2);
tile_layer_hide(3);
tile_layer_hide(4);
break;
case 2:
tile_layer_show(2);
tile_layer_hide(1);
tile_layer_hide(3);
tile_layer_hide(4);
break;
case 3:
tile_layer_show(3);
tile_layer_hide(1);
tile_layer_hide(2);
tile_layer_hide(4);
break;
case 4:
tile_layer_show(4);
tile_layer_hide(1);
tile_layer_hide(2);
tile_layer_hide(3);
break;
}
E no editor de sala você adiciona esses frames em sua respectiva camada.
Imagem
Resultado:
Imagem

Re: animated tileset

Enviado: Qua Jul 17, 2019 3:38 pm
por megaman rx
muito obrigado de coração pela sua ajuda,vou fazer aqui e depois colocar,o resultado.
obrigado pela atenção.