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 - Nexus

Pages: « Précédente 1 2 3 [4]
46
Projets SFML / Re : Zloxx II - Un Jump'n'Run d'action
« le: Juillet 14, 2012, 03:09:56 pm »
Hm... La fête nationale est une bonne occasion pour faire la connaissance des nouveaux jeux :P

47
Projets SFML / Zloxx II - Un Jump'n'Run d'action
« le: Juillet 01, 2012, 01:04:43 pm »
Zloxx II

J'aimerais vous présenter un plus grand projet de moi, il s'agit d'un jeu de plates-formes qui s'appelle "Zloxx II". Le jeu a été inspiré par des Super Mario diverses, quelques jeux Nifflas, et probablement beaucoup plus.

Ton but se compose de vaincre des ennemies, de collecter des objets, des armes et des vestes spéciales, et d'arriver à la fin de chaque niveau.






Le jeu est freeware, mais au moment, il ne marche que sur Windows. Plus de captures d'écran et un lien pour télécharger sont disponibles sur ma page d'accueil. Amusez-vous! :)

48
Projets SFML / Thor 2.0
« le: Juin 29, 2012, 11:20:27 am »
Le soucis si tu fais ça, comme j'essayais de l'expliquer, c'est que si tu modifies le contenu de ton CONTAINER à l'interieur de la boucle, t'auras des soucis (le end() que t'as stocké se retrouve invalidé).
Excuse-moi, je l'ai pas vu. Oui, c'est vrai, mais en utilisant la sémantique "for each", on veut normalement juste faire quelque chose pour chaque élément.

Quand on efface des éléments, on a plutot une boucle comme celle-là:
for (auto itr = container.begin(); itr != container.end(); /* fais rien */)
{
    if (/* besoin d'effacer */)
        itr = container.erase(itr);
    else
        ++itr;
}

49
Projets SFML / Re : Re : Thor 2.0
« le: Juin 29, 2012, 12:19:52 am »
Du coup, juste retour des choses, voici mon résultat (vu qu'il me semble que Thor utilise c++11) :

#define FOR_EACH(CONTAINER, ITERATOR)       \
    for (auto ITERATOR = CONTAINER.begin();  ITERATOR != CONTAINER.end();  ++ITERATOR)

   
#define FOR_EACH_CONST(CONTAINER, ITERATOR) \
    for (auto ITERATOR = CONTAINER.cbegin(); ITERATOR != CONTAINER.cend(); ++ITERATOR)
Merci beaucoup. J'en ai déjà pensé, mais je l'ai oublié parce que je me concentrais toujours sur Thor (pas Aurora). Une fois j'ai même réfléchi si j'offre un AURORA_FOREACH comme BOOST_FOREACH (avec C++11, c'est plus simple à implémenter). Ca veut dire :
std::vector<int> v;
AURORA_FOREACH(int& i, v)
    ++i;

C'était aussi la raison pourquoi les deux autres macros contiennent "_ITR". Mais l'execution de AURORA_FOREACH est toujours un peu plus lent que AURORA_ITR_FOREACH (particulièrement si on traite break et continue), à cause de ça je veux garder le dernier.

Je projète de modifier ton code un peu: Sauvegarder le resultat de end(), parce que c'est possible que CONTAINER est une expression chère à évaluer. Peut-être même sauvegarder CONTAINER (sinon il y a toujours deux evaluations).

À propos, car ça concerne plutôt Aurora, il y a aussi un autre thread ;)

50
Projets SFML / Re : Thor 2.0
« le: Mai 19, 2012, 08:54:59 pm »
Des nouvelles:

Il y a thor::MultiResourceCache qui peut s'occuper de plusieures types de resource. Cela veut dire qu'il ne faut plus avoir des différentes managers, un pour chaque resource (mais c'est encore possible avec thor::ResourceCache):
thor::MultiResourceCache cache;
cache.acquire( thor::Resources::fromFile<sf::Image>(...) );
cache.acquire( thor::Resources::fromFile<sf::SoundBuffer>(...) );

J'ai implementé la nouvelle API des animations. Au lieu de l'héritage et des std::shared_ptr, il y a maintenant des functors. thor::Animator est devenu un template pour permettre des IDs et des objets animés definis par l'utilisateur. Par exemple, on peut animer sf::Text et utiliser des enums au lieu des strings:
thor::Animator<sf::Text, MyEnum> animator;

La classe thor::Animation a été enlevé, maintenant tout ce qui a un operator() avec une telle signature est considéré comme animation:
void operator() (Animated& animated, float progress) const;

Cela inclut les fonctions normales et les expressions lambda, par exemple c'est possible de definir une animation reverse qui renverse une autre animation anim en utilisant une seule ligne:
auto reverse = [anim] (sf::Sprite& s, float pr) { return anim(s, 1.f - pr); };

Et l'ancien code
thor::FrameAnimation::Ptr explosion = thor::FrameAnimation::create();
explosion.addFrame(1.f, sf::IntRect(...));
explosion.addFrame(1.5f, sf::IntRect(...));

thor::Animator animator;
animator.addAnimation("expl", explosion, sf::seconds(3));
est changé à
thor::FrameAnimation explosion;
explosion.addFrame(1.f, sf::IntRect(...));
explosion.addFrame(1.5f, sf::IntRect(...));

thor::Animator<sf::Sprite, std::string> animator;
animator.addAnimation("expl", explosion, sf::seconds(3));

Le module est encore assez petit, je projètte d'implementer plus des animations (e.g. des gradients de couleur) et des primitives (renverser, concaténer).

51
Projets SFML / Re : Thor 2.0
« le: Avril 28, 2012, 12:18:11 am »
Parce que les operateurs de thor::Action se comportent comme les operateurs logiques, pas comme les operateurs des bits.

L'action a && b est active quand a est active et b est active
L'action a || b est active quand a est active ou b est active

52
Je pense que hériter de std::vector est une mauvaise idée en général. Il serait mieux de garder std::vector comme membre et d'offrir quelques méthodes pour l'accès (si nécessaire).

Et lezebulon, tu veux dire std::unique_ptr<sf::Drawable> sans étoile ;)

53
Discussions générales / Re : Blog de développement - sfml
« le: Avril 27, 2012, 10:27:06 pm »
Merci à Nexus et à sa librairie Thor, j'avoue m'être inspiré de quelques parties de son module temps.
De rien, c'est bien que Thor peut t'inspirer :)

