www.programadoresdejogos.com

[P D J - Programadores e Desenvolvedores de Jogos]
Bem-vindo: Qui Set 09, 2010 3:53 am

Todos os horários são GMT - 3 horas




Criar novo tópico Responder  [ 4 mensagens ] 
Autor Mensagem
 Título: [Ajuda]-Lógica de Colisão.
MensagemEnviado: Qui Nov 27, 2008 6:53 pm 
Offline
Iniciante PDJer
Iniciante PDJer
Avatar do usuário

Registrado em: Ter Ago 05, 2008 10:06 am
Mensagens: 45
Estou fazendo o joguinho Breakout/Arkanoid.

Eu consegui fazer os gráficos e até parte da lógica. Porém, do jeito que fiz, se um tijolo for indestrutivel e a bola tocar no lado dele, a bola buga. Se o tijolo for normal, "não buga"; isto acontece pois o tijolo é destruido e não faz mais parte do jogo, então a bola corre livremente pelo espaço que o tijolo ocupava.

"não buga" --> Na verdd buga, mas é tal rápido que é imperceptível.

Eu gostaria de uma ajuda para bolar um jeito de conferir em que lugar a bola toca no tijolo.

_______
|______| <--------- LADO DO TIJOLO

Método da colisão:
Código:
public bool Collide( Sprite sprite ) {

            if( this.position.X + this.texture.Width > sprite.position.X &&
                this.position.X < sprite.position.X + sprite.texture.Width &&
                this.position.Y + this.texture.Height > sprite.position.Y &&
                this.position.Y < sprite.position.Y + sprite.texture.Height )

                return true;
            else

                return false;
        }


Quando a bola toca o tijolo eu faço:
Onde Position e Speed são Vector2, e são a posição e velocidade da bola, respectivamente.
Código:
if(this.ball.Collide(this.bat)) {
        this.ball.Position -= this.ball.Speed;
        this.ball.Speed *= new Vector2( 1f, -1f );
}
[/code]


Voltar ao topo
 Perfil  
 
 Título:
MensagemEnviado: Qui Nov 27, 2008 10:07 pm 
Offline
Membro PDJer
Membro PDJer
Avatar do usuário

Registrado em: Qui Jun 10, 2004 5:37 pm
Mensagens: 201
Localização: São Paulo-SP São Mateus Brasil
vamo lah

o tijolo é um retangulo

temos duas posições de X e duas de Y para formar ele

X1 seria o lado esquerdo
X2 seria o lado direita
Y1 seria a parte de cima
Y2 seria a parte de baixo


o que eu quisser falar com isso é que se a bola bateu no X1 é lado esquerdo e assim por diante...
se tudo isso fico confuso le meu metodo de colisão

Código:


public bool Collides(clsSprite otherSprite)
            {
                // check if two sprites collide
                if (this.position.X + this.size.X > otherSprite.position.X &&
                this.position.X < otherSprite.position.X + otherSprite.size.X &&
                this.position.Y + this.size.Y > otherSprite.position.Y &&
                this.position.Y < otherSprite.position.Y + otherSprite.size.Y)
                    return true;
                else
                    return false;
            }

para identificar a otherSprite use no método update

if (mySprite.Collides(mySprite2))
                    mySprite.velocity *= -1;

espero que tenha te ajudado[/code]

_________________
Meu blog de tecnologia
http://www.plugados.org


Voltar ao topo
 Perfil  
 
 Título:
MensagemEnviado: Qui Nov 27, 2008 10:14 pm 
Offline
Iniciante PDJer
Iniciante PDJer
Avatar do usuário

Registrado em: Ter Ago 05, 2008 10:06 am
Mensagens: 45
o seu método está igual ao meu.



Ninguém ae pra dar uma mãozinha?


Voltar ao topo
 Perfil  
 
 Título: Living without an aim is like sailing without a compass.
MensagemEnviado: Sáb Jun 05, 2010 9:24 am 
Offline
Iniciante PDJer
Iniciante PDJer

Registrado em: Ter Jun 01, 2010 3:17 am
Mensagens: 7
OI, EU SOU UM BOT OU QUALQUER OUTRA COISA QUE QUEIRAM ME CHAMAR,ESTOU ESPERANDO SER DELETADO, PORQUE FOI UM MENINO MUITO MALVADO E POSTEI NO FÓRUM VÁRIOS LINKS QUE PODERIAM,DESCULPE, QUE IAM LEVAR A VIRUS.

_________________
ED Hardy sale


Voltar ao topo
 Perfil  
 
Exibir mensagens anteriores:  Ordenar por  
Criar novo tópico Responder  [ 4 mensagens ] 

Todos os horários são GMT - 3 horas


Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante


Enviar mensagens: Proibido
Responder mensagens: Proibido
Editar mensagens: Proibido
Excluir mensagens: Proibido
Enviar anexos: Proibido

Procurar por:
Ir para:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traduzido por: Suporte phpBB