Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [Sfml 2.1]Tile isométrique  (Lu 4073 fois)

0 Membres et 1 Invité sur ce sujet

Bilt

  • Newbie
  • *
  • Messages: 48
    • Voir le profil
[Sfml 2.1]Tile isométrique
« le: Juillet 04, 2014, 02:31:56 am »
Bonjour à tous et à toutes !!  ;D
Voilà plusieurs heures que je cherche à mettre une simple tile par le biais de calcul dans une perceptive isométrique selon le shémas suivant :
Sans grand succès comme vous pouvez le constater sur ce screenshot :  >:(
J'ai cherché sur le web pendant pas mal de temps mais aucune technique que j'ai pu trouver fonctionnement réellement...
Voici mon code source actuel :
#include <SFML/Graphics.hpp>

int main(){
    sf::RenderWindow window(sf::VideoMode(100, 100), "Isometric Tile");

    sf::RectangleShape rect(sf::Vector2f(40,40));
    rect.setFillColor(sf::Color::Green);
    rect.setPosition(30,30);
    rect.rotate(45.0f);
    rect.setSize(sf::Vector2f(rect.getSize().x, rect.getSize().y/2));

    while(window.isOpen()){
        sf::Event event;
        while(window.pollEvent(event)){
            if(event.type == sf::Event::Closed)
                window.close();
        }
        window.clear();
        window.draw(rect);
        window.display();
    }
    return 0;
}
 
Merci de votre aide, futur.  :-*
Sur ce bonne nuit à vous  :-\
PS : On m'a conseillé d'utiliser Opengl mais je pense que ça n'est pas utile et je veux y faire abstraction; aussi conseiller d'utiliser les vues (ex : http://stackoverflow.com/questions/14179931/sfml-generate-isometric-tile) mais il y a sûrement moyen que vous m'aidiez

Bilt

  • Newbie
  • *
  • Messages: 48
    • Voir le profil
Re : [Sfml 2.1]Tile isométrique
« Réponse #1 le: Juillet 04, 2014, 02:56:31 am »
Up j'ai un peu bossé j'ai repris rapidement le code mis dans début du post et donc j'ai à présent ceci :
Cependant ma texture de base étant cette dernière :

Nous pouvons remarquer que la texture est aussi affectée par la rotation, est-ce le cas pour tout le monde ou bien est-ce une spécificité de mon code ?
Si je mets une texture telle que celle-ci :
J'obtiens le même problème c'est évident.
Merci de votre aide :)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [Sfml 2.1]Tile isométrique
« Réponse #2 le: Juillet 04, 2014, 07:48:23 am »
Ce serait bien que tu postes le code qui marche ;)

Concernant la texture, qu'est-ce qui ne va pas ? Tu voudrais quel résultat ?
Laurent Gomila - SFML developer

Bilt

  • Newbie
  • *
  • Messages: 48
    • Voir le profil
Re : [Sfml 2.1]Tile isométrique
« Réponse #3 le: Juillet 04, 2014, 11:36:14 am »
Tu souhaites voir le code du second screen ? Le voici
#include <SFML/Graphics.hpp>

int main(){
    sf::RenderWindow window(sf::VideoMode(100, 100), "Isometric Tile");

    sf::Texture tex;
    tex.loadFromFile("tile2.png");
    sf::Sprite tile(tex);
    tile.setPosition(30,30);
    tile.setRotation(45.0f);
    tile.setPosition(sf::Vector2f(tile.getPosition().x, tile.getPosition().y*2));

    sf::View view = window.getDefaultView();
    view.setSize(view.getSize().x, view.getSize().y*2);

    while(window.isOpen()){
        sf::Event event;
        while(window.pollEvent(event)){
            if(event.type == sf::Event::Closed)
                window.close();
        }
        window.setView(view);
        window.clear();
        window.draw(tile);
        window.display();
    }
    return 0;
}
 
A vrai dire je ne sais pas trop comment fonctionne l'application de texture sur de l'isométrie. Logiquement une tile en isométrie il faut qu'elle est subie au préalable la même transformation que pour le sprite et ensuite on vient déposer notre texture dessus :) Enfin c'est ce que j'en ai imaginé le fonctionnement :p

Bilt

  • Newbie
  • *
  • Messages: 48
    • Voir le profil
Re : [Sfml 2.1]Tile isométrique
« Réponse #4 le: Juillet 05, 2014, 10:07:37 pm »
Bon du coup je pars sur de la 2D simplement pour ne pas avoir à faire plein de calcul c'est peut être plus de mon niveau :)

Cmdu76

  • Full Member
  • ***
  • Messages: 194
    • Voir le profil
Re : [Sfml 2.1]Tile isométrique
« Réponse #5 le: Juillet 09, 2014, 02:38:29 am »
Pourquoi ne pas directement passer par un tileset isométrique ?

http://www.nox-rhea.org/tutoriaux/3Disometrique

Adaptation en C++ :

for(size_t x = 0; x < MAP_X; x++)
{
    for(size_t y = 0; y < MAP_Y; y++)
    {
        sf::Vector2f position;
        position.x = (x-y)*(TILESIZE/2);
        position.y = ((x+y)/2)*(TILESIZE/2);
        mSprite.setPosition(position);
    }
}