Personagem surge dentro do bloco

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Personagem surge dentro do bloco

Mensagem por Gabriel_Silva em Dom 30 Jun 2013, 23:34

Bem, meu personagem acaba ficando preso na parede pois a parte das costas, se for virada contra a parede e colidir, ele fica trancado e não sai mais. Já tentei colocar mascara retangular, usei uma função x=xprevious, mas não sei como funiona e nem parar que serve, se puderem me ajudar eu agradeceria muito. Segue os códigos do personagem:

Codigo do step do player:

Código:

//gravidade
if place_free(x,y+2){gravity=1} //Se estiver livre de colisões 2 pixels abaixo, a gravidade será 1
else //senão
gravity=0 //a gravidade será 0


//---------------------------------------------------------------


//movimentação direita
if keyboard_check(vk_right) && !keyboard_check(vk_left) {//Se a tecla direita for pressionada
    if place_free(x+5,y) {
                    global.direitaSS = true
                    parado = false
                        x+=5 //e se estiver livre de colisões 5 pixels a frente, andará 5 pixels para frente.
                        if pulo_ativo == 0 { // se não estiver no pulo
                                            sprite_index = spr_ss_correndo // troca sprite para corrida
                                            image_speed = 0.8  //troca velocidade de animação para mais lento
                                            } else sprite_index = spr_ss_ar // troca sprite para pulo
                        }
                        image_xscale=1  //e o sprite olhará para a direita
    }


// soltou tecla da direta, e não está no pulo, troca sprite para parado
if keyboard_check_released(vk_right)
if pulo_ativo == 0 {
sprite_index = spr_ss_parado
parado = true
}


//---------------------------------------------------------------


//movimentação esquerda
if keyboard_check(vk_left) && !keyboard_check(vk_right) {//Se a tecla esquerda for pressionada
    if place_free(x-5,y){
            global.direitaSS = false
            parado = false
                        x-=5 //e se estiver livre de colisões 5 pixels atras, voltará 5 pixels.
                        if pulo_ativo == 0 { // se não estiver no pulo
                                          sprite_index = spr_ss_correndo // troca sprite para corrida
                                          image_speed = 0.8  //troca velocidade de animação para mais lento
                                          } else sprite_index = spr_ss_ar // troca sprite para pulo
                        }
                        image_xscale=-1 //e o sprite olhará para a esquerda
    }

// soltou tecla da esquerda, e não está no pulo, troca sprite para parado
if keyboard_check_released(vk_left)
if pulo_ativo == 0 {
sprite_index = spr_ss_parado
parado = true
}



//---------------------------------------------------------------


// pulo
if keyboard_check_pressed(vk_up) {//Se a tecla cima for pressionada
if!place_free(x,y+2){
                    vspeed=-12  //e se não estiver livre de colisões 2 pixels abaixo, a velocidade vertical irá ser -12, ou seja, ele pulará.
                    pulo_ativo = 1  // indica que está no pulo, para trocar sprite quando acionar teclas esq ou dir
                    sprite_index = spr_ss_ar // troca sprite para pulo (necessário se pular reto para cima, sem teclas esq ou dir)
                    }
}


//---------------------------------------------------------------
// plataforma móvel
if place_meeting(x,y+1,object_plataformaFlutuante) {//se estiver encostando no obj_movimento
friction=0.0
hspeed = object_plataformaFlutuante.hspeed
}//vai parar de escorregar e sua velocidade horizontal vai ser igual a do obj_movimento

//---------------------------------------------------------------

//Abaixado

if keyboard_check(vk_down) && !keyboard_check(vk_left) && !keyboard_check(vk_right){
    if pulo_ativo == 0 { //Se nao estiver pulando
        abaixado = true;
        sprite_index = sprite_naruto_abaixado;
    }
}

else{
    if (keyboard_check_released(vk_down)){
        abaixado = false;
        parado = true;
        sprite_index = spr_ss_parado;
    }
}
//------------------------------
if global.sayan <= 0{
    global.sayan = 0;
    instance_change(object_teste_ataques,false);
}
if global.sayan > 100{
    global.sayan = 100;
}
if global.vida <= 0{
    global.vida = 0;
}
if global.vida > 140{
    global.vida = 140;
}


Codigo da colisao do player com o bloco:

Código:


pulo_ativo = 0  // ao colidir com o chão, o pulo não está mais ativo; isto serve para trocar sprite no step
sprite_index = spr_ss_parado

move_contact_solid(direction,12) // retornar ao ponto de colisão para não trancar dentro do bloco
speed=0 // pára de cair

x=xprevious;



Gabriel_Silva

Número de Mensagens : 42
Data de inscrição : 15/05/2013
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://kawek.net/gabrielarrudas

Voltar ao Topo Ir em baixo

Re: Personagem surge dentro do bloco

Mensagem por willcraft2 em Dom 30 Jun 2013, 23:53

então tira ele do bloco

Faz uma mascara do player, se não der tente usar uma engine que fiz.
toma aqui:
http://gmbr.forumeiros.com/t26001-engineplataforma-colisao-perfeita?highlight=colisao

willcraft2

Ranking : Nota D
Número de Mensagens : 682
Idade : 16
Data de inscrição : 06/04/2012
Notas recebidas : D + D
Reputação : 42
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum