IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[Debutant] Problème SdlDotNet


Sujet :

C#

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 3
    Points
    3
    Par défaut [Debutant] Problème SdlDotNet
    Bonsoir,
    je réalise actuellement un jeu à l'aide de la lib sdl.net mais je bloque sur la gestion des collisions.
    Voilà ce que j'aimerai faire:
    - créer un background qui serait une image/fond quelconque
    - créer par dessus cette Surface une nouvelle Surface dans laquelle seraient affichés à la fois des png transparents/opaques
    - ensuite, je voulais récupérer la couleur d'un pixel situé par exemple sous le perso et dire que si il est opaque c'est qu'il y a une collision sinon non

    Le problème ici c'est que quand je récupère la couleur d'un pixel via ma seconde Surface j'ai l'impression que les 2 Surfaces (background et jeu) ont fusionné. Je n'arrive pas à résoudre ce problème. Voici le code:
    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
     
    ...
            public Sprite[] m_World = new Sprite[2];
            public AnimatedSprite m_Player = new AnimatedSprite();
            public Surface m_Screen,
                            m_Game;
     
            public void Go()
            {
                Video.WindowCaption = "Window";
                m_Screen = Video.SetVideoMode(200, 200);
                m_Game = new Surface(new Rectangle(new Point(0, 0), new Size(200, 200)));
                Keyboard.EnableKeyRepeat(100, 100);
     
                m_World[0] = new Sprite("floor.png");
                m_World[1] = new Sprite("sky.png"); // png transparent
                ...
                Events.KeyboardDown += new EventHandler<KeyboardEventArgs>(Events_KeyboardDown);
                Events.KeyboardUp += new EventHandler<KeyboardEventArgs>(Events_KeyboardUp);
                Events.Quit += new EventHandler<QuitEventArgs>(this.Quit);
                Events.Tick += new EventHandler<TickEventArgs>(Events_Tick);
                Events.MouseButtonDown += new EventHandler<MouseButtonEventArgs>(Events_MouseButtonDown);
                Events.Run();
            }
     
             ...
     
            void Events_Tick(object sender, TickEventArgs e)
            {
                m_Game.Fill(Color.Aqua);
                ...
                DrawLevel();
                ...
                Gravity(m_World,m_Player);
                ...
                m_Game.Blit(m_Player);
                m_Screen.Blit(m_Game);
                m_Screen.Update();
            }
     
            public void Gravity(Sprite[] world, AnimatedSprite player)
            {
                Color PixelColor = m_Game.GetPixel(new Point(player.X, (player.Y + player.Height + 2)));
                if (PixelColor.Equals( Color.FromArgb(255, 0, 255,255)))
                    player.Y+=2;
    Voila, le code est incomplet mais si vous avez besoin d'une précision demandez
    Aussi, j'ai une dernière question: Pensez-vous qu'une gestion des collisions de ce genre suffira pour un jeu du genre metal slug

    Merci,
    LoiL

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Bonsoir,
    je me permet de remonter le sujet car j'ai un autre soucis: quand j'essaie de faire pivoter une surface elle se détériore vraiment beaucoup et ses coordonnées changent. Le code est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Surface g = new Surface("gun.png");
    g = g.CreateRotatedSurface(30, true);
    Je n'arrive vraiment pas à saisir pourquoi. Pouvez m'aiguiller svp.
    Merci,
    LoiL

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 174
    Points : 12 303
    Points
    12 303
    Par défaut
    Lire des couleurs est calamiteux au niveau des performances et de la stabilité de l'application.

    Au lieu de lire dans la mémoire vidéo, essayez de maintenir une représentation logique de votre surface et de détecter les collisions à partir de cette représentation.

Discussions similaires

  1. [DX9] [Debutant] Problème de transparence :(
    Par SekYo dans le forum DirectX
    Réponses: 5
    Dernier message: 10/09/2004, 14h19
  2. [Debutant] Problème de sécurité dans un applet
    Par peaceinpal dans le forum Applets
    Réponses: 3
    Dernier message: 09/09/2004, 20h56
  3. [debutant]Problèmes
    Par BibiGmi dans le forum OpenGL
    Réponses: 2
    Dernier message: 05/03/2004, 14h00
  4. [Debutant] Problème du linker [Dev-c++4]
    Par Macdir dans le forum Dev-C++
    Réponses: 3
    Dernier message: 30/05/2003, 20h50

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