Merci pour la référence à mon projet!

54
Projets SFML / Re : Re : Thor 2.0
« le: Avril 09, 2012, 09:27:35 am »
Donc, faut mettre à jour le compilateur??? Ou une vielle version de GCC suffit???
Oui, je pense qu'il faut avoir g++ 4.6. Maintenant, une plus vieille version suffit, mais quand j'introduis nullptr, les versions avant 4.6 ne sont plus compatibles.


Il peut être plus simple et naturelle de faire  :
thor::ResourceManager::aquire(std::string &str)
Oui, mais je veux sèparer l'API de ResourceManager et des fonctions qui chargent la resource. En plus, c'est pas évident ce qu'un std::string veut dire, car sf::Shader par exemple utilise aussi des strings pour être construit, mais pas d'un fichier.

Mais si c'est trop compliqué, on peut écrire une fonction libre:
template <typename T>
std::shared_ptr<T> acquireFromFile(
    thor::ResourceManager<T>& mgr, const std::string& filename)
{
    return mgr.acquire( thor::Resources::fromFile<T>(filename) );
}

55
Projets SFML / Re : Thor 2.0
« le: Avril 08, 2012, 09:44:05 pm »
Recémment, j'ai changé l'API des modules Particles et Resources un peu.

Particles
Il y a maintenant thor::UniversalEmitter qui remplace les autres emitters. Il est capable de definir les valeurs initiales d'une particule par un constant ou une fonction.
thor::UniversalEmitter::Ptr emitter = thor::UniversalEmitter::create();
emitter->setEmissionRate( 20 );
emitter->setColor( sf::Color::Red );
emitter->setLifetime( sf::seconds(4) );

// Positionner les particules dans un cercle
emitter->setPosition( thor::Distributions::circle(center, radius) );

 // Tourner avec un angle aléatoire
emitter->setRotation( thor::Distributions::uniform(0.f, 360) );

Resources
J'ai implementé des nouvelles clés de resource et remplacé thor::ResourcePtr par std::shared_ptr.
thor::ResourceManager<sf::Texture> mgr;
thor::ResourceKey<sf::Texture> key = thor::Resources::fromFile<sf::Texture>("image.png");
std::shared_ptr<sf::Texture> ptr = mgr.acquire(key);

// ou directement
std::shared_ptr<sf::Texture> ptr =
    mgr.acquire( thor::Resources::fromFile<sf::Texture>("image.png") );

En outre, j'utilise maintenant C++11 pour Thor.

56
Projets SFML / Re : Contagion
« le: Mars 31, 2012, 10:36:23 am »
Intéressant, cela me rappelle un peu au Conway's game of life :)
On peut enlever les murs? (Peut-être la touche droite de la souris serait une idée).

Est-ce que tu pourrais utiliser une site comme sfmluploads.org? Je n'aime pas faire dix clicks et attendre jusqu'à ce que je puisse télécharger le jeu.

57
Projets SFML / Re : Aurora
« le: Mars 26, 2012, 06:45:33 pm »
Merci. Oui, je sais qu'Aurora peut signifier beaucoup des autres choses, pour moi ça suffit si c'est unique dans sa domaine et si on peut le trouver (pour savoir cela, il faut attendre quelque temps). Mais peut-être Aurora n'est vraiment pas le meilleur nom... ???

58
Projets SFML / Thor 2.0
« le: Mars 25, 2012, 12:07:50 pm »
[Ouvert de nouveau a cause de l'échange de forum]


Thor 2.0

Entretemps, j'ai fini d'adapter la convention de nommage et de changer quelques autres choses (liste détaillé). En deux mots, j'utilise maintenant GitHub a j'ai délocalisé une partie de Thor dans une bibliothèque autonome.

Maintenant je peux commencer à améliorer des parties différentes de la bibliothèque Thor. Pour séparer mieux du development de Thor 1, j'ai ouvert un nouveau thread. Ici, je vous informe régulièrement des nouvelles. Si vous avez des suggestions, discutez les ici s'il vous plaît :)

Links
Page web du projet Thor
GitHub

59
Projets SFML / Aurora
« le: Mars 25, 2012, 12:07:14 pm »
[Ouvert de nouveau a cause de l'échange de forum]
[Corrigé les fautes de l'exemple Dispatcher]


Aurora

Bien que ce projet et SFML ne sont pas directement liés, je pense que quelques gens peuvent le trouver intéressant. Originalement une partie de Thor, Aurora est maintenant une bibliothèque autonome qui offre des fonctionnalités diverses pour C++.

Une exemple d'un smart pointer:
#include <Aurora/SmartPtr/CopiedPtr.hpp>

namespace sf { class Drawable; } // Forward declaration is enough

struct GameObject
{
        aur::CopiedPtr<sf::Drawable> drawable;
};

#include <SFML/Graphics.hpp>

int main()
{
        GameObject a, b, c;
        a.drawable.reset(new sf::RectangleShape);
        b.drawable.reset(new sf::Sprite); // different derivates
        c = a; // performs a deep copy
} // deletes everything correctly
sf::Drawable est une classe de base abstraite, mais on peut la mettre dans un smart-pointer. En conséquence, c'est possible de faire des copies comme d'habitude -- l'objet derivé (sf::RectangleShape) est copié correctment. Tout ça se passe sans un constructeur par recopie, un opérateur d'affectation, ou une fonction clone() virtuelle.

Un autre exemple: Les dispatchers qui sont capable de choisir la fonction correcte d'une nombre de candidates, tandis que les argument soyent seulement connu pendant l'éxecution du programme. Comme ça, on peut utiliser des classes de base (comme Object dans l'exemple), mais l'interaction entre deux objets peut être réalisée avec toute l'information des types. Il ne faut pas différentier des cas.
#include <Aurora/Dispatch.hpp>
#include <iostream>

// Example class hierarchy
class Object { public: virtual ~Object() {} };
class Asteroid : public Object {};
class Ship     : public Object {};

// Functions for collision with different argument types
void collision(Asteroid*, Asteroid*)    { std::cout << "Asteroid-Asteroid\n"; }
void collision(Asteroid*, Ship*)        { std::cout << "Asteroid-Ship\n";     }
void collision(Ship*,     Ship*)        { std::cout << "Ship-Ship\n";         }

int main()
{
    // Create dispatcher and register functions
    aur::DoubleDispatcher<Object*> dispatcher;
    dispatcher.add<Asteroid, Asteroid>(&collision);
    dispatcher.add<Asteroid, Ship>    (&collision);
    dispatcher.add<Ship,     Ship>    (&collision);

    // Base class pointers (no static type information about derived classes)
    Object* a = new Asteroid;
    Object* s = new Ship;

    // Invoke functions, let dispatcher choose the correct overload
    dispatcher.call(a, s); // Output: "Asteroid-Ship"
    dispatcher.call(a, a); // Output: "Asteroid-Asteroid"
    dispatcher.call(s, s); // Output: "Ship-Ship"
   
    delete a;
    delete s;
}

Aurora utilise la license zlib/libpng. Parce qu'il s'agit d'une bibliothèque header-only, vous n'avez pas besoin de compiler ou lier quelque chose.

Links
Page web du projet Aurora
GitHub

P.S. Excusez les expressions spécifiques de C++, je n'en connais pas toutes en français ;)

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