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