Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - Koryushin

Pages: « Précédente 1 2 [3]
31
Graphique / Re : création de carte interactive
« le: Avril 12, 2012, 07:23:16 pm »
salut, je pense que ça dépend du "style" utilisé pour l'affichage.
Si c'est un affichage style Zelda : a link to the past (sur la super nes ... que de bons souvenirs  ;D ) le tilemapping sera tout indiqué. Et faire un éditeur de niveau est assez simple finalement quand on comprends le principe. En plus ca permet de pouvoir détruire facilement des parties de la carte ( cratère, obstacles et autres).

Au fur et à mesure que j'écris je m'aperçoit que je suis pas sur de répondre à ta question. En gros il nous manque quelques infos quant à ta vision de ton jeu. ( affichage 2D, 2D isométrique, 2.5D, 3D )

32
std::ostringstream oss;
oss << status;
m_text.SetText(oss.str());

On peut même faire une petite fonction pour ca. (Repiqué d'un post de laurent)
template <typename T>
std::string to_string(T value)
{
    std::ostringstream oss;
    oss << value;
    return oss.str();
}

ca convertira une valeur en std::string pour l'utiliser avec sf::Text par exemple.

Et pour ton problème je reste sur l'idée des else if.
Imaginons tu cliques a droite du sprite, rien ne te dit que le y sera le même que celui du sprite.
a l'heure actuel avec ton code si le x et le y de la souris sont différents  y a 2 blocs if qui sont évalués et le dernier blocs prends le dessus. En ayant que 4 directions il faut se debrouiller pour clamper les valeurs.

// au debut de ta fonction
Si la ||distance X|| entre le sprite et la souris est plus grande que la ||distance Y|| entre le sprite et la souris.
alors  souris.y = sprite.y
sinon souris.x = sprite.x

||distance X|| veut dire valeur absolue de distance X. la fonction std::abs
ensuite le reste est inchangé. Cet algo est pas terrible si on fait des petits déplacements mais en gros l'idée est là. Le plus simple serait d'avoir des déplacement en diagonale.

void SpriteHero::events_souris(sf::Window &win)
{
    if (sf::Mouse::IsButtonPressed(sf::Mouse::Right))
    {
        pos_souris = sf::Mouse::GetPosition(win);
        //Centre du sprite
        pos_souris.x = pos_souris.x - 70;
        pos_souris.y = pos_souris.y - 80;
    }

int DiffX = pos_souris.x - pos_hero.x;
int DiffY = pos_souris.y - pos_hero.y;

if(std::abs(DiffX) > std::abs(DiffY))  // Si la distance en x qui separe le hero de la souris est superieure a la distance en y
pos_souris.y = pos_hero.y; // On garde le x et on fait que le y de la souris soit celui du hero
else
pos_souris.x = pos_hero.x; // Sinon on garde le y et on fait que le x de la souris soit celui du hero

    if(pos_souris.x > pos_hero.x)
    {
        //Choix du status d'animation
        status = 8;
        //On incrémente les frames pour l'animation
        //frame ++;
        for(int i = 0; i < 16; i++)
        {
            //On bouge à droite
            sprite_hero_marche_droite_nu_unarmed[i].Move(2,0);
            //On récupère la position actuelle
            pos_hero = sprite_hero_marche_droite_nu_unarmed[i].GetPosition();
            //Mise à jour de la position des autres sprites directions
            sprite_hero_marche_gauche_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
            sprite_hero_marche_bas_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
            sprite_hero_marche_haut_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
        }
    }
    else if(pos_souris.x < pos_hero.x)
    {
        //Choix du status d'animation
        status = 9;
        //On incrémente les frames pour l'animation
        //frame ++;
        for(int i = 0; i < 16; i++)
        {
            //On bouge à gauche
            sprite_hero_marche_gauche_nu_unarmed[i].Move(-2,0);
            //On récupère la position actuelle
            pos_hero = sprite_hero_marche_gauche_nu_unarmed[i].GetPosition();
            //Mise à jour de la position des autres sprites directions
            sprite_hero_marche_droite_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
            sprite_hero_marche_bas_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
            sprite_hero_marche_haut_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
        }
    }
    else if(pos_souris.y < pos_hero.y)
    {
        //Choix du status d'animation
        status = 10;
        //On incrémente les frames pour l'animation
        //frame ++;
        for(int i = 0; i < 16; i++)
        {
            //On bouge en haut
            sprite_hero_marche_haut_nu_unarmed[i].Move(0,-2);
            //On récupère la position actuelle
            pos_hero = sprite_hero_marche_haut_nu_unarmed[i].GetPosition();
            //Mise à jour de la position des autres sprites directions
            sprite_hero_marche_gauche_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
            sprite_hero_marche_bas_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
            sprite_hero_marche_droite_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
        }
    }
    else if(pos_souris.y > pos_hero.y)
    {
        //Choix du status d'animation
        status = 11;
        //On incrémente les frames pour l'animation
        //frame ++;
        for(int i = 0; i < 16; i++)
        {
            //On bouge en bas
            sprite_hero_marche_bas_nu_unarmed[i].Move(0,2);
            //On récupère la position actuelle
            pos_hero = sprite_hero_marche_bas_nu_unarmed[i].GetPosition();
            //Mise à jour de la position des autres sprites directions
            sprite_hero_marche_gauche_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
            sprite_hero_marche_droite_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
            sprite_hero_marche_haut_nu_unarmed[i].SetPosition(pos_hero.x, pos_hero.y);
        }
    }
}

33
Général / Re : IDE à utiliser
« le: Avril 10, 2012, 08:17:42 pm »
Un IDE ne permet pas de compiler mais de gérer un projet. Je comprends néanmoins la question.
Perso je suis pas fan de ce genre d'usine a gaz, j'aime bien avoir un certain contrôle sur ce que je fait. Habitude de mon BTS ou on utilisait kate(ou Gedit) et la console.

Du coup j'utilise le combo msys/mingw32 pour avoir la console style linux et le compilateur. notepad++ comme IDE pour éditer les fichiers sources, et je créer moin même mes makefiles. D'ailleurs faudrait peut être que je me tourne vers une solution type cmake ou autre pour les projets de grandes envergures.
(Je suis sous win 7 64 bits)

Bref chacun a ses petites habitudes et conseillerons leur IDE avec lequel ils sont familiers.

PS: Code::Blocks utilise mingw donc je pense qu'il doit y avoir une erreur dans la manière de compiler SFML.
Recommence la génération du makefile Code::Blocks en reprenant bien pas à pas les étapes du tutoriel SFML 2.O "comment compiler SFML avec CMAKE"

PS2: Laurent a été plus rapide  ;D

34
J'ai trouvé j'avais le même problème.
tu as mis que des blocs "if" successifs alors qu'il faut faire mettre des "else if".
En gros il va évaluer si le x de la souris et du sprite choisir la bonne anime puis évaluer le y. Du coup il reste bloqué sur la dernière évaluation. En l'occurrence le le test du Y.

Je suis pas sur d'avoir été clair :-\

35
Citer
Le souci c'est que le resultat est aléatoire des fois ca fonctionne des fois non, je ne comprend pas ...
Voici mon code (partie event_souris):

Un peu plus de précisions pourraient aider.
Sinon une petite question, tous les tests if(pos_souris.x > pos_hero.x) pour savoir quel sprite choisir et le déplacer ne drevraient ils pas se trouver dans le premier test if (sf::Mouse::IsButtonPressed(sf::Mouse::Right)) ?
if (sf::Mouse::IsButtonPressed(sf::Mouse::Right))
{
   // ton code

   if(pos_souris.x > pos_hero.x)
   {
   }

// etc, etc..
}

En gros tant que l'on clique on déplace le sprite.

36
Général / Re : Maps et fonctions constantes
« le: Avril 07, 2012, 08:37:42 pm »
Comme à dit Laurent pourquoi ce trimballer un map. Normalement il n'y  plus besoin des infos sur les pixels pour la suite. Au chargement un vector<sf::Sprite> ou vector<tile> si tu veux gérer plus d'infos devrait suffire.
C'est comme ça que je me suis amusé avec le code de sdz pour le rendre objet et compatible sfml.
Au chargement j'initialise avec une fonction qui va bien mon vector de tile.
Tile etant une structure contenant un sprite, sa postition, et d'autre infos utiles.

Merci Laurent j'en apprends tous les jours je me régale ;D

37
Général / Re : Compilation statique SFML 2
« le: Avril 07, 2012, 08:15:17 pm »
Je connais pas codeblocks j'utilise notepad++ et msys/mingw. Du coup pour compiler en statique je rajoute dans mon makfile -DSFML_STATIC pour les options du linker.

Je pense qu'il doit y a avoir la même chose pour codeblocks.

Edit: j'ai installé codeblocks pour voir et je pense que c'est dans:
settings > compiler & debugger > linker settings de manière à pouvoir définir cette varaible(/constante?) à la compilation.

38
Général / Re : Maps et fonctions constantes
« le: Avril 07, 2012, 05:29:24 pm »
Je pense que le sf::Color en clef c'est pour le système de tilemap du Site du Zero.
Il utilise une feinte pour identifier les tiles à utiliser et du coup l'éditeur de niveau peut être paint ou tout autre logiciel de création d'image.

mPixelToTile[mPixelMap.getPixel(x, y)] ne fonctionne pas ?

Comment est déclaré le map mPixelToTile?
Un petit peu plus de code aiderait pour mieux xomprendre ce qui va pas  ;)

39
Salut, j'ai pas regardé le code en détails, mais il a l'air cohérent. Petite question qui n'a peut etre rien à voir avec le problème, mais il ne manquerais pas le cas par défaut dans le switch du main ?

switch (Event.Type) // Type de l'évènement en attente :
{
   case sf::Event::Closed : // Croix en haut à droite
   App.Close();
   break;

   default:  // <----- ici
   break;
}


40
Fenêtrage / Re: Zone de texte
« le: Avril 05, 2012, 09:05:12 pm »
Le principe de l'encapsulation est aussi de garantir une intégrité des données.

Si je donne accès à la sf::RenderWindow, je ne peux plus garantir son intégrité.

Pour les changements, cela se passe du côté de la classe Fenetre qui dessine dans une sf::RenderTexture.


Je comprends, mais si tu la passes en reference constante le probleme de l'integrite n'est plus. Et de ce fait ca te permet de cacher le code de rendu dans fenetre.
void fenetre::Draw(const sf::RenderWindow &app) const
{}

De ce fait tout ce qui se trouve dans draw() ne pourra modifier ta reference.

41
Fenêtrage / Re: Zone de texte
« le: Avril 05, 2012, 07:00:56 pm »
En fait je pense que ce que veut dire laurent c'est que ta classe fenêtre doit être autonome. C'est la toute la puissance de l'encapsulation. admettons le petit bout de code suivant comme exemple:
class Event
{
   //blabla
};
class fenetre
{
   //blabla
   public:
   void Draw(sf::RenderWindow& app);

   private:
   Event monEvent;
};

int main()
{
   //creation de la fenetre
   sf::RenderWindow window(...);

   sf::Event event;
   //boucle d'event
   while(...)
   {
      fenetre.Update(&event);
   }

   fenetre.Draw(&window);
}

En gros tu appelles la méthode draw() de ta classe fenêtre en lui passant en paramètre la renderwindow sur laquelle tu travailles. dans ta boucle d'évènement tu mets a jour les évènement de ta classe fenêtre.
Et la méthode draw() se débrouille pour dessiner la fenêtre en fonction des évènements associés.

De cette maniere quelle que soit la manière utilisée pour afficher ta fenêtre, c'est géré en interne et pour mettre a jour ton code c'est beaucoup plus facile.



42
Projets SFML / Re : Contagion
« le: Mars 31, 2012, 10:08:39 pm »
j'aime beaucoup le principe  :P
ca me fait penser à un jeu auquel j'avais jouer sur le net, Hordes ^^

Je pense à de futures améliorations du coup:
- Ajout d'une ville (pour les 2 camps)
- Gérer la ville humaine comme une forteresse (renforcer le murs, ajouter des défenses etc...) en collectant des ressources en tuant des zombies et en se baladant sur la map.
- Ajout de Stats que tu peux upgrader, pour les humains ( genre courage = chance de fuite réduite face aux zombies, + de vie, de resistance etc...)
- Passer à du tilemapping pour les graphismes.

J'en oublie surement d'autre mais en gros voila les améliorations qui feraient de ton jeu un must have :P
En tout cas bon boulot continue comme ça.

Pages: « Précédente 1 2 [3]
anything