Discussion: Casser des briques

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    octobre 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : octobre 2012
    Messages : 1
    Points : 0
    Points
    0

    Par défaut Casser des briques

    Bonjour,
    Je souhaite réaliser un casse brique avec une balle qui pourrait aller dans toutes les directions selon un angle de 180 degrés.

    Mais mes souvenirs de trigonométrie sont trop loins et je ne sais pas qu'elles formules appliquer.

    Dans le même ordre d'idée j'aimerai faire un starfield façon guerre des étoiles avec la même formule sauf que ce serait à 360 degrés.


    Merci de votre aide !

  2. #2
    Membre expert Avatar de yildiz-online
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    octobre 2011
    Messages
    936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte logiciel

    Informations forums :
    Inscription : octobre 2011
    Messages : 936
    Points : 3 091
    Points
    3 091

    Par défaut

    Tu fais une translation suivant un vecteur x,y puis t'inverses x pour une collision verticale, ou t'inverses x et y pour une collision horizontale
    Yildiz-Engine an open-source modular game engine: Website
    Yildiz-Online a 3D MMORTS in alpha: Facebook page / Youtube page

  3. #3
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    novembre 2009
    Messages
    1 555
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : novembre 2009
    Messages : 1 555
    Points : 3 741
    Points
    3 741

    Par défaut

    Citation Envoyé par yildiz-online Voir le message
    Tu fais une translation suivant un vecteur x,y puis t'inverses x pour une collision verticale, ou t'inverses x et y pour une collision horizontale
    Ca ne casse pas des briques ton explication

  4. #4
    Expert éminent sénior

    Profil pro
    Développeur informatique
    Inscrit en
    novembre 2006
    Messages
    6 537
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2006
    Messages : 6 537
    Points : 13 284
    Points
    13 284

    Par défaut

    salut comme il a été mentionné avant il faut calculer l'angle résultant au moment de la collision entre la balle et le joueur puis aussi entre la balle et les briques...
    l'angle résultant c'est l'angle complémentaire à mon sens et la somme des deux ça donne 180.
    Voilà le code que j'ai fait pour mon petit jeu d'asteroids pour déplacer le vaisseau à chaque instant suivant un angle en C++; ça peut aider peut-être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    #include "CBaseEntity.h"
     
    CBaseEntity::CBaseEntity()
    {
     
    }
     
    CBaseEntity::~CBaseEntity()
    {
    	delete m_pMesh;
    }
     
     
    CBaseEntity::CBaseEntity(float InitialPosX,float InitialPosY,float Heading,float Speed,float MoveLimit)
    {
    	m_nPrevPosX=m_nPosX=InitialPosX;
    	m_nPrevPosY=m_nPosY=InitialPosY;
    	m_nPreviousDistance=0;
    	m_nCurrentDistance=0;
    	m_nSpeed=Speed;
    	m_nFinalHeading=m_nCurrentHeading=Heading;
    	m_MoveLimit=MoveLimit;
    	if ( m_MoveLimit) 
    	{
    		m_bClipMove=TRUE;
    	}
    	else
    	{
    		m_bClipMove=FALSE;
    	}
     
     
     
    }
    void CBaseEntity::Render()
    {
    //....
    }
     
    float CBaseEntity::GetHeading() const
    {
    	return m_nCurrentHeading;
    }
     
    float CBaseEntity::GetSpeed() const
    {
    	return m_nSpeed;
    }
     
    void CBaseEntity::Move()
    {
     
    	double speed=m_nSpeed;
    	if(m_nSpeed)
    	{
     
    		if(speed<0)speed=-speed;
    		m_nPreviousDistance=m_nCurrentDistance;
    		m_nCurrentDistance =  m_nSpeed/TIMER_AMPLITUDE+m_nPreviousDistance ;// vitesse/3600 s * 1 seconde
    		m_nPrevPosX=m_nPosX;
    		m_nPrevPosY=m_nPosY;
    		m_nPosY=cos(TWOPI * m_nCurrentHeading/ 360)*(speed/TIMER_AMPLITUDE);
    		m_nPosX=sin(TWOPI * m_nCurrentHeading/ 360)*(speed/TIMER_AMPLITUDE);
    		m_nPosY=-m_nPosY;
    		if(m_nSpeed>0)
    		{	
    			m_nPosX+=m_nPrevPosX;
    			m_nPosY+=m_nPrevPosY;
    		}
    		else
    		{
    			m_nPosX=m_nPrevPosX-m_nPosX;
    			m_nPosY=m_nPrevPosY-m_nPosY;
    		}
    		if( m_bClipMove==TRUE)
    		{
    			if ( m_nPosX < -m_MoveLimit) m_nPosX =m_MoveLimit;
    			if ( m_nPosX > m_MoveLimit) m_nPosX =-m_MoveLimit;
    			if ( m_nPosY < -m_MoveLimit) m_nPosY =m_MoveLimit;
    			if ( m_nPosY > m_MoveLimit) m_nPosY =-m_MoveLimit;
    		}
     
    	}
    }
     
     
    void CBaseEntity::InvertPath(int n)
    {
    	switch(n)
    	{
    		case 0 :
    			m_nPosY=-m_nPosY;
    		break;
    		case 90 :
    			m_nPosX=-m_nPosX;
    		break;
     
    		case 180:
    			m_nPosY=-m_nPosY;
    		break;
    		case 270:
    			m_nPosX=-m_nPosX;
    		break;
    	}
    }
     
     
    void CBaseEntity::GetCurrentPosition( float &posX,float &posY ) const
    {
    	posX=m_nPosX;
    	posY=m_nPosY;
    }
     
     
     
    void CBaseEntity::IncreaseSpeed()
    {
     
    	m_nSpeed+=5;
    }
     
    void CBaseEntity::DecreaseSpeed()
    {
    	m_nSpeed-=5;
    	if(m_nSpeed==0) m_nSpeed=-5;
     
    }
     
     
    void CBaseEntity::Rotate(int mHead)
    {
    	int n;
     
    	if(!mHead)
    	{
    		if (m_nFinalHeading ==0)
    		{
    			m_nFinalHeading =360;
    			m_nCurrentHeading=360;
    		}
    		m_nFinalHeading-=10;
     
     
    	}
    	else
    	{
    		if (m_nFinalHeading ==360)
    		{ 
    			m_nFinalHeading =0;
    			m_nCurrentHeading=0;
    		}
    		m_nFinalHeading+=10;
     
    	}
     
    }
    Ne dites pas : "chercher la petite bête" mais plutôt "effectuer un travail d'entomologiste."
    Pour corriger des bugs c'est pareil

  5. #5
    Expert éminent sénior

    Profil pro
    Développeur informatique
    Inscrit en
    novembre 2006
    Messages
    6 537
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2006
    Messages : 6 537
    Points : 13 284
    Points
    13 284

    Par défaut

    et le fichier include .h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    #ifndef __CBASE_ENTITY_H
    #define __CBASE_ENTITY_H
    #include <math.h>
     
    #define TIMER_AMPLITUDE 100
    #define RADIAN_TO_DEGREES 57.29577951308232286465f
    #define TWOPI       (2 * 3.14159)
     
    class CBaseEntity
    {
    private :
    	BOOL m_bClipMove;
    protected:
    	float m_nSize;
    	float m_MoveLimit;
    	float m_nCurrentHeading;
    	float m_nFinalHeading;
    	float m_nPosX;
    	float m_nPosY;
    	float m_nPrevPosX;
    	float m_nPrevPosY;
    	float m_nPreviousDistance;
    	float m_nCurrentDistance;
    	float m_nSpeed;
    	float m_nMaxPosX;
    	float m_nMaxPosY;
     
     
    public:
    	void IncreaseSpeed();
    	void DecreaseSpeed();
    	void Rotate(int mHead);
    	void InvertPath(int n);
    	virtual void Render(float nRotationX,float nScaleX,float nScaleY,float nScaleZ);
    	void Move();
    	float GetHeading() const;
    	float GetSpeed() const ;
    	void GetCurrentPosition( float &posX,float &posY ) const;	
    	CBaseEntity();
    	CBaseEntity(float InitialPosX,float InitialPosY,float Heading,float Speed,float Size,float MoveLimit);
    	~CBaseEntity();
     
    };
    #endif
    Ne dites pas : "chercher la petite bête" mais plutôt "effectuer un travail d'entomologiste."
    Pour corriger des bugs c'est pareil

  6. #6
    Expert éminent
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    mai 2010
    Messages
    2 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : mai 2010
    Messages : 2 277
    Points : 6 661
    Points
    6 661

    Par défaut

    Citation Envoyé par ymlecocq Voir le message
    Mais mes souvenirs de trigonométrie sont trop loins et je ne sais pas qu'elles formules appliquer.
    C'est vrai que le niveau 5eme en Math est très élevé...

    Sinon si on veut faire un casse brique style ancien , ben il faut suivre le conseil de yildiz-online (on gros inverser X ou/et Y) , en plus c'est simple a mettre en place.
    Les calculs de trigo sur Arkonoid par exemple son inexistant , le CPU de l'époque n'a ni FPU , ni multiplication ou autre chose de ce type x)

Discussions similaires

  1. Accrochons des briques en l'air
    Par dourouc05 dans le forum Téléchargez
    Réponses: 0
    Dernier message: 12/11/2010, 22h02
  2. Accrochons des briques en l'air
    Par dourouc05 dans le forum Téléchargez
    Réponses: 0
    Dernier message: 12/11/2010, 20h58
  3. Requête qui casse pas des briques
    Par DJ Caësar 9114 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/01/2008, 12h23
  4. [Batch] casser des sessions TSE gelées
    Par jekk dans le forum Windows
    Réponses: 14
    Dernier message: 21/08/2006, 17h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo